From e0926bb13788d678dda3abb3418403fad818a0f4 Mon Sep 17 00:00:00 2001 From: Stephane Glondu Date: Tue, 21 Dec 2021 13:49:01 +0100 Subject: [PATCH] New upstream version 4.13.0 --- .depend | 683 +- .gitattributes | 88 +- .github/workflows/{main.yml => build.yml} | 30 +- .github/workflows/hygiene.yml | 95 + .gitignore | 28 +- .mailmap | 15 +- BOOTSTRAP.adoc | 51 +- CONTRIBUTING.md | 53 +- Changes | 654 +- HACKING.adoc | 222 +- INSTALL.adoc | 15 +- Makefile | 356 +- Makefile.best_binaries | 4 +- Makefile.build_config.in | 9 + Makefile.common | 80 +- Makefile.config.in | 52 +- Makefile.config_if_required | 4 +- Makefile.dev | 4 +- Makefile.menhir | 153 +- Makefile.tools | 110 - README.adoc | 64 +- README.win32.adoc | 38 +- VERSION | 2 +- aclocal.m4 | 181 +- api_docgen/Compiler_libs.pre.mld | 6 + api_docgen/Format_tutorial.mld | 425 + .../Makefile | 27 +- api_docgen/Makefile.common | 56 + api_docgen/Makefile.docfiles | 81 + .../Ocaml_operators.mld | 4 +- api_docgen/alldoc.tex | 93 + api_docgen/ocamldoc/Makefile | 126 + api_docgen/odoc/Makefile | 193 + appveyor.yml | 12 +- asmcomp/CSEgen.ml | 49 +- asmcomp/CSEgen.mli | 2 +- asmcomp/amd64/CSE.ml | 2 +- asmcomp/amd64/arch.ml | 13 + asmcomp/amd64/emit.mlp | 285 +- asmcomp/amd64/proc.ml | 23 +- asmcomp/amd64/selection.ml | 3 +- asmcomp/arm/arch.ml | 12 + asmcomp/arm/emit.mlp | 329 +- asmcomp/arm/proc.ml | 15 +- asmcomp/arm/scheduling.ml | 2 +- asmcomp/arm/selection.ml | 3 +- asmcomp/arm64/arch.ml | 95 + asmcomp/arm64/emit.mlp | 421 +- asmcomp/arm64/proc.ml | 45 +- asmcomp/arm64/selection.ml | 52 +- asmcomp/asmgen.ml | 72 +- asmcomp/asmgen.mli | 3 +- asmcomp/asmlink.ml | 84 +- asmcomp/asmpackager.ml | 1 - asmcomp/branch_relaxation.ml | 41 +- asmcomp/branch_relaxation.mli | 2 +- asmcomp/branch_relaxation_intf.ml | 8 +- asmcomp/cmm.ml | 1 + asmcomp/cmm.mli | 1 + asmcomp/cmm_helpers.ml | 5 +- asmcomp/cmm_helpers.mli | 3 + asmcomp/cmm_invariants.ml | 180 + asmcomp/cmm_invariants.mli | 36 + asmcomp/cmmgen.ml | 17 +- asmcomp/coloring.ml | 2 +- asmcomp/comballoc.ml | 2 +- asmcomp/dataflow.ml | 86 + asmcomp/dataflow.mli | 90 + asmcomp/deadcode.ml | 2 +- asmcomp/debug/available_regs.ml | 351 - asmcomp/debug/available_regs.mli | 18 - asmcomp/debug/compute_ranges.ml | 515 - asmcomp/debug/compute_ranges_intf.ml | 274 - asmcomp/debug/reg_availability_set.ml | 111 - asmcomp/debug/reg_availability_set.mli | 37 - asmcomp/debug/reg_with_debug_info.ml | 200 - asmcomp/debug/reg_with_debug_info.mli | 112 - asmcomp/emitaux.ml | 47 +- asmcomp/emitaux.mli | 9 +- asmcomp/emitenv.mli | 92 + asmcomp/i386/CSE.ml | 2 +- asmcomp/i386/arch.ml | 12 + asmcomp/i386/emit.mlp | 243 +- asmcomp/i386/proc.ml | 11 - asmcomp/i386/selection.ml | 5 +- asmcomp/linearize.ml | 114 +- asmcomp/liveness.ml | 142 +- asmcomp/liveness.mli | 1 - asmcomp/mach.ml | 37 +- asmcomp/mach.mli | 23 +- asmcomp/polling.ml | 258 + .../{debug/compute_ranges.mli => polling.mli} | 26 +- asmcomp/power/CSE.ml | 2 +- asmcomp/power/arch.ml | 18 + asmcomp/power/emit.mlp | 344 +- asmcomp/power/proc.ml | 30 +- asmcomp/power/scheduling.ml | 4 +- asmcomp/power/selection.ml | 3 +- asmcomp/printcmm.ml | 1 + asmcomp/printlinear.ml | 2 +- asmcomp/printmach.ml | 31 +- asmcomp/proc.mli | 3 - asmcomp/reloadgen.ml | 4 + asmcomp/riscv/arch.ml | 8 + asmcomp/riscv/emit.mlp | 207 +- asmcomp/riscv/proc.ml | 55 +- asmcomp/riscv/selection.ml | 3 +- asmcomp/s390x/arch.ml | 8 + asmcomp/s390x/emit.mlp | 237 +- asmcomp/s390x/proc.ml | 10 - asmcomp/s390x/scheduling.ml | 4 +- asmcomp/s390x/selection.ml | 3 +- asmcomp/schedgen.ml | 8 +- asmcomp/selectgen.ml | 53 +- asmcomp/selectgen.mli | 8 +- asmcomp/selection.mli | 3 +- asmcomp/spill.ml | 128 +- boot/menhir/menhirLib.ml | 376 +- boot/menhir/menhirLib.mli | 128 +- boot/menhir/parser.ml | 12568 +++++++++------- boot/ocamlc | Bin 2803652 -> 2893319 bytes boot/ocamllex | Bin 345643 -> 351449 bytes build-aux/ax_pthread.m4 | 224 +- bytecomp/bytegen.ml | 22 +- bytecomp/bytelink.ml | 28 +- bytecomp/bytelink.mli | 1 + compilerlibs/Makefile.compilerlibs | 338 +- configure | 1941 ++- configure.ac | 501 +- debugger/Makefile | 16 +- debugger/command_line.ml | 2 +- debugger/time_travel.ml | 4 +- driver/compenv.ml | 64 +- driver/compenv.mli | 6 + driver/compile.ml | 4 +- driver/compile.mli | 2 +- driver/compile_common.mli | 11 +- driver/main_args.ml | 36 +- driver/main_args.mli | 3 +- driver/maindriver.ml | 6 +- driver/makedepend.ml | 118 +- driver/optcompile.ml | 10 +- driver/optcompile.mli | 4 +- driver/optmaindriver.ml | 9 +- dune | 24 +- lambda/generate_runtimedef.sh | 3 + lambda/lambda.ml | 49 +- lambda/lambda.mli | 8 +- lambda/matching.ml | 382 +- lambda/printlambda.ml | 32 +- lambda/simplif.ml | 251 +- lambda/translclass.ml | 5 +- lambda/translcore.ml | 58 +- lambda/translmod.ml | 2 +- lambda/translprim.ml | 50 +- lex/Makefile | 27 +- lex/common.ml | 2 +- lex/cset.ml | 4 +- lex/lexgen.ml | 11 +- man/ocamlc.m | 10 +- man/ocamlopt.m | 6 + man/ocamlrun.m | 3 +- manual/Makefile | 18 +- manual/README.md | 32 +- manual/manual/cmds/Makefile | 52 - manual/manual/library/Makefile | 78 - manual/manual/library/stdlib-blurb.etex | 223 - manual/manual/refman/exten.etex | 2774 ---- manual/manual/tutorials/.gitignore | 2 - manual/{manual => src}/.gitignore | 1 + manual/{manual => src}/Makefile | 116 +- manual/{manual => src}/allfiles.etex | 2 + manual/{manual => src}/anchored_book.hva | 0 manual/{manual => src}/biblio.etex | 0 manual/{manual => src}/cmds/.gitignore | 0 manual/{manual/refman => src/cmds}/Makefile | 21 +- manual/{manual => src}/cmds/afl-fuzz.etex | 0 manual/{manual => src}/cmds/comp.etex | 69 +- manual/{manual => src}/cmds/debugger.etex | 0 manual/{manual => src}/cmds/flambda.etex | 0 .../cmds/instrumented-runtime.etex | 0 manual/{manual => src}/cmds/intf-c.etex | 85 +- manual/{manual => src}/cmds/lexyacc.etex | 4 +- manual/{manual => src}/cmds/native.etex | 4 +- manual/{manual => src}/cmds/ocamldep.etex | 7 +- manual/{manual => src}/cmds/ocamldoc.etex | 44 +- manual/{manual => src}/cmds/profil.etex | 0 manual/{manual => src}/cmds/runtime.etex | 10 +- manual/{manual => src}/cmds/top.etex | 0 .../{manual => src}/cmds/unified-options.etex | 26 +- manual/{manual => src}/foreword.etex | 0 .../html_processing/.gitignore | 0 .../{manual => src}/html_processing/Makefile | 49 +- .../{manual => src}/html_processing/README.md | 0 .../html_processing/dune-project | 0 .../html_processing/js/navigation.js | 0 .../html_processing/js/scroll.js | 0 .../html_processing/js/search.js | 0 .../html_processing/scss/_common.scss | 0 .../html_processing/scss/manual.scss | 38 +- .../html_processing/scss/style.scss | 0 .../html_processing/src/common.ml | 0 .../{manual => src}/html_processing/src/dune | 0 .../html_processing/src/process_api.ml | 0 .../html_processing/src/process_manual.ml | 2 +- manual/{manual => src}/htmlman/.gitignore | 2 + .../htmlman/contents_motif.gif | Bin .../fonts/fira-sans-v8-latin-regular.eot | Bin .../fonts/fira-sans-v8-latin-regular.svg | 0 .../fonts/fira-sans-v8-latin-regular.ttf | Bin .../fonts/fira-sans-v8-latin-regular.woff | Bin .../fonts/fira-sans-v8-latin-regular.woff2 | Bin manual/{manual => src}/htmlman/libgraph.gif | Bin manual/{manual => src}/htmlman/next_motif.gif | Bin .../htmlman/previous_motif.gif | Bin manual/{manual => src}/index.tex | 0 manual/{manual => src}/infoman/.gitignore | 0 manual/{manual => src}/library/.gitignore | 0 manual/src/library/Makefile | 20 + manual/{manual => src}/library/builtin.etex | 0 .../{manual => src}/library/compiler_libs.mld | 0 .../{manual => src}/library/compilerlibs.etex | 41 +- manual/{manual => src}/library/core.etex | 16 +- .../{manual => src}/library/libdynlink.etex | 11 +- manual/{manual => src}/library/libstr.etex | 14 +- .../{manual => src}/library/libthreads.etex | 22 +- manual/{manual => src}/library/libunix.etex | 20 +- manual/{manual => src}/library/old.etex | 0 manual/src/library/stdlib-blurb.etex | 167 + manual/{manual => src}/macros.hva | 44 +- manual/{manual => src}/macros.tex | 26 +- manual/{manual => src}/manual.hva | 1 + manual/{manual => src}/manual.inf | 17 +- manual/{manual => src}/manual.info.header | 0 manual/{manual => src}/manual.tex | 73 +- manual/src/refman/.gitignore | 4 + manual/src/refman/Makefile | 44 + manual/{manual => src}/refman/classes.etex | 0 manual/{manual => src}/refman/compunit.etex | 0 manual/{manual => src}/refman/const.etex | 0 manual/{manual => src}/refman/expr.etex | 431 +- manual/src/refman/exten.etex | 122 + manual/src/refman/extensions/alerts.etex | 96 + manual/src/refman/extensions/attributes.etex | 392 + manual/src/refman/extensions/bigarray.etex | 37 + manual/src/refman/extensions/bindingops.etex | 150 + manual/src/refman/extensions/doccomments.etex | 181 + .../src/refman/extensions/emptyvariants.etex | 12 + .../refman/extensions/extensiblevariants.etex | 119 + .../src/refman/extensions/extensionnodes.etex | 131 + .../refman/extensions/extensionsyntax.etex | 63 + .../refman/extensions/firstclassmodules.etex | 226 + manual/src/refman/extensions/gadts.etex | 33 + .../refman/extensions/generalizedopens.etex | 115 + .../refman/extensions/generativefunctors.etex | 37 + manual/src/refman/extensions/indexops.etex | 109 + .../src/refman/extensions/inlinerecords.etex | 44 + .../src/refman/extensions/letrecvalues.etex | 66 + .../refman/extensions/locallyabstract.etex | 88 + manual/src/refman/extensions/modulealias.etex | 110 + .../src/refman/extensions/moduletypeof.etex | 46 + .../src/refman/extensions/overridingopen.etex | 32 + .../src/refman/extensions/privatetypes.etex | 166 + .../refman/extensions/recursivemodules.etex | 80 + .../extensions/signaturesubstitution.etex | 161 + manual/{manual => src}/refman/lex.etex | 58 +- manual/{manual => src}/refman/modtypes.etex | 7 +- manual/{manual => src}/refman/modules.etex | 0 manual/{manual => src}/refman/names.etex | 0 manual/{manual => src}/refman/patterns.etex | 132 +- manual/{manual => src}/refman/refman.etex | 2 +- manual/{manual => src}/refman/typedecl.etex | 34 +- manual/{manual => src}/refman/types.etex | 0 manual/{manual => src}/refman/values.etex | 0 manual/{manual => src}/style.css | 0 manual/{manual => src}/texstuff/.gitignore | 0 manual/{manual => src}/textman/.gitignore | 0 .../refman => src/tutorials}/.gitignore | 0 manual/{manual => src}/tutorials/Makefile | 14 +- .../tutorials/advexamples.etex | 0 .../tutorials/coreexamples.etex | 4 +- manual/src/tutorials/gadtexamples.etex | 304 + .../tutorials/lablexamples.etex | 228 +- .../tutorials/moduleexamples.etex | 0 .../tutorials/objectexamples.etex | 0 .../tutorials/polymorphism.etex | 0 manual/src/tutorials/polyvariant.etex | 179 + manual/styles/syntaxdef.hva | 6 +- manual/tests/Makefile | 29 +- manual/tests/README.md | 2 +- manual/tests/check-stdlib-modules | 12 +- manual/tools/Makefile | 23 +- middle_end/closure/closure.ml | 49 +- middle_end/closure/closure_middle_end.ml | 2 +- middle_end/closure/closure_middle_end.mli | 1 - middle_end/convert_primitives.ml | 3 - middle_end/flambda/closure_conversion.ml | 42 +- middle_end/flambda/closure_conversion.mli | 1 - middle_end/flambda/export_info_for_pack.ml | 14 +- middle_end/flambda/flambda_middle_end.ml | 7 +- middle_end/flambda/flambda_middle_end.mli | 1 - middle_end/flambda/flambda_to_clambda.ml | 4 +- middle_end/flambda/inconstant_idents.ml | 4 +- middle_end/flambda/inline_and_simplify_aux.ml | 4 +- middle_end/flambda/inlining_cost.ml | 6 +- middle_end/flambda/un_anf.ml | 2 - middle_end/internal_variable_names.ml | 12 - ocaml-variants.opam | 6 +- ocamldoc/Makefile | 186 +- ocamldoc/Makefile.best_ocamldoc | 46 + ocamldoc/Makefile.docfiles | 64 - ocamldoc/odoc_analyse.ml | 3 +- ocamldoc/odoc_args.ml | 3 +- ocamldoc/odoc_ast.ml | 4 +- ocamldoc/odoc_dag2html.ml | 10 +- ocamldoc/odoc_env.ml | 10 +- ocamldoc/odoc_html.ml | 78 +- ocamldoc/odoc_man.ml | 2 +- ocamldoc/odoc_messages.ml | 3 +- ocamldoc/odoc_misc.ml | 9 +- ocamldoc/odoc_print.ml | 13 +- ocamldoc/odoc_sig.ml | 13 +- ocamldoc/odoc_sig.mli | 2 +- ocamldoc/odoc_str.ml | 9 +- ocamldoc/odoc_texi.ml | 2 +- ocamldoc/odoc_to_text.ml | 2 +- ocamldoc/odoc_value.ml | 10 +- ocamltest/Makefile | 42 +- ocamltest/actions_helpers.ml | 33 +- ocamltest/actions_helpers.mli | 2 +- ocamltest/builtin_actions.ml | 63 +- ocamltest/builtin_actions.mli | 4 + ocamltest/builtin_variables.ml | 24 +- ocamltest/builtin_variables.mli | 12 +- ocamltest/dune | 3 +- ocamltest/environments.ml | 6 + ocamltest/environments.mli | 5 + ocamltest/main.ml | 2 + ocamltest/ocaml_actions.ml | 31 +- ocamltest/ocaml_tests.ml | 2 +- ocamltest/ocaml_variables.ml | 8 + ocamltest/ocaml_variables.mli | 3 + ocamltest/ocamltest_config.ml.in | 8 +- ocamltest/ocamltest_config.mli | 5 +- ocamltest/ocamltest_stdlib.ml | 69 +- ocamltest/ocamltest_stdlib.mli | 1 + ocamltest/options.ml | 8 + ocamltest/options.mli | 2 + ocamltest/run_unix.c | 2 +- ocamltest/run_win32.c | 20 +- ocamltest/tsl_lexer.mll | 2 + otherlibs/Makefile.otherlibs.common | 14 +- otherlibs/bigarray/Makefile | 2 +- otherlibs/dynlink/Makefile | 20 +- otherlibs/dynlink/dynlink_common.ml | 10 - otherlibs/str/Makefile | 2 +- otherlibs/str/str.ml | 5 +- otherlibs/str/str.mli | 3 +- otherlibs/systhreads/Makefile | 26 +- otherlibs/systhreads/st_stubs.c | 9 + otherlibs/unix/Makefile | 4 +- otherlibs/unix/dup2.c | 4 +- otherlibs/unix/errmsg.c | 7 +- otherlibs/unix/link.c | 6 +- otherlibs/unix/realpath.c | 43 + otherlibs/unix/socket.c | 4 +- otherlibs/unix/socketpair.c | 3 +- otherlibs/unix/sockopt.c | 15 +- otherlibs/unix/spawn.c | 10 +- otherlibs/unix/unix.ml | 11 +- otherlibs/unix/unix.mli | 120 +- otherlibs/unix/unixLabels.mli | 120 +- otherlibs/unix/unixsupport.c | 7 +- otherlibs/win32unix/Makefile | 9 +- otherlibs/win32unix/channels.c | 3 +- otherlibs/win32unix/errmsg.c | 4 +- otherlibs/win32unix/getsockname.c | 5 +- otherlibs/win32unix/link.c | 2 +- otherlibs/win32unix/realpath.c | 79 + otherlibs/win32unix/socket.c | 15 +- otherlibs/win32unix/sockopt.c | 23 +- otherlibs/win32unix/truncate.c | 5 +- otherlibs/win32unix/unix.ml | 17 + otherlibs/win32unix/unixsupport.c | 21 +- otherlibs/win32unix/unixsupport.h | 3 +- parsing/ast_helper.ml | 1 + parsing/ast_helper.mli | 4 +- parsing/ast_invariants.ml | 6 +- parsing/ast_iterator.ml | 13 +- parsing/ast_mapper.ml | 14 +- parsing/builtin_attributes.ml | 4 +- parsing/depend.ml | 10 +- parsing/lexer.mli | 1 + parsing/lexer.mll | 9 + parsing/location.ml | 10 +- parsing/location.mli | 2 +- parsing/longident.mli | 8 +- parsing/parse.ml | 106 +- parsing/parser.mly | 690 +- parsing/parsetree.mli | 16 +- parsing/pprintast.ml | 83 +- parsing/pprintast.mli | 2 + parsing/printast.ml | 18 +- release-info/howto.md | 18 +- runtime/Makefile | 110 +- runtime/afl.c | 7 +- runtime/arm64.S | 49 +- runtime/array.c | 120 +- runtime/backtrace.c | 10 +- runtime/backtrace_byt.c | 5 +- runtime/backtrace_nat.c | 5 +- runtime/caml/backtrace.h | 25 +- runtime/caml/compact.h | 2 +- runtime/caml/compatibility.h | 3 - runtime/caml/config.h | 9 +- runtime/caml/domain_state.tbl | 2 +- runtime/caml/dynlink.h | 6 + runtime/caml/exec.h | 2 +- runtime/caml/fail.h | 5 + runtime/caml/finalise.h | 1 - runtime/caml/freelist.h | 9 +- runtime/caml/gc_ctrl.h | 8 +- runtime/caml/io.h | 16 +- runtime/caml/major_gc.h | 4 + runtime/caml/md5.h | 2 - runtime/caml/memory.h | 8 +- runtime/caml/misc.h | 15 + runtime/caml/mlvalues.h | 8 + runtime/caml/osdeps.h | 20 +- runtime/caml/s.h.in | 15 +- runtime/caml/signals.h | 2 +- runtime/caml/startup_aux.h | 1 + runtime/caml/sys.h | 4 +- runtime/compact.c | 63 +- runtime/debugger.c | 55 +- runtime/dune | 1 + runtime/dynlink.c | 21 +- runtime/eventlog.c | 3 +- runtime/floats.c | 154 +- runtime/freelist.c | 49 +- runtime/gc_ctrl.c | 6 +- runtime/io.c | 64 +- runtime/main.c | 2 +- runtime/major_gc.c | 93 +- runtime/memory.c | 52 +- runtime/memprof.c | 2 +- runtime/power.S | 15 +- runtime/riscv.S | 108 +- runtime/sak.c | 148 + runtime/signals_byt.c | 2 +- runtime/signals_nat.c | 53 +- runtime/signals_osdep.h | 139 +- runtime/startup_aux.c | 7 +- runtime/startup_byt.c | 198 +- runtime/startup_nat.c | 2 +- runtime/sys.c | 19 +- runtime/unix.c | 11 +- runtime/win32.c | 36 +- stdlib/.depend | 1251 +- stdlib/CONTRIBUTING.md | 69 + stdlib/Compflags | 16 +- stdlib/HACKING.adoc | 4 +- stdlib/Makefile | 76 +- stdlib/StdlibModules | 39 +- stdlib/arg.ml | 8 +- stdlib/array.ml | 64 + stdlib/array.mli | 37 +- stdlib/arrayLabels.mli | 37 +- stdlib/buffer.mli | 42 +- stdlib/bytes.ml | 69 +- stdlib/bytes.mli | 51 +- stdlib/bytesLabels.mli | 51 +- stdlib/camlinternalFormat.ml | 2 +- stdlib/camlinternalMod.ml | 143 +- stdlib/camlinternalOO.ml | 1 + stdlib/dune | 11 +- stdlib/ephemeron.ml | 8 +- stdlib/expand_module_aliases.awk | 5 +- stdlib/filename.ml | 4 +- stdlib/float.ml | 16 + stdlib/float.mli | 91 +- stdlib/format.ml | 11 +- stdlib/format.mli | 39 +- stdlib/gc.mli | 21 +- stdlib/hashtbl.ml | 4 +- stdlib/hashtbl.mli | 2 +- stdlib/int.ml | 2 + stdlib/int.mli | 10 + stdlib/int32.ml | 7 +- stdlib/int32.mli | 11 + stdlib/int64.ml | 3 + stdlib/int64.mli | 10 + stdlib/lazy.ml | 11 +- stdlib/lazy.mli | 76 +- stdlib/lexing.ml | 3 +- stdlib/list.mli | 4 +- stdlib/listLabels.mli | 4 +- stdlib/map.mli | 2 +- stdlib/marshal.mli | 9 +- stdlib/moreLabels.mli | 4 +- stdlib/nativeint.ml | 3 + stdlib/nativeint.mli | 11 + stdlib/parsing.ml | 1 + stdlib/queue.mli | 4 +- stdlib/random.ml | 36 +- stdlib/random.mli | 12 + stdlib/scanf.ml | 10 +- stdlib/seq.ml | 13 +- stdlib/seq.mli | 14 +- stdlib/stack.mli | 6 +- stdlib/stdlib.ml | 6 + stdlib/stdlib.mli | 30 + stdlib/string.ml | 53 + stdlib/string.mli | 185 +- stdlib/stringLabels.mli | 185 +- stdlib/templates/float.template.mli | 79 +- .../templates/floatarraylabeled.template.mli | 6 +- stdlib/templates/hashtbl.template.mli | 2 +- stdlib/templates/map.template.mli | 2 +- stdlib/weak.ml | 4 +- testsuite/Makefile | 96 +- testsuite/lib/Makefile | 9 +- .../tests/afl-instrumentation/afltest.ml | 2 +- testsuite/tests/asmcomp/polling.c | 18 + testsuite/tests/asmcomp/polling_insertion.ml | 293 + testsuite/tests/asmcomp/try_checkbound.ml | 12 + testsuite/tests/asmgen/arith.cmm | 2 +- testsuite/tests/asmgen/catch-float.cmm | 2 +- testsuite/tests/asmgen/catch-multiple.cmm | 2 +- .../tests/asmgen/catch-rec-deadhandler.cmm | 2 +- testsuite/tests/asmgen/catch-rec.cmm | 2 +- testsuite/tests/asmgen/catch-try-float.cmm | 2 +- testsuite/tests/asmgen/catch-try.cmm | 2 +- testsuite/tests/asmgen/checkbound.cmm | 2 +- .../tests/asmgen/even-odd-spill-float.cmm | 2 +- testsuite/tests/asmgen/even-odd-spill.cmm | 2 +- testsuite/tests/asmgen/even-odd.cmm | 2 +- testsuite/tests/asmgen/fib.cmm | 2 +- testsuite/tests/asmgen/immediates.cmm | 2 +- testsuite/tests/asmgen/immediates.cmmpp | 2 +- testsuite/tests/asmgen/integr.cmm | 2 +- testsuite/tests/asmgen/invariants.cmm | 24 + testsuite/tests/asmgen/main.c | 8 + testsuite/tests/asmgen/mainarith.c | 4 + testsuite/tests/asmgen/pgcd.cmm | 2 +- testsuite/tests/asmgen/quicksort.cmm | 2 +- testsuite/tests/asmgen/quicksort2.cmm | 2 +- testsuite/tests/asmgen/soli.cmm | 2 +- testsuite/tests/asmgen/tagged-fib.cmm | 2 +- testsuite/tests/asmgen/tagged-integr.cmm | 2 +- testsuite/tests/asmgen/tagged-quicksort.cmm | 2 +- testsuite/tests/asmgen/tagged-tak.cmm | 2 +- testsuite/tests/asmgen/tak.cmm | 2 +- testsuite/tests/ast-invariants/test.ml | 2 +- testsuite/tests/backtrace/backtrace.ml | 13 +- .../tests/backtrace/backtrace2.reference | 4 +- .../backtrace/pr2195-locs.byte.reference | 2 +- .../tests/backtrace/pr2195.opt.reference | 4 +- testsuite/tests/basic-io-2/io.ml | 2 +- .../recursive_module_evaluation_errors.ml | 8 +- .../basic-modules/recursive_module_init.ml | 68 + .../recursive_module_init.reference | 13 + .../basic-more/pr10338.compilers.reference | 5 + testsuite/tests/basic-more/pr10338.ml | 21 + testsuite/tests/basic-more/pr10338.reference | 3 + testsuite/tests/basic/boxedints.ml | 10 + testsuite/tests/basic/boxedints.reference | 6 + testsuite/tests/basic/eval_order_7.ml | 11 + testsuite/tests/basic/eval_order_7.reference | 6 + testsuite/tests/basic/eval_order_pr10283.ml | 12 + .../tests/basic/eval_order_pr10283.reference | 1 + .../tests/basic/patmatch_for_multiple.ml | 257 +- .../tests/compiler-libs/test_untypeast.ml | 17 + testsuite/tests/fma/fma.ml | 12 +- testsuite/tests/gc-roots/globroots.ml | 2 +- .../errors.compilers.reference | 2401 +++ .../tests/generated-parse-errors/errors.ml | 3261 ++++ testsuite/tests/instrumented-runtime/main.ml | 2 +- testsuite/tests/let-syntax/let_syntax.ml | 9 +- testsuite/tests/lib-array/test_array.ml | 74 + testsuite/tests/lib-bigarray-2/bigarrcml.ml | 60 + .../tests/lib-bigarray-2/bigarrcml.reference | 14 + testsuite/tests/lib-bigarray-2/bigarrcstub.c | 57 + testsuite/tests/lib-bigarray-2/bigarrfml.ml | 16 +- .../tests/lib-bigarray-2/bigarrfml.reference | 10 - testsuite/tests/lib-bigarray-2/bigarrfstub.c | 48 +- testsuite/tests/lib-bytes/test_bytes.ml | 31 + .../tests/lib-bytes/test_bytes.reference | 2 +- testsuite/tests/lib-digest/md5.ml | 2 +- testsuite/tests/lib-dynlink-bytecode/main.ml | 2 +- testsuite/tests/lib-dynlink-csharp/main.ml | 6 +- .../test10_main.byte.reference | 8 +- .../lib-dynlink-initializers/test10_main.ml | 2 +- .../test10_main.native.reference | 12 +- .../lib-dynlink-initializers/test1_main.ml | 2 +- .../lib-dynlink-initializers/test2_main.ml | 2 +- .../lib-dynlink-initializers/test3_main.ml | 2 +- .../lib-dynlink-initializers/test4_main.ml | 2 +- .../lib-dynlink-initializers/test5_main.ml | 2 +- .../lib-dynlink-initializers/test6_main.ml | 2 +- .../lib-dynlink-initializers/test7_main.ml | 2 +- .../lib-dynlink-initializers/test8_main.ml | 2 +- .../lib-dynlink-initializers/test9_main.ml | 2 +- testsuite/tests/lib-dynlink-native/main.ml | 113 +- testsuite/tests/lib-dynlink-packed/loader.ml | 2 +- testsuite/tests/lib-dynlink-pr4229/main.ml | 60 +- testsuite/tests/lib-dynlink-pr4839/test.ml | 32 +- testsuite/tests/lib-dynlink-pr6950/loader.ml | 2 +- testsuite/tests/lib-dynlink-pr9209/dyn.ml | 2 +- testsuite/tests/lib-dynlink-private/test.ml | 161 +- testsuite/tests/lib-either/test.ml | 3 +- testsuite/tests/lib-filename/quotecommand.ml | 2 +- testsuite/tests/lib-float/test.ml | 255 +- testsuite/tests/lib-float/test.reference | 94 +- testsuite/tests/lib-int/test.ml | 6 + testsuite/tests/lib-int64/test.ml | 5 + testsuite/tests/lib-lazy/test.ml | 57 + testsuite/tests/lib-random/chi2.ml | 88 + testsuite/tests/lib-random/full_int.ml | 10 + testsuite/tests/lib-random/full_int.reference | 1 + testsuite/tests/lib-scanf-2/tscanf2_master.ml | 2 +- testsuite/tests/lib-seq/test.ml | 7 + testsuite/tests/lib-stream/mpr7769.ml | 2 +- testsuite/tests/lib-string/binary.ml | 116 + testsuite/tests/lib-string/test_string.ml | 12 + testsuite/tests/lib-sys/opaque.ml | 37 + testsuite/tests/lib-sys/opaque.reference | 3 + testsuite/tests/lib-threads/delayintr.ml | 2 +- testsuite/tests/lib-threads/pr8857.ml | 12 + testsuite/tests/lib-threads/signal.ml | 2 +- testsuite/tests/lib-unix/common/cloexec.ml | 2 +- .../tests/lib-unix/common/redirections.ml | 2 +- .../lib-unix/common/test_unix_cmdline.ml | 2 +- testsuite/tests/lib-unix/common/utimes.ml | 2 +- .../tests/lib-unix/common/wait_nohang.ml | 2 +- testsuite/tests/lib-unix/realpath/test.ml | 28 + .../tests/lib-unix/realpath/test.reference | 2 + testsuite/tests/lib-unix/win-env/test_env.ml | 2 +- testsuite/tests/load_path/test.ml | 10 +- .../tests/load_path/{ => test}/driver.ml | 0 .../tests/load_path/{ => test}/payload.ml | 0 testsuite/tests/misc/exotic.ml | 7 +- .../no-alias-deps/aliases.compilers.reference | 8 +- testsuite/tests/no-alias-deps/aliases.ml | 13 +- .../no-alias-deps/{b.cmi.invalid => b.cmi} | 0 testsuite/tests/no-alias-deps/gpr2235.ml | 2 +- testsuite/tests/opaque/test.ml | 41 +- .../tests/output-complete-obj/github9344.ml | 2 +- testsuite/tests/output-complete-obj/test.ml | 23 +- .../tests/output-complete-obj/test.ml_stub.c | 4 + testsuite/tests/output-complete-obj/test2.ml | 4 +- testsuite/tests/parsetree/source.ml | 13 + testsuite/tests/parsetree/test.ml | 2 +- .../broken_invariants.compilers.reference | 4 + testsuite/tests/parsing/broken_invariants.ml | 5 +- .../parsing/extensions.compilers.reference | 3 + testsuite/tests/parsing/illegal_ppx.ml | 12 +- testsuite/tests/parsing/pr10468.ml | 14 + testsuite/tests/ppx-contexts/test.ml | 2 +- testsuite/tests/prim-revapply/apply.ml | 22 + testsuite/tests/prim-revapply/revapply.ml | 28 + .../missing_set_of_closures.ml | 24 +- testsuite/tests/regression/pr10611/pr10611.ml | 12 + .../regression/pr10611/pr10611.reference | 0 .../pr9853/compaction_corner_case.ml | 10 + .../reproducibility/cmis_on_file_system.ml | 2 +- .../tests/runtime-errors/stackoverflow.ml | 2 +- testsuite/tests/runtime-errors/syserror.ml | 2 +- .../tests/self-contained-toplevel/main.ml | 2 +- testsuite/tests/shadow_include/ghosts.ml | 39 + testsuite/tests/shadow_include/shadow_all.ml | 18 +- .../callstacks.flat-float-array.reference | 30 +- .../callstacks.no-flat-float-array.reference | 28 +- .../statmemprof/comballoc.byte.reference | 18 +- .../tests/statmemprof/comballoc.opt.reference | 18 +- testsuite/tests/tool-caml-tex/ellipses.ml | 4 +- testsuite/tests/tool-caml-tex/redirections.ml | 6 +- testsuite/tests/tool-command-line/hello.c | 8 + .../tool-command-line/test-o-one-c-file.ml | 18 + .../test-o-several-files.compilers.reference | 1 + .../tool-command-line/test-o-several-files.ml | 15 + ... => test-unknown-file.compilers.reference} | 0 .../{test.ml => test-unknown-file.ml} | 7 +- testsuite/tests/tool-debugger/dynlink/host.ml | 2 +- .../tool-debugger/no_debug_event/noev.ml | 2 +- .../tests/tool-debugger/printer/debuggee.ml | 2 +- testsuite/tests/tool-lexyacc/calc.ml | 16 + testsuite/tests/tool-lexyacc/calc.reference | 4 + testsuite/tests/tool-lexyacc/calc_input.txt | 4 + testsuite/tests/tool-lexyacc/calc_lexer.mll | 16 + testsuite/tests/tool-lexyacc/calc_parser.mly | 22 + testsuite/tests/tool-lexyacc/gram_aux.ml | 32 - testsuite/tests/tool-lexyacc/grammar.mly | 110 - testsuite/tests/tool-lexyacc/input | 134 - testsuite/tests/tool-lexyacc/lexgen.ml | 256 - .../tool-lexyacc/main.compilers.reference | 1 - testsuite/tests/tool-lexyacc/main.ml | 115 - testsuite/tests/tool-lexyacc/main.reference | 312 - testsuite/tests/tool-lexyacc/output.ml | 152 - testsuite/tests/tool-lexyacc/scan_aux.ml | 45 - testsuite/tests/tool-lexyacc/scanner.mll | 118 - testsuite/tests/tool-lexyacc/syntax.ml | 26 - testsuite/tests/tool-ocaml/t000.ml | 2 +- testsuite/tests/tool-ocaml/t010-const0.ml | 2 +- testsuite/tests/tool-ocaml/t010-const1.ml | 2 +- testsuite/tests/tool-ocaml/t010-const2.ml | 2 +- testsuite/tests/tool-ocaml/t010-const3.ml | 2 +- testsuite/tests/tool-ocaml/t011-constint.ml | 2 +- testsuite/tests/tool-ocaml/t020.ml | 2 +- testsuite/tests/tool-ocaml/t021-pushconst1.ml | 2 +- testsuite/tests/tool-ocaml/t021-pushconst2.ml | 2 +- testsuite/tests/tool-ocaml/t021-pushconst3.ml | 2 +- .../tests/tool-ocaml/t022-pushconstint.ml | 2 +- testsuite/tests/tool-ocaml/t040-makeblock1.ml | 2 +- testsuite/tests/tool-ocaml/t040-makeblock2.ml | 2 +- testsuite/tests/tool-ocaml/t040-makeblock3.ml | 2 +- testsuite/tests/tool-ocaml/t041-makeblock.ml | 2 +- testsuite/tests/tool-ocaml/t050-getglobal.ml | 2 +- .../tests/tool-ocaml/t050-pushgetglobal.ml | 2 +- .../tests/tool-ocaml/t051-getglobalfield.ml | 2 +- .../tool-ocaml/t051-pushgetglobalfield.ml | 2 +- testsuite/tests/tool-ocaml/t060-raise.ml | 2 +- testsuite/tests/tool-ocaml/t070-branch.ml | 2 +- testsuite/tests/tool-ocaml/t070-branchif.ml | 2 +- .../tests/tool-ocaml/t070-branchifnot.ml | 2 +- testsuite/tests/tool-ocaml/t071-boolnot.ml | 2 +- testsuite/tests/tool-ocaml/t080-eq.ml | 2 +- testsuite/tests/tool-ocaml/t080-geint.ml | 2 +- testsuite/tests/tool-ocaml/t080-gtint.ml | 2 +- testsuite/tests/tool-ocaml/t080-leint.ml | 2 +- testsuite/tests/tool-ocaml/t080-ltint.ml | 2 +- testsuite/tests/tool-ocaml/t080-neq.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc0.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc1.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc2.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc3.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc4.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc5.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc6.ml | 2 +- testsuite/tests/tool-ocaml/t090-acc7.ml | 2 +- testsuite/tests/tool-ocaml/t091-acc.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc0.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc1.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc2.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc3.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc4.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc5.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc6.ml | 2 +- testsuite/tests/tool-ocaml/t092-pushacc7.ml | 2 +- testsuite/tests/tool-ocaml/t093-pushacc.ml | 2 +- testsuite/tests/tool-ocaml/t100-pushtrap.ml | 2 +- testsuite/tests/tool-ocaml/t101-poptrap.ml | 2 +- testsuite/tests/tool-ocaml/t110-addint.ml | 2 +- testsuite/tests/tool-ocaml/t110-andint.ml | 2 +- testsuite/tests/tool-ocaml/t110-asrint-1.ml | 2 +- testsuite/tests/tool-ocaml/t110-asrint-2.ml | 2 +- testsuite/tests/tool-ocaml/t110-divint-1.ml | 2 +- testsuite/tests/tool-ocaml/t110-divint-2.ml | 2 +- testsuite/tests/tool-ocaml/t110-divint-3.ml | 2 +- testsuite/tests/tool-ocaml/t110-lslint.ml | 2 +- testsuite/tests/tool-ocaml/t110-lsrint.ml | 2 +- testsuite/tests/tool-ocaml/t110-modint-1.ml | 2 +- testsuite/tests/tool-ocaml/t110-modint-2.ml | 2 +- testsuite/tests/tool-ocaml/t110-mulint.ml | 2 +- testsuite/tests/tool-ocaml/t110-negint.ml | 2 +- testsuite/tests/tool-ocaml/t110-offsetint.ml | 2 +- testsuite/tests/tool-ocaml/t110-orint.ml | 2 +- testsuite/tests/tool-ocaml/t110-subint.ml | 2 +- testsuite/tests/tool-ocaml/t110-xorint.ml | 2 +- .../tests/tool-ocaml/t120-getstringchar.ml | 2 +- .../tests/tool-ocaml/t121-setstringchar.ml | 2 +- .../tests/tool-ocaml/t130-getvectitem.ml | 2 +- testsuite/tests/tool-ocaml/t130-vectlength.ml | 2 +- .../tests/tool-ocaml/t131-setvectitem.ml | 2 +- testsuite/tests/tool-ocaml/t140-switch-1.ml | 2 +- testsuite/tests/tool-ocaml/t140-switch-2.ml | 2 +- testsuite/tests/tool-ocaml/t140-switch-3.ml | 2 +- testsuite/tests/tool-ocaml/t140-switch-4.ml | 2 +- testsuite/tests/tool-ocaml/t141-switch-5.ml | 2 +- testsuite/tests/tool-ocaml/t141-switch-6.ml | 2 +- testsuite/tests/tool-ocaml/t141-switch-7.ml | 2 +- testsuite/tests/tool-ocaml/t142-switch-8.ml | 2 +- testsuite/tests/tool-ocaml/t142-switch-9.ml | 2 +- testsuite/tests/tool-ocaml/t142-switch-A.ml | 2 +- testsuite/tests/tool-ocaml/t150-push-1.ml | 2 +- testsuite/tests/tool-ocaml/t150-push-2.ml | 2 +- testsuite/tests/tool-ocaml/t160-closure.ml | 2 +- testsuite/tests/tool-ocaml/t161-apply1.ml | 2 +- testsuite/tests/tool-ocaml/t162-return.ml | 2 +- testsuite/tests/tool-ocaml/t163.ml | 2 +- testsuite/tests/tool-ocaml/t164-apply2.ml | 2 +- testsuite/tests/tool-ocaml/t164-apply3.ml | 2 +- testsuite/tests/tool-ocaml/t165-apply.ml | 2 +- testsuite/tests/tool-ocaml/t170-envacc2.ml | 2 +- testsuite/tests/tool-ocaml/t170-envacc3.ml | 2 +- testsuite/tests/tool-ocaml/t170-envacc4.ml | 2 +- testsuite/tests/tool-ocaml/t171-envacc.ml | 2 +- .../tests/tool-ocaml/t172-pushenvacc1.ml | 2 +- .../tests/tool-ocaml/t172-pushenvacc2.ml | 2 +- .../tests/tool-ocaml/t172-pushenvacc3.ml | 2 +- .../tests/tool-ocaml/t172-pushenvacc4.ml | 2 +- testsuite/tests/tool-ocaml/t173-pushenvacc.ml | 2 +- testsuite/tests/tool-ocaml/t180-appterm1.ml | 2 +- testsuite/tests/tool-ocaml/t180-appterm2.ml | 2 +- testsuite/tests/tool-ocaml/t180-appterm3.ml | 2 +- testsuite/tests/tool-ocaml/t181-appterm.ml | 2 +- .../tests/tool-ocaml/t190-makefloatblock-1.ml | 2 +- .../tests/tool-ocaml/t190-makefloatblock-2.ml | 2 +- .../tests/tool-ocaml/t190-makefloatblock-3.ml | 2 +- testsuite/tests/tool-ocaml/t191-vectlength.ml | 2 +- .../tests/tool-ocaml/t192-getfloatfield-1.ml | 2 +- .../tests/tool-ocaml/t192-getfloatfield-2.ml | 2 +- .../tests/tool-ocaml/t193-setfloatfield-1.ml | 2 +- .../tests/tool-ocaml/t193-setfloatfield-2.ml | 2 +- testsuite/tests/tool-ocaml/t200-getfield0.ml | 2 +- testsuite/tests/tool-ocaml/t200-getfield1.ml | 2 +- testsuite/tests/tool-ocaml/t200-getfield2.ml | 2 +- testsuite/tests/tool-ocaml/t200-getfield3.ml | 2 +- testsuite/tests/tool-ocaml/t201-getfield.ml | 2 +- testsuite/tests/tool-ocaml/t210-setfield0.ml | 2 +- testsuite/tests/tool-ocaml/t210-setfield1.ml | 2 +- testsuite/tests/tool-ocaml/t210-setfield2.ml | 2 +- testsuite/tests/tool-ocaml/t210-setfield3.ml | 2 +- testsuite/tests/tool-ocaml/t211-setfield.ml | 2 +- testsuite/tests/tool-ocaml/t220-assign.ml | 2 +- .../tests/tool-ocaml/t230-check_signals.ml | 2 +- testsuite/tests/tool-ocaml/t240-c_call1.ml | 2 +- testsuite/tests/tool-ocaml/t240-c_call2.ml | 2 +- testsuite/tests/tool-ocaml/t240-c_call3.ml | 2 +- testsuite/tests/tool-ocaml/t240-c_call4.ml | 2 +- testsuite/tests/tool-ocaml/t240-c_call5.ml | 2 +- .../tests/tool-ocaml/t250-closurerec-1.ml | 2 +- .../tests/tool-ocaml/t250-closurerec-2.ml | 2 +- .../tool-ocaml/t251-pushoffsetclosure0.ml | 2 +- .../tool-ocaml/t251-pushoffsetclosure2.ml | 2 +- .../tool-ocaml/t251-pushoffsetclosurem2.ml | 2 +- .../tool-ocaml/t252-pushoffsetclosure.ml | 2 +- .../tests/tool-ocaml/t253-offsetclosure0.ml | 2 +- .../tests/tool-ocaml/t253-offsetclosure2.ml | 2 +- .../tests/tool-ocaml/t253-offsetclosurem2.ml | 2 +- .../tests/tool-ocaml/t254-offsetclosure.ml | 2 +- testsuite/tests/tool-ocaml/t260-offsetref.ml | 2 +- .../tests/tool-ocaml/t270-push_retaddr.ml | 2 +- testsuite/tests/tool-ocaml/t300-getmethod.ml | 2 +- testsuite/tests/tool-ocaml/t301-object.ml | 2 +- testsuite/tests/tool-ocaml/t310-alloc-1.ml | 2 +- testsuite/tests/tool-ocaml/t310-alloc-2.ml | 2 +- testsuite/tests/tool-ocaml/t320-gc-1.ml | 2 +- testsuite/tests/tool-ocaml/t320-gc-2.ml | 2 +- testsuite/tests/tool-ocaml/t320-gc-3.ml | 2 +- testsuite/tests/tool-ocaml/t330-compact-1.ml | 2 +- testsuite/tests/tool-ocaml/t330-compact-2.ml | 2 +- testsuite/tests/tool-ocaml/t330-compact-3.ml | 2 +- testsuite/tests/tool-ocaml/t330-compact-4.ml | 2 +- testsuite/tests/tool-ocaml/t340-weak.ml | 2 +- testsuite/tests/tool-ocaml/t350-heapcheck.ml | 2 +- testsuite/tests/tool-ocaml/t360-stacks-1.ml | 2 +- testsuite/tests/tool-ocaml/t360-stacks-2.ml | 2 +- .../tests/tool-ocamlc-error-cleanup/test.ml | 4 +- .../tool-ocamlc-open/tool-ocamlc-open.ml | 2 +- .../tool-ocamldep-modalias/Makefile.build | 6 +- .../tool-ocamldep-modalias/Makefile.build2 | 6 +- .../tests/tool-ocamldep-modalias/main.ml | 131 +- .../tool-ocamldep-modalias/setup-links.sh | 2 - testsuite/tests/tool-ocamldep-shadowing/a.ml | 8 +- .../Documentation_tags.html.reference | 2 +- .../tool-ocamldoc/Entities.html.reference | 40 + testsuite/tests/tool-ocamldoc/Entities.ml | 8 + .../Inline_records.html.reference | 4 +- .../Module_whitespace.html.reference | 2 +- .../tool-ocamlopt-save-ir/start_from_emit.ml | 5 +- .../tests/tool-toplevel-invocation/test.ml | 2 +- .../tests/tool-toplevel/error_highlighting.ml | 8 +- .../known-bugs/broken_rec_in_show.ml | 53 +- testsuite/tests/tool-toplevel/mod_use.ml | 2 +- .../tool-toplevel/pr6468.compilers.reference | 6 +- testsuite/tests/tool-toplevel/show.ml | 6 +- .../tests/tool-toplevel/show_short_paths.ml | 4 +- .../comparison_table.compilers.reference | 4 +- testsuite/tests/translprim/sendcache.ml | 11 + .../tests/translprim/sendcache.reference | 1 + .../type_expected_explanation.ml | 4 +- .../tests/typing-extensions/disambiguation.ml | 16 +- .../tests/typing-fstclassmod/fstclassmod.ml | 2 +- .../tests/typing-gadts/ambivalent_apply.ml | 40 + testsuite/tests/typing-gadts/gadthead.ml | 30 + .../tests/typing-gadts/name_existentials.ml | 119 + testsuite/tests/typing-gadts/pr10189.ml | 191 + testsuite/tests/typing-gadts/pr10271.ml | 38 + testsuite/tests/typing-gadts/pr6980.ml | 4 +- .../typing-gadts/principality-and-gadts.ml | 2 +- testsuite/tests/typing-gadts/test.ml | 17 +- .../typing-misc-bugs/core_array_reduced_ok.ml | 2 +- .../tests/typing-misc-bugs/pr6303_bad.ml | 2 +- .../tests/typing-misc-bugs/pr6946_bad.ml | 2 +- testsuite/tests/typing-misc/constraints.ml | 45 +- testsuite/tests/typing-misc/filter_params.ml | 8 + testsuite/tests/typing-misc/pr6416.ml | 12 +- testsuite/tests/typing-misc/pr7937.ml | 10 +- testsuite/tests/typing-misc/pr8548_split.ml | 2 +- testsuite/tests/typing-misc/printing.ml | 28 +- testsuite/tests/typing-misc/records.ml | 12 +- .../typecore_empty_polyvariant_error.ml | 2 +- .../typing-misc/unbound_type_variables.ml | 61 + testsuite/tests/typing-misc/variant.ml | 12 +- testsuite/tests/typing-missing-cmi-2/test.ml | 2 +- testsuite/tests/typing-missing-cmi-3/user.ml | 2 +- testsuite/tests/typing-missing-cmi/test.ml | 21 +- .../gatien_baron_20131019_ok.ml | 2 +- .../tests/typing-modules-bugs/pr5164_ok.ml | 2 +- .../tests/typing-modules-bugs/pr51_ok.ml | 2 +- .../tests/typing-modules-bugs/pr5663_ok.ml | 2 +- .../tests/typing-modules-bugs/pr5914_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6240_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6293_bad.ml | 2 +- .../tests/typing-modules-bugs/pr6427_bad.ml | 2 +- .../tests/typing-modules-bugs/pr6485_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6513_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6572_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6651_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6752_bad.ml | 2 +- .../tests/typing-modules-bugs/pr6752_ok.ml | 2 +- .../typing-modules-bugs/pr6899_first_bad.ml | 2 +- .../tests/typing-modules-bugs/pr6899_ok.ml | 2 +- .../typing-modules-bugs/pr6899_second_bad.ml | 2 +- .../tests/typing-modules-bugs/pr6944_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6954_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6981_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6982_ok.ml | 2 +- .../typing-modules-bugs/pr6985_extended.ml | 30 + .../tests/typing-modules-bugs/pr6985_ok.ml | 2 +- .../tests/typing-modules-bugs/pr6992_bad.ml | 2 +- .../tests/typing-modules-bugs/pr7036_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7082_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7112_bad.ml | 2 +- .../tests/typing-modules-bugs/pr7112_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7152_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7182_ok.ml | 2 +- .../typing-modules-bugs/pr7305_principal.ml | 2 +- .../tests/typing-modules-bugs/pr7321_ok.ml | 2 +- .../pr7414_2_bad.compilers.reference | 34 +- .../tests/typing-modules-bugs/pr7414_2_bad.ml | 2 +- .../pr7414_bad.compilers.reference | 34 +- .../tests/typing-modules-bugs/pr7414_bad.ml | 2 +- .../tests/typing-modules-bugs/pr7519_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7601_ok.ml | 2 +- .../tests/typing-modules-bugs/pr7601a_ok.ml | 2 +- .../tests/typing-modules-bugs/pr9695_bad.ml | 2 +- testsuite/tests/typing-modules/aliases.ml | 4 +- testsuite/tests/typing-modules/anonymous.ml | 2 +- .../applicative_functor_type.ml | 28 +- testsuite/tests/typing-modules/functors.ml | 1719 +++ testsuite/tests/typing-modules/generative.ml | 10 +- .../typing-modules/illegal_permutation.ml | 4 +- .../tests/typing-modules/inclusion_errors.ml | 1174 ++ .../tests/typing-modules/merge_constraint.ml | 4 +- .../module_type_substitution.ml | 273 + testsuite/tests/typing-modules/nondep.ml | 21 + .../typing-modules/nondep_private_abbrev.ml | 13 + testsuite/tests/typing-modules/pr10298.ml | 22 + testsuite/tests/typing-modules/private.ml | 31 + testsuite/tests/typing-modules/with_ghosts.ml | 52 + testsuite/tests/typing-multifile/pr6372.ml | 2 +- testsuite/tests/typing-multifile/pr7325.ml | 2 +- .../pr3968_bad.compilers.reference | 1 + .../tests/typing-objects-bugs/pr3968_bad.ml | 2 +- .../pr4018_bad.compilers.reference | 24 +- .../tests/typing-objects-bugs/pr4018_bad.ml | 2 +- .../tests/typing-objects-bugs/pr4435_bad.ml | 2 +- .../tests/typing-objects-bugs/pr4766_ok.ml | 2 +- .../tests/typing-objects-bugs/pr4824_ok.ml | 2 +- .../tests/typing-objects-bugs/pr4824a_bad.ml | 2 +- .../tests/typing-objects-bugs/pr5156_ok.ml | 2 +- .../tests/typing-objects-bugs/pr7284_bad.ml | 2 +- .../tests/typing-objects-bugs/pr7293_ok.ml | 2 +- .../tests/typing-objects-bugs/woodyatt_ok.ml | 2 +- .../typing-objects-bugs/yamagata021012_ok.ml | 2 +- testsuite/tests/typing-poly-bugs/pr5322_ok.ml | 2 +- testsuite/tests/typing-poly-bugs/pr5673_ok.ml | 2 +- testsuite/tests/typing-poly-bugs/pr6922_ok.ml | 2 +- testsuite/tests/typing-poly/poly.ml | 29 +- testsuite/tests/typing-poly/pr9603.ml | 5 +- .../pr3918c.compilers.reference | 3 +- .../typing-polyvariants-bugs-2/pr3918c.ml | 2 +- .../typing-polyvariants-bugs/pr4775_ok.ml | 2 +- .../typing-polyvariants-bugs/pr4933_ok.ml | 2 +- .../typing-polyvariants-bugs/pr5057_ok.ml | 2 +- .../typing-polyvariants-bugs/pr5057a_bad.ml | 2 +- .../typing-polyvariants-bugs/pr7199_ok.ml | 2 +- .../tests/typing-polyvariants-bugs/pr8575.ml | 36 + .../privrowsabate_ok.ml | 2 +- .../tests/typing-private-bugs/pr5026_bad.ml | 2 +- .../tests/typing-private-bugs/pr5469_ok.ml | 2 +- .../typing-private/invalid_private_row.ml | 52 + testsuite/tests/typing-recmod/t01bad.ml | 2 +- testsuite/tests/typing-recmod/t02bad.ml | 2 +- testsuite/tests/typing-recmod/t03ok.ml | 2 +- testsuite/tests/typing-recmod/t04bad.ml | 2 +- testsuite/tests/typing-recmod/t05bad.ml | 2 +- testsuite/tests/typing-recmod/t06ok.ml | 2 +- testsuite/tests/typing-recmod/t07bad.ml | 2 +- testsuite/tests/typing-recmod/t08bad.ml | 2 +- testsuite/tests/typing-recmod/t09bad.ml | 2 +- testsuite/tests/typing-recmod/t10ok.ml | 2 +- testsuite/tests/typing-recmod/t11bad.ml | 2 +- testsuite/tests/typing-recmod/t12bad.ml | 2 +- testsuite/tests/typing-recmod/t13ok.ml | 2 +- testsuite/tests/typing-recmod/t14bad.ml | 2 +- testsuite/tests/typing-recmod/t15bad.ml | 2 +- testsuite/tests/typing-recmod/t16ok.ml | 2 +- testsuite/tests/typing-recmod/t17ok.ml | 2 +- testsuite/tests/typing-recmod/t18ok.ml | 2 +- testsuite/tests/typing-recmod/t20ok.ml | 2 +- testsuite/tests/typing-recmod/t21ok.ml | 2 +- testsuite/tests/typing-recmod/t22ok.ml | 2 +- .../tests/typing-rectypes-bugs/pr5343_bad.ml | 2 +- .../tests/typing-rectypes-bugs/pr6174_bad.ml | 2 +- .../tests/typing-rectypes-bugs/pr6870_bad.ml | 2 +- testsuite/tests/typing-safe-linking/b_bad.ml | 2 +- .../redefine_largefile_top.ml | 2 +- testsuite/tests/typing-short-paths/errors.ml | 2 +- ..._aliases_syntax_errors.compilers.reference | 6 +- .../test_locations.compilers.reference | 6 +- .../tests/typing-sigsubst/test_locations.ml | 2 +- .../ambiguous_guarded_disjunction.ml | 28 +- .../tests/typing-warnings/application.ml | 2 +- testsuite/tests/typing-warnings/coercions.ml | 2 +- .../tests/typing-warnings/exhaustiveness.ml | 2 +- .../tests/typing-warnings/open_warnings.ml | 2 +- testsuite/tests/typing-warnings/pr5892.ml | 2 +- testsuite/tests/typing-warnings/pr6587.ml | 2 +- testsuite/tests/typing-warnings/pr6872.ml | 2 +- testsuite/tests/typing-warnings/pr7085.ml | 2 +- testsuite/tests/typing-warnings/pr7115.ml | 2 +- testsuite/tests/typing-warnings/pr7261.ml | 2 +- testsuite/tests/typing-warnings/pr7297.ml | 2 +- testsuite/tests/typing-warnings/pr7553.ml | 2 +- testsuite/tests/typing-warnings/pr9244.ml | 2 +- testsuite/tests/typing-warnings/records.ml | 12 +- .../unused_functor_parameter.ml | 2 +- .../tests/typing-warnings/unused_types.ml | 100 +- .../tests/unboxed-primitive-args/test.ml | 2 +- testsuite/tests/unwind/driver.ml | 2 +- testsuite/tests/warnings/deprecated_module.ml | 2 +- .../warnings/deprecated_module_assigment.ml | 2 +- .../tests/warnings/deprecated_module_use.ml | 4 +- .../warnings/deprecated_warning_specs.ml | 38 + testsuite/tests/warnings/w01.ml | 2 +- testsuite/tests/warnings/w03.ml | 2 +- testsuite/tests/warnings/w04.ml | 2 +- testsuite/tests/warnings/w04_failure.ml | 2 +- testsuite/tests/warnings/w06.ml | 2 +- testsuite/tests/warnings/w32.ml | 2 +- testsuite/tests/warnings/w32b.ml | 2 +- testsuite/tests/warnings/w33.ml | 2 +- testsuite/tests/warnings/w45.ml | 2 +- testsuite/tests/warnings/w47_inline.ml | 2 +- testsuite/tests/warnings/w50.ml | 2 +- testsuite/tests/warnings/w51.ml | 2 +- testsuite/tests/warnings/w51_bis.ml | 2 +- testsuite/tests/warnings/w52.ml | 14 +- testsuite/tests/warnings/w53.ml | 2 +- testsuite/tests/warnings/w54.ml | 2 +- testsuite/tests/warnings/w55.ml | 2 +- testsuite/tests/warnings/w58.ml | 4 +- testsuite/tests/warnings/w59.ml | 2 +- testsuite/tests/warnings/w60.ml | 2 +- testsuite/tests/warnings/w68.ml | 2 +- testsuite/tests/win-unicode/mltest.ml | 2 +- testsuite/tools/Makefile | 29 +- testsuite/tools/codegen_main.ml | 1 + testsuite/tools/expect_test.ml | 8 +- tools/.depend | 4 - tools/Makefile | 203 +- tools/autogen | 2 +- tools/caml_tex.ml | 4 +- tools/check-typo | 43 +- tools/ci/actions/check-alldepend.sh | 41 + tools/ci/actions/check-changes-modified.sh | 56 + tools/ci/actions/check-configure.sh | 102 + tools/ci/actions/check-labelled-interfaces.sh | 38 + .../ci/actions/check-manual-modified.sh | 38 +- tools/ci/actions/check-typo.sh | 93 + tools/ci/actions/deepen-fetch.sh | 90 + tools/ci/actions/runner.sh | 56 +- tools/ci/appveyor/appveyor_build.cmd | 56 +- tools/ci/appveyor/appveyor_build.sh | 138 +- .../bootstrap/remove-sinh-primitive.patch | 30 +- tools/ci/inria/bootstrap/script | 4 +- tools/ci/inria/main | 14 +- tools/ci/inria/sanitizers/lsan-suppr.txt | 2 + tools/ci/inria/step-by-step-build/script | 7 + tools/ci/travis/travis-ci.sh | 426 - tools/ocamlmklib.ml | 11 +- tools/ocamlprof.ml | 4 +- tools/pre-commit-githook | 119 +- toplevel/byte/topeval.ml | 333 + toplevel/{ => byte}/topmain.ml | 126 +- toplevel/{ => byte}/trace.ml | 3 +- toplevel/dune | 6 +- toplevel/genprintval.ml | 10 +- toplevel/native/topeval.ml | 358 + toplevel/{opttopmain.ml => native/topmain.ml} | 40 +- toplevel/{opttopdirs.mli => native/trace.ml} | 31 +- toplevel/opttopdirs.ml | 218 - toplevel/opttoploop.ml | 684 - toplevel/topcommon.ml | 310 + toplevel/{opttoploop.mli => topcommon.mli} | 195 +- toplevel/topdirs.ml | 302 +- toplevel/topdirs.mli | 18 +- toplevel/topeval.mli | 53 + toplevel/toploop.ml | 510 +- toplevel/toploop.mli | 16 +- toplevel/trace.mli | 3 + typing/btype.ml | 220 +- typing/btype.mli | 41 +- typing/ctype.ml | 1570 +- typing/ctype.mli | 141 +- typing/datarepr.ml | 52 +- typing/datarepr.mli | 4 - typing/env.ml | 721 +- typing/env.mli | 31 +- typing/errortrace.ml | 158 + typing/errortrace.mli | 116 + typing/includeclass.ml | 16 +- typing/includecore.ml | 465 +- typing/includecore.mli | 38 +- typing/includemod.ml | 1176 +- typing/includemod.mli | 162 +- typing/includemod_errorprinter.ml | 932 ++ .../includemod_errorprinter.mli | 9 +- typing/mtype.ml | 39 +- typing/oprint.ml | 94 +- typing/oprint.mli | 4 + typing/outcometree.mli | 2 +- typing/parmatch.ml | 112 +- typing/parmatch.mli | 2 +- typing/path.ml | 2 +- typing/patterns.ml | 6 +- typing/persistent_env.ml | 6 +- typing/persistent_env.mli | 2 +- typing/predef.ml | 15 +- typing/primitive.ml | 24 + typing/primitive.mli | 3 + typing/printpat.ml | 24 +- typing/printtyp.ml | 690 +- typing/printtyp.mli | 57 +- typing/printtyped.ml | 21 +- typing/printtyped.mli | 2 +- typing/rec_check.ml | 2 +- typing/signature_group.ml | 155 + typing/signature_group.mli | 85 + typing/subst.ml | 105 +- typing/subst.mli | 3 + typing/tast_iterator.ml | 8 +- typing/tast_mapper.ml | 13 +- typing/typeclass.ml | 29 +- typing/typeclass.mli | 12 +- typing/typecore.ml | 1000 +- typing/typecore.mli | 31 +- typing/typedecl.ml | 221 +- typing/typedecl.mli | 15 +- typing/typedecl_immediacy.ml | 10 +- typing/typedecl_separability.ml | 107 +- typing/typedecl_unboxed.ml | 14 +- typing/typedecl_variance.ml | 12 +- typing/typedtree.ml | 20 +- typing/typedtree.mli | 30 +- typing/typemod.ml | 920 +- typing/typemod.mli | 17 +- typing/typeopt.ml | 5 +- typing/types.ml | 37 +- typing/types.mli | 47 +- typing/typetexp.ml | 44 +- typing/typetexp.mli | 4 +- typing/untypeast.ml | 47 +- utils/HACKING.adoc | 4 +- utils/Makefile | 12 +- utils/binutils.ml | 29 +- utils/ccomp.ml | 27 +- utils/ccomp.mli | 1 - utils/clflags.ml | 28 +- utils/clflags.mli | 12 +- utils/config.mli | 14 + utils/config.mlp | 37 +- utils/diffing.ml | 370 + utils/diffing.mli | 112 + utils/lazy_backtrack.ml | 81 + .../lazy_backtrack.mli | 23 +- utils/load_path.ml | 55 +- utils/misc.ml | 91 +- utils/misc.mli | 25 +- utils/profile.ml | 4 +- utils/strongly_connected_components.ml | 15 +- utils/warnings.ml | 240 +- utils/warnings.mli | 18 +- 1197 files changed, 47306 insertions(+), 26900 deletions(-) rename .github/workflows/{main.yml => build.yml} (66%) create mode 100644 .github/workflows/hygiene.yml delete mode 100644 Makefile.tools create mode 100644 api_docgen/Compiler_libs.pre.mld create mode 100644 api_docgen/Format_tutorial.mld rename ocamltest/getocamloptdefaultflags => api_docgen/Makefile (69%) mode change 100755 => 100644 create mode 100644 api_docgen/Makefile.common create mode 100644 api_docgen/Makefile.docfiles rename stdlib/ocaml_operators.mld => api_docgen/Ocaml_operators.mld (97%) create mode 100644 api_docgen/alldoc.tex create mode 100644 api_docgen/ocamldoc/Makefile create mode 100644 api_docgen/odoc/Makefile create mode 100644 asmcomp/cmm_invariants.ml create mode 100644 asmcomp/cmm_invariants.mli create mode 100644 asmcomp/dataflow.ml create mode 100644 asmcomp/dataflow.mli delete mode 100644 asmcomp/debug/available_regs.ml delete mode 100644 asmcomp/debug/available_regs.mli delete mode 100644 asmcomp/debug/compute_ranges.ml delete mode 100644 asmcomp/debug/compute_ranges_intf.ml delete mode 100644 asmcomp/debug/reg_availability_set.ml delete mode 100644 asmcomp/debug/reg_availability_set.mli delete mode 100644 asmcomp/debug/reg_with_debug_info.ml delete mode 100644 asmcomp/debug/reg_with_debug_info.mli create mode 100644 asmcomp/emitenv.mli create mode 100644 asmcomp/polling.ml rename asmcomp/{debug/compute_ranges.mli => polling.mli} (52%) delete mode 100644 manual/manual/cmds/Makefile delete mode 100644 manual/manual/library/Makefile delete mode 100644 manual/manual/library/stdlib-blurb.etex delete mode 100644 manual/manual/refman/exten.etex delete mode 100644 manual/manual/tutorials/.gitignore rename manual/{manual => src}/.gitignore (87%) rename manual/{manual => src}/Makefile (60%) rename manual/{manual => src}/allfiles.etex (98%) rename manual/{manual => src}/anchored_book.hva (100%) rename manual/{manual => src}/biblio.etex (100%) rename manual/{manual => src}/cmds/.gitignore (100%) rename manual/{manual/refman => src/cmds}/Makefile (51%) rename manual/{manual => src}/cmds/afl-fuzz.etex (100%) rename manual/{manual => src}/cmds/comp.etex (92%) rename manual/{manual => src}/cmds/debugger.etex (100%) rename manual/{manual => src}/cmds/flambda.etex (100%) rename manual/{manual => src}/cmds/instrumented-runtime.etex (100%) rename manual/{manual => src}/cmds/intf-c.etex (97%) rename manual/{manual => src}/cmds/lexyacc.etex (99%) rename manual/{manual => src}/cmds/native.etex (99%) rename manual/{manual => src}/cmds/ocamldep.etex (99%) rename manual/{manual => src}/cmds/ocamldoc.etex (97%) rename manual/{manual => src}/cmds/profil.etex (100%) rename manual/{manual => src}/cmds/runtime.etex (97%) rename manual/{manual => src}/cmds/top.etex (100%) rename manual/{manual => src}/cmds/unified-options.etex (97%) rename manual/{manual => src}/foreword.etex (100%) rename manual/{manual => src}/html_processing/.gitignore (100%) rename manual/{manual => src}/html_processing/Makefile (70%) rename manual/{manual => src}/html_processing/README.md (100%) rename manual/{manual => src}/html_processing/dune-project (100%) rename manual/{manual => src}/html_processing/js/navigation.js (100%) rename manual/{manual => src}/html_processing/js/scroll.js (100%) rename manual/{manual => src}/html_processing/js/search.js (100%) rename manual/{manual => src}/html_processing/scss/_common.scss (100%) rename manual/{manual => src}/html_processing/scss/manual.scss (95%) rename manual/{manual => src}/html_processing/scss/style.scss (100%) rename manual/{manual => src}/html_processing/src/common.ml (100%) rename manual/{manual => src}/html_processing/src/dune (100%) rename manual/{manual => src}/html_processing/src/process_api.ml (100%) rename manual/{manual => src}/html_processing/src/process_manual.ml (99%) rename manual/{manual => src}/htmlman/.gitignore (78%) rename manual/{manual => src}/htmlman/contents_motif.gif (100%) rename manual/{manual => src}/htmlman/fonts/fira-sans-v8-latin-regular.eot (100%) rename manual/{manual => src}/htmlman/fonts/fira-sans-v8-latin-regular.svg (100%) rename manual/{manual => src}/htmlman/fonts/fira-sans-v8-latin-regular.ttf (100%) rename manual/{manual => src}/htmlman/fonts/fira-sans-v8-latin-regular.woff (100%) rename manual/{manual => src}/htmlman/fonts/fira-sans-v8-latin-regular.woff2 (100%) rename manual/{manual => src}/htmlman/libgraph.gif (100%) rename manual/{manual => src}/htmlman/next_motif.gif (100%) rename manual/{manual => src}/htmlman/previous_motif.gif (100%) rename manual/{manual => src}/index.tex (100%) rename manual/{manual => src}/infoman/.gitignore (100%) rename manual/{manual => src}/library/.gitignore (100%) create mode 100644 manual/src/library/Makefile rename manual/{manual => src}/library/builtin.etex (100%) rename manual/{manual => src}/library/compiler_libs.mld (100%) rename manual/{manual => src}/library/compilerlibs.etex (65%) rename manual/{manual => src}/library/core.etex (88%) rename manual/{manual => src}/library/libdynlink.etex (88%) rename manual/{manual => src}/library/libstr.etex (81%) rename manual/{manual => src}/library/libthreads.etex (68%) rename manual/{manual => src}/library/libunix.etex (91%) rename manual/{manual => src}/library/old.etex (100%) create mode 100644 manual/src/library/stdlib-blurb.etex rename manual/{manual => src}/macros.hva (83%) rename manual/{manual => src}/macros.tex (90%) rename manual/{manual => src}/manual.hva (79%) rename manual/{manual => src}/manual.inf (88%) rename manual/{manual => src}/manual.info.header (100%) rename manual/{manual => src}/manual.tex (60%) create mode 100644 manual/src/refman/.gitignore create mode 100644 manual/src/refman/Makefile rename manual/{manual => src}/refman/classes.etex (100%) rename manual/{manual => src}/refman/compunit.etex (100%) rename manual/{manual => src}/refman/const.etex (100%) rename manual/{manual => src}/refman/expr.etex (81%) create mode 100644 manual/src/refman/exten.etex create mode 100644 manual/src/refman/extensions/alerts.etex create mode 100644 manual/src/refman/extensions/attributes.etex create mode 100644 manual/src/refman/extensions/bigarray.etex create mode 100644 manual/src/refman/extensions/bindingops.etex create mode 100644 manual/src/refman/extensions/doccomments.etex create mode 100644 manual/src/refman/extensions/emptyvariants.etex create mode 100644 manual/src/refman/extensions/extensiblevariants.etex create mode 100644 manual/src/refman/extensions/extensionnodes.etex create mode 100644 manual/src/refman/extensions/extensionsyntax.etex create mode 100644 manual/src/refman/extensions/firstclassmodules.etex create mode 100644 manual/src/refman/extensions/gadts.etex create mode 100644 manual/src/refman/extensions/generalizedopens.etex create mode 100644 manual/src/refman/extensions/generativefunctors.etex create mode 100644 manual/src/refman/extensions/indexops.etex create mode 100644 manual/src/refman/extensions/inlinerecords.etex create mode 100644 manual/src/refman/extensions/letrecvalues.etex create mode 100644 manual/src/refman/extensions/locallyabstract.etex create mode 100644 manual/src/refman/extensions/modulealias.etex create mode 100644 manual/src/refman/extensions/moduletypeof.etex create mode 100644 manual/src/refman/extensions/overridingopen.etex create mode 100644 manual/src/refman/extensions/privatetypes.etex create mode 100644 manual/src/refman/extensions/recursivemodules.etex create mode 100644 manual/src/refman/extensions/signaturesubstitution.etex rename manual/{manual => src}/refman/lex.etex (89%) rename manual/{manual => src}/refman/modtypes.etex (98%) rename manual/{manual => src}/refman/modules.etex (100%) rename manual/{manual => src}/refman/names.etex (100%) rename manual/{manual => src}/refman/patterns.etex (75%) rename manual/{manual => src}/refman/refman.etex (95%) rename manual/{manual => src}/refman/typedecl.etex (92%) rename manual/{manual => src}/refman/types.etex (100%) rename manual/{manual => src}/refman/values.etex (100%) rename manual/{manual => src}/style.css (100%) rename manual/{manual => src}/texstuff/.gitignore (100%) rename manual/{manual => src}/textman/.gitignore (100%) rename manual/{manual/refman => src/tutorials}/.gitignore (100%) rename manual/{manual => src}/tutorials/Makefile (50%) rename manual/{manual => src}/tutorials/advexamples.etex (100%) rename manual/{manual => src}/tutorials/coreexamples.etex (99%) create mode 100644 manual/src/tutorials/gadtexamples.etex rename manual/{manual => src}/tutorials/lablexamples.etex (52%) rename manual/{manual => src}/tutorials/moduleexamples.etex (100%) rename manual/{manual => src}/tutorials/objectexamples.etex (100%) rename manual/{manual => src}/tutorials/polymorphism.etex (100%) create mode 100644 manual/src/tutorials/polyvariant.etex create mode 100644 ocamldoc/Makefile.best_ocamldoc delete mode 100644 ocamldoc/Makefile.docfiles create mode 100644 otherlibs/unix/realpath.c create mode 100644 otherlibs/win32unix/realpath.c create mode 100644 runtime/sak.c create mode 100644 stdlib/CONTRIBUTING.md create mode 100644 testsuite/tests/asmcomp/polling.c create mode 100644 testsuite/tests/asmcomp/polling_insertion.ml create mode 100644 testsuite/tests/asmcomp/try_checkbound.ml create mode 100644 testsuite/tests/asmgen/invariants.cmm create mode 100644 testsuite/tests/basic-modules/recursive_module_init.ml create mode 100644 testsuite/tests/basic-modules/recursive_module_init.reference create mode 100644 testsuite/tests/basic-more/pr10338.compilers.reference create mode 100644 testsuite/tests/basic-more/pr10338.ml create mode 100644 testsuite/tests/basic-more/pr10338.reference create mode 100644 testsuite/tests/basic/eval_order_7.ml create mode 100644 testsuite/tests/basic/eval_order_7.reference create mode 100644 testsuite/tests/basic/eval_order_pr10283.ml create mode 100644 testsuite/tests/basic/eval_order_pr10283.reference create mode 100644 testsuite/tests/compiler-libs/test_untypeast.ml create mode 100644 testsuite/tests/generated-parse-errors/errors.compilers.reference create mode 100644 testsuite/tests/generated-parse-errors/errors.ml create mode 100644 testsuite/tests/lib-bigarray-2/bigarrcml.ml create mode 100644 testsuite/tests/lib-bigarray-2/bigarrcml.reference create mode 100644 testsuite/tests/lib-bigarray-2/bigarrcstub.c create mode 100644 testsuite/tests/lib-lazy/test.ml create mode 100644 testsuite/tests/lib-random/chi2.ml create mode 100644 testsuite/tests/lib-random/full_int.ml create mode 100644 testsuite/tests/lib-random/full_int.reference create mode 100644 testsuite/tests/lib-string/binary.ml create mode 100644 testsuite/tests/lib-sys/opaque.ml create mode 100644 testsuite/tests/lib-sys/opaque.reference create mode 100644 testsuite/tests/lib-threads/pr8857.ml create mode 100644 testsuite/tests/lib-unix/realpath/test.ml create mode 100644 testsuite/tests/lib-unix/realpath/test.reference rename testsuite/tests/load_path/{ => test}/driver.ml (100%) rename testsuite/tests/load_path/{ => test}/payload.ml (100%) rename testsuite/tests/no-alias-deps/{b.cmi.invalid => b.cmi} (100%) create mode 100644 testsuite/tests/parsing/pr10468.ml create mode 100644 testsuite/tests/regression/pr10611/pr10611.ml create mode 100644 testsuite/tests/regression/pr10611/pr10611.reference create mode 100644 testsuite/tests/regression/pr9853/compaction_corner_case.ml create mode 100644 testsuite/tests/shadow_include/ghosts.ml create mode 100644 testsuite/tests/tool-command-line/hello.c create mode 100644 testsuite/tests/tool-command-line/test-o-one-c-file.ml create mode 100644 testsuite/tests/tool-command-line/test-o-several-files.compilers.reference create mode 100644 testsuite/tests/tool-command-line/test-o-several-files.ml rename testsuite/tests/tool-command-line/{test.compilers.reference => test-unknown-file.compilers.reference} (100%) rename testsuite/tests/tool-command-line/{test.ml => test-unknown-file.ml} (85%) create mode 100644 testsuite/tests/tool-lexyacc/calc.ml create mode 100644 testsuite/tests/tool-lexyacc/calc.reference create mode 100644 testsuite/tests/tool-lexyacc/calc_input.txt create mode 100644 testsuite/tests/tool-lexyacc/calc_lexer.mll create mode 100644 testsuite/tests/tool-lexyacc/calc_parser.mly delete mode 100644 testsuite/tests/tool-lexyacc/gram_aux.ml delete mode 100644 testsuite/tests/tool-lexyacc/grammar.mly delete mode 100644 testsuite/tests/tool-lexyacc/input delete mode 100644 testsuite/tests/tool-lexyacc/lexgen.ml delete mode 100644 testsuite/tests/tool-lexyacc/main.compilers.reference delete mode 100644 testsuite/tests/tool-lexyacc/main.ml delete mode 100644 testsuite/tests/tool-lexyacc/main.reference delete mode 100644 testsuite/tests/tool-lexyacc/output.ml delete mode 100644 testsuite/tests/tool-lexyacc/scan_aux.ml delete mode 100644 testsuite/tests/tool-lexyacc/scanner.mll delete mode 100644 testsuite/tests/tool-lexyacc/syntax.ml delete mode 100644 testsuite/tests/tool-ocamldep-modalias/setup-links.sh create mode 100644 testsuite/tests/tool-ocamldoc/Entities.html.reference create mode 100644 testsuite/tests/tool-ocamldoc/Entities.ml create mode 100644 testsuite/tests/translprim/sendcache.ml create mode 100644 testsuite/tests/translprim/sendcache.reference create mode 100644 testsuite/tests/typing-gadts/ambivalent_apply.ml create mode 100644 testsuite/tests/typing-gadts/gadthead.ml create mode 100644 testsuite/tests/typing-gadts/name_existentials.ml create mode 100644 testsuite/tests/typing-gadts/pr10189.ml create mode 100644 testsuite/tests/typing-gadts/pr10271.ml create mode 100644 testsuite/tests/typing-misc/filter_params.ml create mode 100644 testsuite/tests/typing-misc/unbound_type_variables.ml create mode 100644 testsuite/tests/typing-modules-bugs/pr6985_extended.ml create mode 100644 testsuite/tests/typing-modules/functors.ml create mode 100644 testsuite/tests/typing-modules/inclusion_errors.ml create mode 100644 testsuite/tests/typing-modules/module_type_substitution.ml create mode 100644 testsuite/tests/typing-modules/pr10298.ml create mode 100644 testsuite/tests/typing-modules/private.ml create mode 100644 testsuite/tests/typing-modules/with_ghosts.ml create mode 100644 testsuite/tests/typing-polyvariants-bugs/pr8575.ml create mode 100644 testsuite/tests/typing-private/invalid_private_row.ml create mode 100644 testsuite/tests/warnings/deprecated_warning_specs.ml create mode 100755 tools/ci/actions/check-alldepend.sh create mode 100755 tools/ci/actions/check-changes-modified.sh create mode 100755 tools/ci/actions/check-configure.sh create mode 100755 tools/ci/actions/check-labelled-interfaces.sh rename .travis.yml => tools/ci/actions/check-manual-modified.sh (58%) mode change 100644 => 100755 create mode 100755 tools/ci/actions/check-typo.sh create mode 100755 tools/ci/actions/deepen-fetch.sh delete mode 100755 tools/ci/travis/travis-ci.sh create mode 100644 toplevel/byte/topeval.ml rename toplevel/{ => byte}/topmain.ml (50%) rename toplevel/{ => byte}/trace.ml (99%) create mode 100644 toplevel/native/topeval.ml rename toplevel/{opttopmain.ml => native/topmain.ml} (78%) rename toplevel/{opttopdirs.mli => native/trace.ml} (58%) delete mode 100644 toplevel/opttopdirs.ml delete mode 100644 toplevel/opttoploop.ml create mode 100644 toplevel/topcommon.ml rename toplevel/{opttoploop.mli => topcommon.mli} (53%) create mode 100644 toplevel/topeval.mli create mode 100644 typing/errortrace.ml create mode 100644 typing/errortrace.mli create mode 100644 typing/includemod_errorprinter.ml rename toplevel/opttopmain.mli => typing/includemod_errorprinter.mli (81%) create mode 100644 typing/signature_group.ml create mode 100644 typing/signature_group.mli create mode 100644 utils/diffing.ml create mode 100644 utils/diffing.mli create mode 100644 utils/lazy_backtrack.ml rename toplevel/opttopstart.ml => utils/lazy_backtrack.mli (57%) diff --git a/.depend b/.depend index 48759913..b516be08 100644 --- a/.depend +++ b/.depend @@ -58,6 +58,11 @@ utils/consistbl.cmx : \ utils/consistbl.cmi utils/consistbl.cmi : \ utils/misc.cmi +utils/diffing.cmo : \ + utils/diffing.cmi +utils/diffing.cmx : \ + utils/diffing.cmi +utils/diffing.cmi : utils/domainstate.cmo : \ utils/domainstate.cmi utils/domainstate.cmx : \ @@ -75,6 +80,11 @@ utils/int_replace_polymorphic_compare.cmo : \ utils/int_replace_polymorphic_compare.cmx : \ utils/int_replace_polymorphic_compare.cmi utils/int_replace_polymorphic_compare.cmi : +utils/lazy_backtrack.cmo : \ + utils/lazy_backtrack.cmi +utils/lazy_backtrack.cmx : \ + utils/lazy_backtrack.cmi +utils/lazy_backtrack.cmi : utils/load_path.cmo : \ utils/misc.cmi \ utils/local_store.cmi \ @@ -496,6 +506,7 @@ typing/ctype.cmo : \ parsing/location.cmi \ utils/local_store.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ utils/clflags.cmi \ typing/btype.cmi \ @@ -512,6 +523,7 @@ typing/ctype.cmx : \ parsing/location.cmx \ utils/local_store.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ utils/clflags.cmx \ typing/btype.cmx \ @@ -522,7 +534,9 @@ typing/ctype.cmi : \ typing/type_immediacy.cmi \ typing/path.cmi \ parsing/longident.cmi \ + parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ parsing/asttypes.cmi typing/datarepr.cmo : \ @@ -557,6 +571,7 @@ typing/env.cmo : \ parsing/location.cmi \ utils/local_store.cmi \ utils/load_path.cmi \ + utils/lazy_backtrack.cmi \ typing/ident.cmi \ typing/datarepr.cmi \ file_formats/cmi_format.cmi \ @@ -577,6 +592,7 @@ typing/env.cmx : \ parsing/location.cmx \ utils/local_store.cmx \ utils/load_path.cmx \ + utils/lazy_backtrack.cmx \ typing/ident.cmx \ typing/datarepr.cmx \ file_formats/cmi_format.cmx \ @@ -619,6 +635,20 @@ typing/envaux.cmi : \ typing/subst.cmi \ typing/path.cmi \ typing/env.cmi +typing/errortrace.cmo : \ + typing/types.cmi \ + typing/path.cmi \ + parsing/asttypes.cmi \ + typing/errortrace.cmi +typing/errortrace.cmx : \ + typing/types.cmx \ + typing/path.cmx \ + parsing/asttypes.cmi \ + typing/errortrace.cmi +typing/errortrace.cmi : \ + typing/types.cmi \ + typing/path.cmi \ + parsing/asttypes.cmi typing/ident.cmo : \ utils/misc.cmi \ utils/local_store.cmi \ @@ -657,8 +687,10 @@ typing/includecore.cmo : \ typing/typedtree.cmi \ typing/type_immediacy.cmi \ typing/printtyp.cmi \ + typing/primitive.cmi \ typing/path.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ parsing/builtin_attributes.cmi \ @@ -670,8 +702,10 @@ typing/includecore.cmx : \ typing/typedtree.cmx \ typing/type_immediacy.cmx \ typing/printtyp.cmx \ + typing/primitive.cmx \ typing/path.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ parsing/builtin_attributes.cmx \ @@ -685,8 +719,8 @@ typing/includecore.cmi : \ typing/path.cmi \ parsing/location.cmi \ typing/ident.cmi \ - typing/env.cmi \ - typing/ctype.cmi + typing/errortrace.cmi \ + typing/env.cmi typing/includemod.cmo : \ typing/types.cmi \ typing/typedtree.cmi \ @@ -695,17 +729,17 @@ typing/includemod.cmo : \ typing/primitive.cmi \ typing/predef.cmi \ typing/path.cmi \ - typing/oprint.cmi \ typing/mtype.cmi \ utils/misc.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ typing/includecore.cmi \ typing/includeclass.cmi \ typing/ident.cmi \ typing/env.cmi \ + utils/diffing.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ - utils/clflags.cmi \ parsing/builtin_attributes.cmi \ typing/btype.cmi \ typing/includemod.cmi @@ -717,17 +751,17 @@ typing/includemod.cmx : \ typing/primitive.cmx \ typing/predef.cmx \ typing/path.cmx \ - typing/oprint.cmx \ typing/mtype.cmx \ utils/misc.cmx \ + parsing/longident.cmx \ parsing/location.cmx \ typing/includecore.cmx \ typing/includeclass.cmx \ typing/ident.cmx \ typing/env.cmx \ + utils/diffing.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ - utils/clflags.cmx \ parsing/builtin_attributes.cmx \ typing/btype.cmx \ typing/includemod.cmi @@ -735,11 +769,47 @@ typing/includemod.cmi : \ typing/types.cmi \ typing/typedtree.cmi \ typing/path.cmi \ + parsing/longident.cmi \ parsing/location.cmi \ typing/includecore.cmi \ typing/ident.cmi \ typing/env.cmi \ + utils/diffing.cmi \ typing/ctype.cmi +typing/includemod_errorprinter.cmo : \ + typing/types.cmi \ + typing/typedtree.cmi \ + typing/printtyp.cmi \ + typing/path.cmi \ + typing/oprint.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + typing/includemod.cmi \ + typing/includecore.cmi \ + typing/includeclass.cmi \ + typing/ident.cmi \ + typing/env.cmi \ + utils/diffing.cmi \ + utils/clflags.cmi \ + typing/includemod_errorprinter.cmi +typing/includemod_errorprinter.cmx : \ + typing/types.cmx \ + typing/typedtree.cmx \ + typing/printtyp.cmx \ + typing/path.cmx \ + typing/oprint.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + typing/includemod.cmx \ + typing/includecore.cmx \ + typing/includeclass.cmx \ + typing/ident.cmx \ + typing/env.cmx \ + utils/diffing.cmx \ + utils/clflags.cmx \ + typing/includemod_errorprinter.cmi +typing/includemod_errorprinter.cmi : \ + typing/includemod.cmi typing/mtype.cmo : \ typing/types.cmi \ typing/subst.cmi \ @@ -878,6 +948,7 @@ typing/persistent_env.cmo : \ utils/misc.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ utils/config.cmi \ file_formats/cmi_format.cmi \ @@ -888,6 +959,7 @@ typing/persistent_env.cmx : \ utils/misc.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + utils/lazy_backtrack.cmx \ utils/consistbl.cmx \ utils/config.cmx \ file_formats/cmi_format.cmx \ @@ -897,6 +969,7 @@ typing/persistent_env.cmi : \ typing/types.cmi \ utils/misc.cmi \ parsing/location.cmi \ + utils/lazy_backtrack.cmi \ utils/consistbl.cmi \ file_formats/cmi_format.cmi typing/predef.cmo : \ @@ -962,6 +1035,7 @@ typing/printtyp.cmo : \ utils/warnings.cmi \ typing/types.cmi \ typing/type_immediacy.cmi \ + typing/signature_group.cmi \ typing/primitive.cmi \ typing/predef.cmi \ typing/path.cmi \ @@ -972,6 +1046,7 @@ typing/printtyp.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ utils/clflags.cmi \ @@ -982,6 +1057,7 @@ typing/printtyp.cmx : \ utils/warnings.cmx \ typing/types.cmx \ typing/type_immediacy.cmx \ + typing/signature_group.cmx \ typing/primitive.cmx \ typing/predef.cmx \ typing/path.cmx \ @@ -992,6 +1068,7 @@ typing/printtyp.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ utils/clflags.cmx \ @@ -1005,8 +1082,8 @@ typing/printtyp.cmi : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ - typing/ctype.cmi \ parsing/asttypes.cmi typing/printtyped.cmo : \ typing/types.cmi \ @@ -1057,6 +1134,18 @@ typing/rec_check.cmx : \ typing/rec_check.cmi : \ typing/typedtree.cmi \ typing/ident.cmi +typing/signature_group.cmo : \ + typing/types.cmi \ + typing/ident.cmi \ + typing/btype.cmi \ + typing/signature_group.cmi +typing/signature_group.cmx : \ + typing/types.cmx \ + typing/ident.cmx \ + typing/btype.cmx \ + typing/signature_group.cmi +typing/signature_group.cmi : \ + typing/types.cmi typing/stypes.cmo : \ typing/typedtree.cmi \ typing/printtyp.cmi \ @@ -1104,6 +1193,7 @@ typing/subst.cmx : \ typing/subst.cmi : \ typing/types.cmi \ typing/path.cmi \ + parsing/location.cmi \ typing/ident.cmi typing/tast_iterator.cmo : \ typing/typedtree.cmi \ @@ -1159,6 +1249,7 @@ typing/typeclass.cmo : \ parsing/location.cmi \ typing/includeclass.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ @@ -1186,6 +1277,7 @@ typing/typeclass.cmx : \ parsing/location.cmx \ typing/includeclass.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ @@ -1202,6 +1294,7 @@ typing/typeclass.cmi : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ parsing/asttypes.cmi @@ -1226,6 +1319,7 @@ typing/typecore.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ file_formats/cmt_format.cmi \ @@ -1256,6 +1350,7 @@ typing/typecore.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ file_formats/cmt_format.cmx \ @@ -1273,8 +1368,8 @@ typing/typecore.cmi : \ parsing/longident.cmi \ parsing/location.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ - typing/ctype.cmi \ parsing/asttypes.cmi typing/typedecl.cmo : \ utils/warnings.cmi \ @@ -1299,6 +1394,7 @@ typing/typedecl.cmo : \ parsing/location.cmi \ typing/includecore.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ utils/config.cmi \ @@ -1333,6 +1429,7 @@ typing/typedecl.cmx : \ parsing/location.cmx \ typing/includecore.cmx \ typing/ident.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ utils/config.cmx \ @@ -1356,8 +1453,8 @@ typing/typedecl.cmi : \ parsing/location.cmi \ typing/includecore.cmi \ typing/ident.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ - typing/ctype.cmi \ parsing/asttypes.cmi typing/typedecl_immediacy.cmo : \ typing/types.cmi \ @@ -1406,7 +1503,6 @@ typing/typedecl_separability.cmo : \ typing/ctype.cmi \ utils/config.cmi \ typing/btype.cmi \ - parsing/asttypes.cmi \ typing/typedecl_separability.cmi typing/typedecl_separability.cmx : \ typing/types.cmx \ @@ -1416,7 +1512,6 @@ typing/typedecl_separability.cmx : \ typing/ctype.cmx \ utils/config.cmx \ typing/btype.cmx \ - parsing/asttypes.cmi \ typing/typedecl_separability.cmi typing/typedecl_separability.cmi : \ typing/types.cmi \ @@ -1513,6 +1608,7 @@ typing/typemod.cmo : \ typing/typecore.cmi \ typing/typeclass.cmi \ typing/subst.cmi \ + typing/signature_group.cmi \ typing/printtyp.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ @@ -1522,6 +1618,7 @@ typing/typemod.cmo : \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ + typing/includemod_errorprinter.cmi \ typing/includemod.cmi \ typing/ident.cmi \ typing/env.cmi \ @@ -1545,6 +1642,7 @@ typing/typemod.cmx : \ typing/typecore.cmx \ typing/typeclass.cmx \ typing/subst.cmx \ + typing/signature_group.cmx \ typing/printtyp.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ @@ -1554,6 +1652,7 @@ typing/typemod.cmx : \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ + typing/includemod_errorprinter.cmx \ typing/includemod.cmx \ typing/ident.cmx \ typing/env.cmx \ @@ -1660,6 +1759,7 @@ typing/typetexp.cmo : \ utils/misc.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ typing/ctype.cmi \ utils/clflags.cmi \ @@ -1680,6 +1780,7 @@ typing/typetexp.cmx : \ utils/misc.cmx \ parsing/longident.cmx \ parsing/location.cmx \ + typing/errortrace.cmx \ typing/env.cmx \ typing/ctype.cmx \ utils/clflags.cmx \ @@ -1695,8 +1796,8 @@ typing/typetexp.cmi : \ parsing/parsetree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + typing/errortrace.cmi \ typing/env.cmi \ - typing/ctype.cmi \ parsing/asttypes.cmi typing/untypeast.cmo : \ typing/typedtree.cmi \ @@ -2023,15 +2124,18 @@ asmcomp/CSEgen.cmo : \ asmcomp/proc.cmi \ asmcomp/mach.cmi \ asmcomp/cmm.cmi \ + parsing/asttypes.cmi \ asmcomp/CSEgen.cmi asmcomp/CSEgen.cmx : \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ asmcomp/mach.cmx \ asmcomp/cmm.cmx \ + parsing/asttypes.cmi \ asmcomp/CSEgen.cmi asmcomp/CSEgen.cmi : \ - asmcomp/mach.cmi + asmcomp/mach.cmi \ + parsing/asttypes.cmi asmcomp/afl_instrument.cmo : \ lambda/lambda.cmi \ asmcomp/cmm.cmi \ @@ -2069,6 +2173,7 @@ asmcomp/asmgen.cmo : \ asmcomp/printlinear.cmi \ asmcomp/printcmm.cmi \ typing/primitive.cmi \ + asmcomp/polling.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ parsing/location.cmi \ @@ -2076,6 +2181,7 @@ asmcomp/asmgen.cmo : \ asmcomp/linscan.cmi \ asmcomp/linearize.cmi \ file_formats/linear_format.cmi \ + asmcomp/linear.cmi \ lambda/lambda.cmi \ asmcomp/interval.cmi \ asmcomp/interf.cmi \ @@ -2088,13 +2194,13 @@ asmcomp/asmgen.cmo : \ asmcomp/comballoc.cmi \ asmcomp/coloring.cmi \ asmcomp/cmmgen.cmi \ + asmcomp/cmm_invariants.cmi \ asmcomp/cmm_helpers.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ middle_end/clambda.cmi \ asmcomp/CSE.cmo \ middle_end/backend_intf.cmi \ - asmcomp/debug/available_regs.cmi \ asmcomp/asmgen.cmi asmcomp/asmgen.cmx : \ lambda/translmod.cmx \ @@ -2110,6 +2216,7 @@ asmcomp/asmgen.cmx : \ asmcomp/printlinear.cmx \ asmcomp/printcmm.cmx \ typing/primitive.cmx \ + asmcomp/polling.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ parsing/location.cmx \ @@ -2117,6 +2224,7 @@ asmcomp/asmgen.cmx : \ asmcomp/linscan.cmx \ asmcomp/linearize.cmx \ file_formats/linear_format.cmx \ + asmcomp/linear.cmx \ lambda/lambda.cmx \ asmcomp/interval.cmx \ asmcomp/interf.cmx \ @@ -2129,16 +2237,17 @@ asmcomp/asmgen.cmx : \ asmcomp/comballoc.cmx \ asmcomp/coloring.cmx \ asmcomp/cmmgen.cmx \ + asmcomp/cmm_invariants.cmx \ asmcomp/cmm_helpers.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ middle_end/clambda.cmx \ asmcomp/CSE.cmx \ middle_end/backend_intf.cmi \ - asmcomp/debug/available_regs.cmx \ asmcomp/asmgen.cmi asmcomp/asmgen.cmi : \ lambda/lambda.cmi \ + asmcomp/emitaux.cmi \ asmcomp/cmm.cmi \ middle_end/clambda.cmi \ middle_end/backend_intf.cmi @@ -2279,10 +2388,12 @@ asmcomp/branch_relaxation.cmi : \ asmcomp/branch_relaxation_intf.cmo : \ asmcomp/linear.cmi \ lambda/debuginfo.cmi \ + asmcomp/cmm.cmi \ asmcomp/arch.cmo asmcomp/branch_relaxation_intf.cmx : \ asmcomp/linear.cmx \ lambda/debuginfo.cmx \ + asmcomp/cmm.cmx \ asmcomp/arch.cmx asmcomp/cmm.cmo : \ utils/targetint.cmi \ @@ -2365,6 +2476,16 @@ asmcomp/cmm_helpers.cmi : \ middle_end/clambda_primitives.cmi \ middle_end/clambda.cmi \ parsing/asttypes.cmi +asmcomp/cmm_invariants.cmo : \ + utils/numbers.cmi \ + asmcomp/cmm.cmi \ + asmcomp/cmm_invariants.cmi +asmcomp/cmm_invariants.cmx : \ + utils/numbers.cmx \ + asmcomp/cmm.cmx \ + asmcomp/cmm_invariants.cmi +asmcomp/cmm_invariants.cmi : \ + asmcomp/cmm.cmi asmcomp/cmmgen.cmo : \ typing/types.cmi \ middle_end/printclambda_primitives.cmi \ @@ -2449,6 +2570,16 @@ asmcomp/comballoc.cmx : \ asmcomp/comballoc.cmi asmcomp/comballoc.cmi : \ asmcomp/mach.cmi +asmcomp/dataflow.cmo : \ + asmcomp/mach.cmi \ + asmcomp/cmm.cmi \ + asmcomp/dataflow.cmi +asmcomp/dataflow.cmx : \ + asmcomp/mach.cmx \ + asmcomp/cmm.cmx \ + asmcomp/dataflow.cmi +asmcomp/dataflow.cmi : \ + asmcomp/mach.cmi asmcomp/deadcode.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2478,6 +2609,7 @@ asmcomp/emit.cmo : \ asmcomp/mach.cmi \ asmcomp/linear.cmi \ lambda/lambda.cmi \ + asmcomp/emitenv.cmi \ asmcomp/emitaux.cmi \ utils/domainstate.cmi \ utils/config.cmi \ @@ -2500,6 +2632,7 @@ asmcomp/emit.cmx : \ asmcomp/mach.cmx \ asmcomp/linear.cmx \ lambda/lambda.cmx \ + asmcomp/emitenv.cmi \ asmcomp/emitaux.cmx \ utils/domainstate.cmx \ utils/config.cmx \ @@ -2513,6 +2646,7 @@ asmcomp/emit.cmi : \ asmcomp/linear.cmi \ asmcomp/cmm.cmi asmcomp/emitaux.cmo : \ + asmcomp/emitenv.cmi \ lambda/debuginfo.cmi \ utils/config.cmi \ asmcomp/cmm.cmi \ @@ -2520,6 +2654,7 @@ asmcomp/emitaux.cmo : \ asmcomp/arch.cmo \ asmcomp/emitaux.cmi asmcomp/emitaux.cmx : \ + asmcomp/emitenv.cmi \ lambda/debuginfo.cmx \ utils/config.cmx \ asmcomp/cmm.cmx \ @@ -2527,7 +2662,11 @@ asmcomp/emitaux.cmx : \ asmcomp/arch.cmx \ asmcomp/emitaux.cmi asmcomp/emitaux.cmi : \ + asmcomp/linear.cmi \ + asmcomp/emitenv.cmi \ lambda/debuginfo.cmi +asmcomp/emitenv.cmi : \ + asmcomp/linear.cmi asmcomp/interf.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ @@ -2613,7 +2752,7 @@ asmcomp/liveness.cmo : \ asmcomp/printmach.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ - asmcomp/cmm.cmi \ + asmcomp/dataflow.cmi \ asmcomp/liveness.cmi asmcomp/liveness.cmx : \ asmcomp/reg.cmx \ @@ -2621,38 +2760,50 @@ asmcomp/liveness.cmx : \ asmcomp/printmach.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ - asmcomp/cmm.cmx \ + asmcomp/dataflow.cmx \ asmcomp/liveness.cmi asmcomp/liveness.cmi : \ asmcomp/mach.cmi asmcomp/mach.cmo : \ - asmcomp/debug/reg_with_debug_info.cmi \ - asmcomp/debug/reg_availability_set.cmi \ asmcomp/reg.cmi \ lambda/lambda.cmi \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ - middle_end/backend_var.cmi \ + parsing/asttypes.cmi \ asmcomp/arch.cmo \ asmcomp/mach.cmi asmcomp/mach.cmx : \ - asmcomp/debug/reg_with_debug_info.cmx \ - asmcomp/debug/reg_availability_set.cmx \ asmcomp/reg.cmx \ lambda/lambda.cmx \ lambda/debuginfo.cmx \ asmcomp/cmm.cmx \ - middle_end/backend_var.cmx \ + parsing/asttypes.cmi \ asmcomp/arch.cmx \ asmcomp/mach.cmi asmcomp/mach.cmi : \ - asmcomp/debug/reg_availability_set.cmi \ asmcomp/reg.cmi \ lambda/lambda.cmi \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ - middle_end/backend_var.cmi \ + parsing/asttypes.cmi \ asmcomp/arch.cmo +asmcomp/polling.cmo : \ + utils/numbers.cmi \ + utils/misc.cmi \ + asmcomp/mach.cmi \ + asmcomp/dataflow.cmi \ + asmcomp/cmm.cmi \ + asmcomp/polling.cmi +asmcomp/polling.cmx : \ + utils/numbers.cmx \ + utils/misc.cmx \ + asmcomp/mach.cmx \ + asmcomp/dataflow.cmx \ + asmcomp/cmm.cmx \ + asmcomp/polling.cmi +asmcomp/polling.cmi : \ + utils/misc.cmi \ + asmcomp/mach.cmi asmcomp/printcmm.cmo : \ utils/targetint.cmi \ lambda/lambda.cmi \ @@ -2693,7 +2844,6 @@ asmcomp/printlinear.cmx : \ asmcomp/printlinear.cmi : \ asmcomp/linear.cmi asmcomp/printmach.cmo : \ - asmcomp/debug/reg_availability_set.cmi \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ asmcomp/printcmm.cmi \ @@ -2703,11 +2853,9 @@ asmcomp/printmach.cmo : \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ - middle_end/backend_var.cmi \ asmcomp/arch.cmo \ asmcomp/printmach.cmi asmcomp/printmach.cmx : \ - asmcomp/debug/reg_availability_set.cmx \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ asmcomp/printcmm.cmx \ @@ -2717,7 +2865,6 @@ asmcomp/printmach.cmx : \ lambda/debuginfo.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ - middle_end/backend_var.cmx \ asmcomp/arch.cmx \ asmcomp/printmach.cmi asmcomp/printmach.cmi : \ @@ -2819,6 +2966,7 @@ asmcomp/scheduling.cmi : \ asmcomp/selectgen.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ + asmcomp/polling.cmi \ utils/numbers.cmi \ utils/misc.cmi \ asmcomp/mach.cmi \ @@ -2832,6 +2980,7 @@ asmcomp/selectgen.cmo : \ asmcomp/selectgen.cmx : \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ + asmcomp/polling.cmx \ utils/numbers.cmx \ utils/misc.cmx \ asmcomp/mach.cmx \ @@ -2844,6 +2993,7 @@ asmcomp/selectgen.cmx : \ asmcomp/selectgen.cmi asmcomp/selectgen.cmi : \ asmcomp/reg.cmi \ + utils/misc.cmi \ asmcomp/mach.cmi \ lambda/debuginfo.cmi \ asmcomp/cmm.cmi \ @@ -2867,12 +3017,12 @@ asmcomp/selection.cmx : \ asmcomp/arch.cmx \ asmcomp/selection.cmi asmcomp/selection.cmi : \ + utils/misc.cmi \ asmcomp/mach.cmi \ asmcomp/cmm.cmi asmcomp/spill.cmo : \ asmcomp/reg.cmi \ asmcomp/proc.cmi \ - utils/misc.cmi \ asmcomp/mach.cmi \ asmcomp/cmm.cmi \ utils/clflags.cmi \ @@ -2880,7 +3030,6 @@ asmcomp/spill.cmo : \ asmcomp/spill.cmx : \ asmcomp/reg.cmx \ asmcomp/proc.cmx \ - utils/misc.cmx \ asmcomp/mach.cmx \ asmcomp/cmm.cmx \ utils/clflags.cmx \ @@ -5648,80 +5797,6 @@ middle_end/flambda/base_types/var_within_closure.cmx : \ middle_end/flambda/base_types/var_within_closure.cmi middle_end/flambda/base_types/var_within_closure.cmi : \ middle_end/flambda/base_types/closure_element.cmi -asmcomp/debug/available_regs.cmo : \ - asmcomp/debug/reg_with_debug_info.cmi \ - asmcomp/debug/reg_availability_set.cmi \ - asmcomp/reg.cmi \ - asmcomp/proc.cmi \ - asmcomp/printmach.cmi \ - utils/misc.cmi \ - asmcomp/mach.cmi \ - utils/clflags.cmi \ - middle_end/backend_var.cmi \ - asmcomp/debug/available_regs.cmi -asmcomp/debug/available_regs.cmx : \ - asmcomp/debug/reg_with_debug_info.cmx \ - asmcomp/debug/reg_availability_set.cmx \ - asmcomp/reg.cmx \ - asmcomp/proc.cmx \ - asmcomp/printmach.cmx \ - utils/misc.cmx \ - asmcomp/mach.cmx \ - utils/clflags.cmx \ - middle_end/backend_var.cmx \ - asmcomp/debug/available_regs.cmi -asmcomp/debug/available_regs.cmi : \ - asmcomp/mach.cmi -asmcomp/debug/compute_ranges.cmo : \ - asmcomp/printlinear.cmi \ - utils/numbers.cmi \ - utils/misc.cmi \ - asmcomp/linear.cmi \ - utils/int_replace_polymorphic_compare.cmi \ - asmcomp/debug/compute_ranges_intf.cmo \ - asmcomp/cmm.cmi \ - asmcomp/debug/compute_ranges.cmi -asmcomp/debug/compute_ranges.cmx : \ - asmcomp/printlinear.cmx \ - utils/numbers.cmx \ - utils/misc.cmx \ - asmcomp/linear.cmx \ - utils/int_replace_polymorphic_compare.cmx \ - asmcomp/debug/compute_ranges_intf.cmx \ - asmcomp/cmm.cmx \ - asmcomp/debug/compute_ranges.cmi -asmcomp/debug/compute_ranges.cmi : \ - asmcomp/debug/compute_ranges_intf.cmo -asmcomp/debug/compute_ranges_intf.cmo : \ - utils/numbers.cmi \ - asmcomp/linear.cmi \ - utils/identifiable.cmi -asmcomp/debug/compute_ranges_intf.cmx : \ - utils/numbers.cmx \ - asmcomp/linear.cmx \ - utils/identifiable.cmx -asmcomp/debug/reg_availability_set.cmo : \ - asmcomp/debug/reg_with_debug_info.cmi \ - middle_end/backend_var.cmi \ - asmcomp/debug/reg_availability_set.cmi -asmcomp/debug/reg_availability_set.cmx : \ - asmcomp/debug/reg_with_debug_info.cmx \ - middle_end/backend_var.cmx \ - asmcomp/debug/reg_availability_set.cmi -asmcomp/debug/reg_availability_set.cmi : \ - asmcomp/debug/reg_with_debug_info.cmi \ - asmcomp/reg.cmi -asmcomp/debug/reg_with_debug_info.cmo : \ - asmcomp/reg.cmi \ - middle_end/backend_var.cmi \ - asmcomp/debug/reg_with_debug_info.cmi -asmcomp/debug/reg_with_debug_info.cmx : \ - asmcomp/reg.cmx \ - middle_end/backend_var.cmx \ - asmcomp/debug/reg_with_debug_info.cmi -asmcomp/debug/reg_with_debug_info.cmi : \ - asmcomp/reg.cmi \ - middle_end/backend_var.cmi driver/compenv.cmo : \ utils/warnings.cmi \ utils/profile.cmi \ @@ -5743,6 +5818,7 @@ driver/compenv.cmx : \ driver/compenv.cmi : \ utils/clflags.cmi driver/compile.cmo : \ + typing/typedtree.cmi \ lambda/translmod.cmi \ lambda/simplif.cmi \ utils/profile.cmi \ @@ -5756,6 +5832,7 @@ driver/compile.cmo : \ bytecomp/bytegen.cmi \ driver/compile.cmi driver/compile.cmx : \ + typing/typedtree.cmx \ lambda/translmod.cmx \ lambda/simplif.cmx \ utils/profile.cmx \ @@ -5862,6 +5939,7 @@ driver/main_args.cmo : \ utils/warnings.cmi \ utils/profile.cmi \ utils/misc.cmi \ + parsing/location.cmi \ utils/config.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ @@ -5870,6 +5948,7 @@ driver/main_args.cmx : \ utils/warnings.cmx \ utils/profile.cmx \ utils/misc.cmx \ + parsing/location.cmx \ utils/config.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ @@ -5934,6 +6013,7 @@ driver/makedepend.cmx : \ driver/makedepend.cmi driver/makedepend.cmi : driver/optcompile.cmo : \ + typing/typedtree.cmi \ lambda/translmod.cmi \ lambda/simplif.cmi \ utils/profile.cmi \ @@ -5949,6 +6029,7 @@ driver/optcompile.cmo : \ asmcomp/asmgen.cmi \ driver/optcompile.cmi driver/optcompile.cmx : \ + typing/typedtree.cmx \ lambda/translmod.cmx \ lambda/simplif.cmx \ utils/profile.cmx \ @@ -6101,52 +6182,7 @@ toplevel/genprintval.cmi : \ typing/path.cmi \ typing/outcometree.cmi \ typing/env.cmi -toplevel/opttopdirs.cmo : \ - utils/warnings.cmi \ - typing/types.cmi \ - typing/printtyp.cmi \ - toplevel/opttoploop.cmi \ - utils/misc.cmi \ - parsing/longident.cmi \ - utils/load_path.cmi \ - typing/ident.cmi \ - typing/env.cmi \ - typing/ctype.cmi \ - utils/config.cmi \ - driver/compenv.cmi \ - utils/clflags.cmi \ - asmcomp/asmlink.cmi \ - toplevel/opttopdirs.cmi -toplevel/opttopdirs.cmx : \ - utils/warnings.cmx \ - typing/types.cmx \ - typing/printtyp.cmx \ - toplevel/opttoploop.cmx \ - utils/misc.cmx \ - parsing/longident.cmx \ - utils/load_path.cmx \ - typing/ident.cmx \ - typing/env.cmx \ - typing/ctype.cmx \ - utils/config.cmx \ - driver/compenv.cmx \ - utils/clflags.cmx \ - asmcomp/asmlink.cmx \ - toplevel/opttopdirs.cmi -toplevel/opttopdirs.cmi : \ - parsing/longident.cmi -toplevel/opttoploop.cmo : \ - utils/warnings.cmi \ - typing/types.cmi \ - typing/typemod.cmi \ - typing/typedtree.cmi \ - typing/typecore.cmi \ - lambda/translmod.cmi \ - lambda/simplif.cmi \ - asmcomp/proc.cmi \ - typing/printtyped.cmi \ - typing/printtyp.cmi \ - lambda/printlambda.cmi \ +toplevel/topcommon.cmo : \ parsing/printast.cmi \ typing/predef.cmi \ parsing/pprintast.cmi \ @@ -6161,39 +6197,17 @@ toplevel/opttoploop.cmo : \ parsing/location.cmi \ utils/load_path.cmi \ parsing/lexer.cmi \ - lambda/lambda.cmi \ - typing/includemod.cmi \ - middle_end/flambda/import_approx.cmi \ typing/ident.cmi \ toplevel/genprintval.cmi \ - middle_end/flambda/flambda_middle_end.cmi \ typing/env.cmi \ + bytecomp/dll.cmi \ utils/config.cmi \ driver/compmisc.cmi \ - middle_end/compilenv.cmi \ driver/compenv.cmi \ - middle_end/closure/closure_middle_end.cmi \ utils/clflags.cmi \ - typing/btype.cmi \ - middle_end/backend_intf.cmi \ - parsing/asttypes.cmi \ parsing/ast_helper.cmi \ - asmcomp/asmlink.cmi \ - asmcomp/asmgen.cmi \ - asmcomp/arch.cmo \ - toplevel/opttoploop.cmi -toplevel/opttoploop.cmx : \ - utils/warnings.cmx \ - typing/types.cmx \ - typing/typemod.cmx \ - typing/typedtree.cmx \ - typing/typecore.cmx \ - lambda/translmod.cmx \ - lambda/simplif.cmx \ - asmcomp/proc.cmx \ - typing/printtyped.cmx \ - typing/printtyp.cmx \ - lambda/printlambda.cmx \ + toplevel/topcommon.cmi +toplevel/topcommon.cmx : \ parsing/printast.cmx \ typing/predef.cmx \ parsing/pprintast.cmx \ @@ -6208,28 +6222,17 @@ toplevel/opttoploop.cmx : \ parsing/location.cmx \ utils/load_path.cmx \ parsing/lexer.cmx \ - lambda/lambda.cmx \ - typing/includemod.cmx \ - middle_end/flambda/import_approx.cmx \ typing/ident.cmx \ toplevel/genprintval.cmx \ - middle_end/flambda/flambda_middle_end.cmx \ typing/env.cmx \ + bytecomp/dll.cmx \ utils/config.cmx \ driver/compmisc.cmx \ - middle_end/compilenv.cmx \ driver/compenv.cmx \ - middle_end/closure/closure_middle_end.cmx \ utils/clflags.cmx \ - typing/btype.cmx \ - middle_end/backend_intf.cmi \ - parsing/asttypes.cmi \ parsing/ast_helper.cmx \ - asmcomp/asmlink.cmx \ - asmcomp/asmgen.cmx \ - asmcomp/arch.cmx \ - toplevel/opttoploop.cmi -toplevel/opttoploop.cmi : \ + toplevel/topcommon.cmi +toplevel/topcommon.cmi : \ utils/warnings.cmi \ typing/types.cmi \ typing/path.cmi \ @@ -6237,46 +6240,19 @@ toplevel/opttoploop.cmi : \ typing/outcometree.cmi \ parsing/longident.cmi \ parsing/location.cmi \ + typing/ident.cmi \ + toplevel/genprintval.cmi \ typing/env.cmi -toplevel/opttopmain.cmo : \ - toplevel/opttoploop.cmi \ - toplevel/opttopdirs.cmi \ - utils/misc.cmi \ - driver/main_args.cmi \ - parsing/location.cmi \ - driver/compmisc.cmi \ - driver/compenv.cmi \ - utils/clflags.cmi \ - toplevel/opttopmain.cmi -toplevel/opttopmain.cmx : \ - toplevel/opttoploop.cmx \ - toplevel/opttopdirs.cmx \ - utils/misc.cmx \ - driver/main_args.cmx \ - parsing/location.cmx \ - driver/compmisc.cmx \ - driver/compenv.cmx \ - utils/clflags.cmx \ - toplevel/opttopmain.cmi -toplevel/opttopmain.cmi : -toplevel/opttopstart.cmo : \ - toplevel/opttopmain.cmi -toplevel/opttopstart.cmx : \ - toplevel/opttopmain.cmx toplevel/topdirs.cmo : \ utils/warnings.cmi \ typing/types.cmi \ - toplevel/trace.cmi \ toplevel/toploop.cmi \ - bytecomp/symtable.cmi \ + toplevel/topeval.cmi \ typing/printtyp.cmi \ typing/predef.cmi \ - typing/persistent_env.cmi \ typing/path.cmi \ parsing/parsetree.cmi \ - bytecomp/opcodes.cmi \ utils/misc.cmi \ - bytecomp/meta.cmi \ parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ @@ -6286,7 +6262,6 @@ toplevel/topdirs.cmo : \ typing/ctype.cmi \ utils/config.cmi \ driver/compenv.cmi \ - file_formats/cmo_format.cmi \ utils/clflags.cmi \ typing/btype.cmi \ parsing/asttypes.cmi \ @@ -6295,17 +6270,13 @@ toplevel/topdirs.cmo : \ toplevel/topdirs.cmx : \ utils/warnings.cmx \ typing/types.cmx \ - toplevel/trace.cmx \ toplevel/toploop.cmx \ - bytecomp/symtable.cmx \ + toplevel/topeval.cmi \ typing/printtyp.cmx \ typing/predef.cmx \ - typing/persistent_env.cmx \ typing/path.cmx \ parsing/parsetree.cmi \ - bytecomp/opcodes.cmx \ utils/misc.cmx \ - bytecomp/meta.cmx \ parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ @@ -6315,7 +6286,6 @@ toplevel/topdirs.cmx : \ typing/ctype.cmx \ utils/config.cmx \ driver/compenv.cmx \ - file_formats/cmo_format.cmi \ utils/clflags.cmx \ typing/btype.cmx \ parsing/asttypes.cmi \ @@ -6323,131 +6293,172 @@ toplevel/topdirs.cmx : \ toplevel/topdirs.cmi toplevel/topdirs.cmi : \ parsing/longident.cmi +toplevel/topeval.cmi : \ + toplevel/topcommon.cmi \ + parsing/parsetree.cmi toplevel/toploop.cmo : \ utils/warnings.cmi \ typing/typetexp.cmi \ + toplevel/topeval.cmi \ + toplevel/topcommon.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + parsing/lexer.cmi \ + typing/env.cmi \ + utils/config.cmi \ + driver/compmisc.cmi \ + driver/compenv.cmi \ + utils/clflags.cmi \ + typing/btype.cmi \ + toplevel/toploop.cmi +toplevel/toploop.cmx : \ + utils/warnings.cmx \ + typing/typetexp.cmx \ + toplevel/topeval.cmi \ + toplevel/topcommon.cmx \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + parsing/lexer.cmx \ + typing/env.cmx \ + utils/config.cmx \ + driver/compmisc.cmx \ + driver/compenv.cmx \ + utils/clflags.cmx \ + typing/btype.cmx \ + toplevel/toploop.cmi +toplevel/toploop.cmi : \ + utils/warnings.cmi \ + typing/types.cmi \ + typing/path.cmi \ + parsing/parsetree.cmi \ + typing/outcometree.cmi \ + parsing/longident.cmi \ + parsing/location.cmi \ + typing/env.cmi +toplevel/topmain.cmi : +toplevel/topstart.cmo : \ + toplevel/topmain.cmi +toplevel/topstart.cmx : \ + toplevel/topmain.cmi +toplevel/trace.cmi : \ + typing/types.cmi \ + typing/path.cmi \ + parsing/longident.cmi \ + typing/env.cmi +toplevel/byte/topeval.cmo : \ + utils/warnings.cmi \ typing/types.cmi \ typing/typemod.cmi \ typing/typedtree.cmi \ typing/typecore.cmi \ lambda/translmod.cmi \ + toplevel/topcommon.cmi \ bytecomp/symtable.cmi \ lambda/simplif.cmi \ typing/printtyped.cmi \ typing/printtyp.cmi \ lambda/printlambda.cmi \ bytecomp/printinstr.cmi \ - parsing/printast.cmi \ typing/predef.cmi \ - parsing/pprintast.cmi \ - driver/pparse.cmi \ - typing/path.cmi \ + typing/persistent_env.cmi \ parsing/parsetree.cmi \ - parsing/parse.cmi \ typing/outcometree.cmi \ - typing/oprint.cmi \ + bytecomp/opcodes.cmi \ utils/misc.cmi \ bytecomp/meta.cmi \ - parsing/longident.cmi \ parsing/location.cmi \ utils/load_path.cmi \ - parsing/lexer.cmi \ typing/includemod.cmi \ typing/ident.cmi \ - toplevel/genprintval.cmi \ typing/env.cmi \ bytecomp/emitcode.cmi \ bytecomp/dll.cmi \ utils/config.cmi \ driver/compmisc.cmi \ - driver/compenv.cmi \ + file_formats/cmo_format.cmi \ utils/clflags.cmi \ bytecomp/bytegen.cmi \ - typing/btype.cmi \ parsing/asttypes.cmi \ - parsing/ast_helper.cmi \ - toplevel/toploop.cmi -toplevel/toploop.cmx : \ + toplevel/byte/topeval.cmi +toplevel/byte/topeval.cmx : \ utils/warnings.cmx \ - typing/typetexp.cmx \ typing/types.cmx \ typing/typemod.cmx \ typing/typedtree.cmx \ typing/typecore.cmx \ lambda/translmod.cmx \ + toplevel/topcommon.cmx \ bytecomp/symtable.cmx \ lambda/simplif.cmx \ typing/printtyped.cmx \ typing/printtyp.cmx \ lambda/printlambda.cmx \ bytecomp/printinstr.cmx \ - parsing/printast.cmx \ typing/predef.cmx \ - parsing/pprintast.cmx \ - driver/pparse.cmx \ - typing/path.cmx \ + typing/persistent_env.cmx \ parsing/parsetree.cmi \ - parsing/parse.cmx \ typing/outcometree.cmi \ - typing/oprint.cmx \ + bytecomp/opcodes.cmx \ utils/misc.cmx \ bytecomp/meta.cmx \ - parsing/longident.cmx \ parsing/location.cmx \ utils/load_path.cmx \ - parsing/lexer.cmx \ typing/includemod.cmx \ typing/ident.cmx \ - toplevel/genprintval.cmx \ typing/env.cmx \ bytecomp/emitcode.cmx \ bytecomp/dll.cmx \ utils/config.cmx \ driver/compmisc.cmx \ - driver/compenv.cmx \ + file_formats/cmo_format.cmi \ utils/clflags.cmx \ bytecomp/bytegen.cmx \ - typing/btype.cmx \ parsing/asttypes.cmi \ - parsing/ast_helper.cmx \ - toplevel/toploop.cmi -toplevel/toploop.cmi : \ - utils/warnings.cmi \ - typing/types.cmi \ - typing/path.cmi \ - parsing/parsetree.cmi \ - typing/outcometree.cmi \ - parsing/longident.cmi \ - parsing/location.cmi \ - typing/env.cmi -toplevel/topmain.cmo : \ + toplevel/byte/topeval.cmi +toplevel/byte/topeval.cmi : \ + toplevel/topcommon.cmi \ + parsing/parsetree.cmi +toplevel/byte/topmain.cmo : \ + toplevel/byte/trace.cmi \ toplevel/toploop.cmi \ + toplevel/byte/topeval.cmi \ toplevel/topdirs.cmi \ + toplevel/topcommon.cmi \ + typing/printtyp.cmi \ + typing/path.cmi \ utils/misc.cmi \ driver/main_args.cmi \ parsing/location.cmi \ + typing/env.cmi \ + typing/ctype.cmi \ driver/compmisc.cmi \ driver/compenv.cmi \ utils/clflags.cmi \ - toplevel/topmain.cmi -toplevel/topmain.cmx : \ + toplevel/byte/topmain.cmi +toplevel/byte/topmain.cmx : \ + toplevel/byte/trace.cmx \ toplevel/toploop.cmx \ + toplevel/byte/topeval.cmx \ toplevel/topdirs.cmx \ + toplevel/topcommon.cmx \ + typing/printtyp.cmx \ + typing/path.cmx \ utils/misc.cmx \ driver/main_args.cmx \ parsing/location.cmx \ + typing/env.cmx \ + typing/ctype.cmx \ driver/compmisc.cmx \ driver/compenv.cmx \ utils/clflags.cmx \ - toplevel/topmain.cmi -toplevel/topmain.cmi : -toplevel/topstart.cmo : \ - toplevel/topmain.cmi -toplevel/topstart.cmx : \ - toplevel/topmain.cmx -toplevel/trace.cmo : \ + toplevel/byte/topmain.cmi +toplevel/byte/topmain.cmi : +toplevel/byte/trace.cmo : \ typing/types.cmi \ - toplevel/toploop.cmi \ + toplevel/byte/topeval.cmi \ + toplevel/topcommon.cmi \ typing/printtyp.cmi \ typing/predef.cmi \ typing/path.cmi \ @@ -6456,10 +6467,11 @@ toplevel/trace.cmo : \ parsing/longident.cmi \ typing/ctype.cmi \ parsing/asttypes.cmi \ - toplevel/trace.cmi -toplevel/trace.cmx : \ + toplevel/byte/trace.cmi +toplevel/byte/trace.cmx : \ typing/types.cmx \ - toplevel/toploop.cmx \ + toplevel/byte/topeval.cmx \ + toplevel/topcommon.cmx \ typing/printtyp.cmx \ typing/predef.cmx \ typing/path.cmx \ @@ -6468,8 +6480,119 @@ toplevel/trace.cmx : \ parsing/longident.cmx \ typing/ctype.cmx \ parsing/asttypes.cmi \ - toplevel/trace.cmi -toplevel/trace.cmi : \ + toplevel/byte/trace.cmi +toplevel/byte/trace.cmi : \ + typing/types.cmi \ + typing/path.cmi \ + parsing/longident.cmi \ + typing/env.cmi +toplevel/native/topeval.cmo : \ + utils/warnings.cmi \ + typing/types.cmi \ + typing/typemod.cmi \ + typing/typedtree.cmi \ + typing/typecore.cmi \ + lambda/translmod.cmi \ + toplevel/topcommon.cmi \ + lambda/simplif.cmi \ + asmcomp/proc.cmi \ + typing/printtyped.cmi \ + typing/printtyp.cmi \ + lambda/printlambda.cmi \ + typing/predef.cmi \ + parsing/parsetree.cmi \ + typing/outcometree.cmi \ + utils/misc.cmi \ + parsing/location.cmi \ + utils/load_path.cmi \ + lambda/lambda.cmi \ + typing/includemod.cmi \ + middle_end/flambda/import_approx.cmi \ + typing/ident.cmi \ + middle_end/flambda/flambda_middle_end.cmi \ + typing/env.cmi \ + utils/config.cmi \ + driver/compmisc.cmi \ + middle_end/compilenv.cmi \ + middle_end/closure/closure_middle_end.cmi \ + utils/clflags.cmi \ + middle_end/backend_intf.cmi \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmi \ + asmcomp/asmlink.cmi \ + asmcomp/asmgen.cmi \ + asmcomp/arch.cmo \ + toplevel/native/topeval.cmi +toplevel/native/topeval.cmx : \ + utils/warnings.cmx \ + typing/types.cmx \ + typing/typemod.cmx \ + typing/typedtree.cmx \ + typing/typecore.cmx \ + lambda/translmod.cmx \ + toplevel/topcommon.cmx \ + lambda/simplif.cmx \ + asmcomp/proc.cmx \ + typing/printtyped.cmx \ + typing/printtyp.cmx \ + lambda/printlambda.cmx \ + typing/predef.cmx \ + parsing/parsetree.cmi \ + typing/outcometree.cmi \ + utils/misc.cmx \ + parsing/location.cmx \ + utils/load_path.cmx \ + lambda/lambda.cmx \ + typing/includemod.cmx \ + middle_end/flambda/import_approx.cmx \ + typing/ident.cmx \ + middle_end/flambda/flambda_middle_end.cmx \ + typing/env.cmx \ + utils/config.cmx \ + driver/compmisc.cmx \ + middle_end/compilenv.cmx \ + middle_end/closure/closure_middle_end.cmx \ + utils/clflags.cmx \ + middle_end/backend_intf.cmi \ + parsing/asttypes.cmi \ + parsing/ast_helper.cmx \ + asmcomp/asmlink.cmx \ + asmcomp/asmgen.cmx \ + asmcomp/arch.cmx \ + toplevel/native/topeval.cmi +toplevel/native/topeval.cmi : \ + toplevel/topcommon.cmi \ + parsing/parsetree.cmi +toplevel/native/topmain.cmo : \ + toplevel/toploop.cmi \ + toplevel/native/topeval.cmi \ + toplevel/topcommon.cmi \ + utils/misc.cmi \ + driver/main_args.cmi \ + parsing/location.cmi \ + driver/compmisc.cmi \ + driver/compenv.cmi \ + utils/clflags.cmi \ + toplevel/native/topmain.cmi +toplevel/native/topmain.cmx : \ + toplevel/toploop.cmx \ + toplevel/native/topeval.cmx \ + toplevel/topcommon.cmx \ + utils/misc.cmx \ + driver/main_args.cmx \ + parsing/location.cmx \ + driver/compmisc.cmx \ + driver/compenv.cmx \ + utils/clflags.cmx \ + toplevel/native/topmain.cmi +toplevel/native/topmain.cmi : +toplevel/native/trace.cmo : \ + typing/path.cmi \ + toplevel/native/trace.cmi +toplevel/native/trace.cmx : \ + typing/path.cmx \ + toplevel/native/trace.cmi +toplevel/native/trace.cmi : \ typing/types.cmi \ typing/path.cmi \ parsing/longident.cmi \ diff --git a/.gitattributes b/.gitattributes index 5961fef2..956d2136 100644 --- a/.gitattributes +++ b/.gitattributes @@ -46,7 +46,8 @@ *.md typo.missing-header README* typo.missing-header *.adoc typo.missing-header -stdlib/*.mld typo.missing-header +api_docgen/*.mld typo.missing-header +api_docgen/alldoc.tex typo.missing-header tools/mantis2gh_stripped.csv typo.missing-header *.adoc typo.long-line=may @@ -63,7 +64,6 @@ tools/mantis2gh_stripped.csv typo.missing-header # tools/ci/appveyor/appveyor_build.cmd only has missing-header because # dra27 too lazy to update check-typo to interpret Cmd-style comments! /tools/ci/appveyor/appveyor_build.cmd typo.very-long-line typo.missing-header typo.non-ascii -/tools/ci/appveyor/appveyor_build.sh typo.non-ascii /tools/ci/inria/bootstrap/remove-sinh-primitive.patch typo.prune /release-info/howto.md typo.missing-header typo.long-line /release-info/templates/*.md typo.missing-header typo.very-long-line=may @@ -72,7 +72,7 @@ tools/mantis2gh_stripped.csv typo.missing-header /.depend.menhir typo.prune # Makefiles may contain tabs -Makefile* typo.tab=may +Makefile* typo.makefile-whitespace=may asmcomp/*/emit.mlp typo.tab=may typo.long-line=may @@ -101,6 +101,8 @@ otherlibs/win32unix/readlink.c typo.long-line otherlibs/win32unix/stat.c typo.long-line otherlibs/win32unix/symlink.c typo.long-line +runtime/sak.c typo.non-ascii + stdlib/hashbang typo.white-at-eol typo.missing-lf testsuite/tests/** typo.missing-header typo.long-line=may @@ -110,6 +112,7 @@ testsuite/tests/misc-unsafe/almabench.ml typo.long-line testsuite/tests/tool-toplevel/strings.ml typo.utf8 testsuite/tests/win-unicode/*.ml typo.utf8 testsuite/tests/asmgen/immediates.cmm typo.very-long-line +testsuite/tests/generated-parse-errors/errors.* typo.very-long-line testsuite/tools/*.S typo.missing-header testsuite/tools/*.asm typo.missing-header testsuite/typing typo.missing-header @@ -150,6 +153,7 @@ menhir-bench.bash typo.missing-header typo.utf8 /tools/ci/appveyor/appveyor_build.cmd text eol=crlf +aclocal.m4 typo.tab configure.ac text eol=lf build-aux/compile text eol=lf build-aux/config.guess text eol=lf @@ -164,6 +168,7 @@ stdlib/sharpbang text eol=lf tools/autogen text eol=lf tools/ci/inria/remove-sinh-primitive.patch text eol=lf tools/check-typo text eol=lf +tools/check-symbol-names text eol=lf tools/ci-build text eol=lf tools/msvs-promote-path text eol=lf tools/gdb-macros text eol=lf @@ -171,7 +176,6 @@ tools/magic text eol=lf tools/make-opcodes text eol=lf tools/make-package-macosx text eol=lf tools/ocaml-objcopy-macosx text eol=lf -tools/ocamlmktop.tpl text eol=lf tools/ocamlsize text eol=lf tools/pre-commit-githook text eol=lf tools/markdown-add-pr-links.sh text eol=lf @@ -189,73 +193,23 @@ manual/tools/texexpand text eol=lf # Tests which include references spanning multiple lines fail with \r\n # endings, so use \n endings only, even on Windows. +testsuite/tests/backtrace/names.ml text eol=lf testsuite/tests/basic-modules/anonymous.ml text eol=lf -testsuite/tests/basic-more/morematch.ml text eol=lf -testsuite/tests/basic-more/robustmatch.ml text eol=lf -testsuite/tests/parsing/*.ml text eol=lf -testsuite/tests/docstrings/empty.ml text eol=lf +testsuite/tests/formatting/test_locations.ml text eol=lf testsuite/tests/functors/functors.ml text eol=lf +testsuite/tests/lib-dynlink-initializers/test10_main.ml text eol=lf +testsuite/tests/parsing/attributes.ml text eol=lf +testsuite/tests/parsing/extensions.ml text eol=lf +testsuite/tests/parsing/hash_ambiguity.ml text eol=lf +testsuite/tests/parsing/int_and_float_with_modifier.ml text eol=lf +testsuite/tests/parsing/pr6865.ml text eol=lf +testsuite/tests/parsing/quotedextensions.ml text eol=lf +testsuite/tests/parsing/shortcut_ext_attr.ml text eol=lf testsuite/tests/tool-ocamlc-stop-after/stop_after_parsing_impl.ml text eol=lf testsuite/tests/tool-ocamlc-stop-after/stop_after_parsing_intf.mli text eol=lf testsuite/tests/tool-ocamlc-stop-after/stop_after_typing_impl.ml text eol=lf -testsuite/tests/tool-toplevel/error_highlighting.ml text eol=lf -testsuite/tests/tool-toplevel/error_highlighting_use4.ml text eol=lf testsuite/tests/translprim/module_coercion.ml text eol=lf -testsuite/tests/typing-objects-bugs/pr3968_bad.ml text eol=lf -testsuite/tests/typing-ocamlc-i/pr7402.ml text eol=lf -testsuite/tests/typing-ocamlc-i/pervasives_leitmotiv.ml text eol=lf -testsuite/tests/typing-recmod/t12bad.ml text eol=lf -testsuite/tests/typing-safe-linking/b_bad.ml text eol=lf -testsuite/tests/warnings/w04.ml text eol=lf -testsuite/tests/warnings/w04_failure.ml text eol=lf -testsuite/tests/warnings/w32.ml text eol=lf - -# These are forced to \n to allow the Cygwin testsuite to pass on a + +# This is forced to \n to allow the Cygwin testsuite to pass on a # Windows-checkout -testsuite/tests/formatting/margins.ml text eol=lf -testsuite/tests/letrec-check/pr7706.ml text eol=lf -testsuite/tests/letrec-disallowed/disallowed.ml text eol=lf -testsuite/tests/letrec-disallowed/extension_constructor.ml text eol=lf -testsuite/tests/letrec-disallowed/float_block_allowed.ml text eol=lf -testsuite/tests/letrec-disallowed/float_block_disallowed.ml text eol=lf -testsuite/tests/letrec-disallowed/generic_arrays.ml text eol=lf -testsuite/tests/letrec-disallowed/lazy_.ml text eol=lf -testsuite/tests/letrec-disallowed/module_constraints.ml text eol=lf -testsuite/tests/letrec-disallowed/unboxed.ml text eol=lf -testsuite/tests/letrec-disallowed/pr7215.ml text eol=lf -testsuite/tests/letrec-disallowed/pr7231.ml text eol=lf -testsuite/tests/letrec-disallowed/pr7706.ml text eol=lf -testsuite/tests/lexing/uchar_esc.ml text eol=lf -testsuite/tests/match-exception-warnings/exhaustiveness_warnings.ml text eol=lf -testsuite/tests/tool-toplevel/pr7060.ml text eol=lf -testsuite/tests/typing-extension-constructor/test.ml text eol=lf -testsuite/tests/typing-extensions/extensions.ml text eol=lf -testsuite/tests/typing-extensions/open_types.ml text eol=lf -testsuite/tests/typing-objects/Exemples.ml text eol=lf -testsuite/tests/typing-objects/pr5619_bad.ml text eol=lf -testsuite/tests/typing-objects/pr6123_bad.ml text eol=lf -testsuite/tests/typing-objects/pr6907_bad.ml text eol=lf -testsuite/tests/typing-objects/Tests.ml text eol=lf -testsuite/tests/typing-pattern_open/pattern_open.ml text eol=lf -testsuite/tests/typing-private/private.ml text eol=lf -testsuite/tests/typing-recordarg/recordarg.ml text eol=lf -testsuite/tests/typing-short-paths/pr5918.ml text eol=lf -testsuite/tests/typing-sigsubst/sigsubst.ml text eol=lf -testsuite/tests/typing-typeparam/newtype.ml text eol=lf -testsuite/tests/typing-unboxed/test.ml text eol=lf -testsuite/tests/typing-unboxed-types/test.ml text eol=lf -testsuite/tests/typing-unboxed-types/test_flat.ml text eol=lf -testsuite/tests/typing-unboxed-types/test_no_flat.ml text eol=lf -testsuite/tests/typing-warnings/ambiguous_guarded_disjunction.ml text eol=lf -testsuite/tests/typing-warnings/application.ml text eol=lf -testsuite/tests/typing-warnings/coercions.ml text eol=lf -testsuite/tests/typing-warnings/exhaustiveness.ml text eol=lf -testsuite/tests/typing-warnings/pr6587.ml text eol=lf -testsuite/tests/typing-warnings/pr6872.ml text eol=lf -testsuite/tests/typing-warnings/pr7085.ml text eol=lf -testsuite/tests/typing-warnings/pr7115.ml text eol=lf -testsuite/tests/typing-warnings/pr7261.ml text eol=lf -testsuite/tests/typing-warnings/pr7297.ml text eol=lf -testsuite/tests/typing-warnings/pr7553.ml text eol=lf -testsuite/tests/typing-warnings/records.ml text eol=lf -testsuite/tests/typing-warnings/unused_types.ml text eol=lf +testsuite/tests/parsetree/locations_test.ml text eol=lf diff --git a/.github/workflows/main.yml b/.github/workflows/build.yml similarity index 66% rename from .github/workflows/main.yml rename to .github/workflows/build.yml index 5dc0daeb..8a508ad0 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/build.yml @@ -1,4 +1,4 @@ -name: main +name: Build on: [push, pull_request] @@ -26,7 +26,7 @@ jobs: sudo apt-get update -y && sudo apt-get install -y gcc-multilib gfortran-multilib - name: configure tree run: | - XARCH=i386 CONFIG_ARG='--disable-stdlib-manpages --disable-shared' bash -xe tools/ci/actions/runner.sh configure + XARCH=i386 CONFIG_ARG='--disable-stdlib-manpages --disable-shared --enable-cmm-invariants' bash -xe tools/ci/actions/runner.sh configure - name: Build run: | bash -xe tools/ci/actions/runner.sh build @@ -44,16 +44,18 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + with: + fetch-depth: 50 - name: Packages run: | - sudo apt-get update -y && sudo apt-get install -y texlive-latex-extra texlive-fonts-recommended + sudo apt-get update -y && sudo apt-get install -y texlive-latex-extra texlive-fonts-recommended hevea sass # Ensure that make distclean can be run from an empty tree - name: distclean run: | MAKE_ARG=-j make distclean - name: configure tree run: | - MAKE_ARG=-j XARCH=x64 CONFIG_ARG='--enable-flambda --enable-dependency-generation' OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh configure + MAKE_ARG=-j XARCH=x64 CONFIG_ARG='--enable-flambda --enable-cmm-invariants --enable-dependency-generation' OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh configure - name: Build run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh build @@ -66,6 +68,26 @@ jobs: - name: Install run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh install + - name: Check for manual changes + id: manual + run: >- + tools/ci/actions/check-manual-modified.sh + '${{ github.ref }}' + '${{ github.event_name }}' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + '${{ github.event.ref }}' + '${{ github.event.before }}' + '${{ github.event.ref }}' + '${{ github.event.after }}' + '${{ github.event.repository.full_name }}' + - name: Build the manual + run: | + MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh manual + # Temporarily disabled 23-Apr-2021 while Dune isn't building + if: steps.manual.outputs.changed == 'disabled' - name: Other checks run: | MAKE_ARG=-j OCAMLRUNPARAM=b,v=0 bash -xe tools/ci/actions/runner.sh other-checks diff --git a/.github/workflows/hygiene.yml b/.github/workflows/hygiene.yml new file mode 100644 index 00000000..e76ba6b9 --- /dev/null +++ b/.github/workflows/hygiene.yml @@ -0,0 +1,95 @@ +name: Hygiene +on: + push: + pull_request: + types: [opened, synchronize, reopened, labeled, unlabeled] + +jobs: + hygiene: + name: Checks + runs-on: ubuntu-latest + steps: + - name: GitHub Context + run: echo $GITHUB_CONTEXT + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + # Comment out the line below to enable (debugging) display of the github + # context variable. + if: failure() + + - uses: actions/checkout@v2 + with: + fetch-depth: 50 + + - name: Changes updated + run: >- + tools/ci/actions/check-changes-modified.sh + '${{ github.ref }}' + 'pull_request' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + if: >- + !contains(github.event.pull_request.labels.*.name, 'no-change-entry-needed') + && github.event_name == 'pull_request' + + - name: configure correctly generated + run: >- + tools/ci/actions/check-configure.sh + '${{ github.ref }}' + '${{ github.event_name }}' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + '${{ github.event.ref }}' + '${{ github.event.before }}' + '${{ github.event.ref }}' + '${{ github.event.after }}' + if: ${{ always() }} + + - name: check-typo revered + run: >- + tools/ci/actions/check-typo.sh + '${{ github.ref }}' + '${{ github.event_name }}' + '${{ github.event.pull_request.base.ref }}' + '${{ github.event.pull_request.base.sha }}' + '${{ github.event.pull_request.head.ref }}' + '${{ github.event.pull_request.head.sha }}' + '${{ github.event.ref }}' + '${{ github.event.before }}' + '${{ github.event.ref }}' + '${{ github.event.after }}' + if: ${{ always() }} + + - name: check-typo on whole tree + run: tools/check-typo + if: >- + github.event_name == 'push' + && (startsWith(github.event.ref, 'refs/heads/4.') + || github.event.ref == 'refs/heads/trunk') + && always() + + - name: Check that labelled/unlabelled .mli files are in sync + run: tools/ci/actions/check-labelled-interfaces.sh + if: always() + + # This step records the build success in the variable build-status, + # allowing the last two steps to skip, rather than go beserk with a + # faulty compiler. + - name: Build a minimal compiler for alldepend + id: compiler + run: tools/ci/actions/runner.sh basic-compiler + if: always() + + - name: Check that dependency info is up-to-date + run: tools/ci/actions/check-alldepend.sh + if: steps.compiler.outputs.build-status == 'success' && always() + + - name: Check global structure of the reference manual + run: | + # Required configuration info is left-over from the previous step + make -C manual/tests check-stdlib check-case-collision + if: steps.compiler.outputs.build-status == 'success' && always() diff --git a/.gitignore b/.gitignore index 466edf57..cd5bf11c 100644 --- a/.gitignore +++ b/.gitignore @@ -48,6 +48,7 @@ _build /ocaml-*.cache /config.log /config.status +/flexlink.opt /libtool /ocamlc.opt /expunge @@ -67,8 +68,10 @@ _build /asmcomp/CSE.ml /boot/ocamlrun +/boot/ocamlruns /boot/camlheader /boot/ocamlc.opt +/boot/flexlink.byte /bytecomp/opcodes.ml /bytecomp/opcodes.mli @@ -81,6 +84,8 @@ _build /emacs/ocamltags /emacs/*.elc +/flexdll-sources + /lambda/runtimedef.ml /lex/parser.ml @@ -90,8 +95,12 @@ _build /lex/ocamllex.opt /lex/parser.output -/manual/manual/cmds/warnings-help.etex -/manual/manual/warnings-help.etex +/manual/src/cmds/warnings-help.etex +/manual/src/warnings-help.etex + +/api_docgen/build +/api_docgen/odoc/build +/api_docgen/ocamldoc/build /ocamldoc/ocamldoc /ocamldoc/ocamldoc.opt @@ -105,10 +114,6 @@ _build /ocamldoc/odoc_text_lexer.ml /ocamldoc/odoc_text_parser.ml /ocamldoc/odoc_text_parser.mli -/ocamldoc/stdlib_man -/ocamldoc/stdlib_html -/ocamldoc/stdlib_latex -/ocamldoc/stdlib_texi /ocamldoc/*.output /ocamldoc/test_stdlib /ocamldoc/test_latex @@ -175,6 +180,7 @@ _build /parsing/parser.output /parsing/parser.automaton /parsing/parser.conflicts +/parsing/parser.auto.messages /parsing/camlinternalMenhirLib.ml /parsing/camlinternalMenhirLib.mli @@ -192,6 +198,8 @@ _build /runtime/ld.conf /runtime/.gdb_history /runtime/.dep +/runtime/build_config.h +/runtime/sak /runtime/domain_state32.inc /runtime/domain_state64.inc @@ -247,7 +255,6 @@ _build /tools/keywords /tools/ocamlmklib /tools/ocamlmklib.opt -/tools/ocamlmklibconfig.ml /tools/ocamlcmt /tools/ocamlcmt.opt /tools/cmpbyt @@ -259,6 +266,13 @@ _build /tools/caml-tex /tools/eventlog_metadata +/toplevel/byte/topeval.mli +/toplevel/byte/trace.mli +/toplevel/byte/topmain.mli +/toplevel/native/topeval.mli +/toplevel/native/trace.mli +/toplevel/native/topmain.mli + /utils/config.ml /utils/domainstate.ml /utils/domainstate.mli diff --git a/.mailmap b/.mailmap index 8eec8afa..730ac07b 100644 --- a/.mailmap +++ b/.mailmap @@ -28,10 +28,21 @@ cvs2svn Damien Doligez Some Name Damien Doligez doligez Mohamed Iguernelala -Jérémie Dimino +Jérémie Dimino +Jérémie Dimino Jeremy Yallop yallop Nicolás Ojeda Bär - +Nicolás Ojeda Bär +François Pottier +Jérôme Vouillon +Frédéric Bour +Frédéric Bour +Armaël Guéneau +Armaël Guéneau +Armaël Guéneau +Edwin Török +Edwin Török +Edwin Török ### Approved Approvers diff --git a/BOOTSTRAP.adoc b/BOOTSTRAP.adoc index e73d01fe..70db0d0e 100644 --- a/BOOTSTRAP.adoc +++ b/BOOTSTRAP.adoc @@ -31,8 +31,8 @@ Here is how to perform a change that requires a bootstrap: safer. Similarly, `make world.opt` will also bring you to such a stable state but builds more things than actually required.) -4. Now, and only now, edit the sources. Changes here may include adding, - removing or renaming a primitive in the runtime, changing the magic +4. Now, and only now, edit the sources. Changes here may include removing + or renaming a primitive in the runtime, changing the magic number of bytecode executable files, changing the way types are represented or anything else in the format of .cmi files, etc. @@ -53,10 +53,57 @@ This will rebuild runtime/ocamlrun, ocamlc, etc. make bootstrap += Problems + If you notice that this procedure fails for a given change you are trying to implement, please report it so that the procedure can be updated to also cope with your change. += Upstreaming + If you want to upstream your changes, indicate in the message of the commit that the changes need a bootstrap. Perform the bootstrap and commit the result of the bootstrap separately, after that commit. + += Adding, removing and renaming primitives + +Primitives can be added without having to bootstrap, however it is necessary +to repeat `make coldstart` in order to use your new primitive in the standard +library. + +There are five steps to renaming a primitive: + +1. Rename the primitive and its uses + +2. Create a temporary stub with the old primitive's name. This stub simply + passes its arguments on to the new primitive: + + CAMLprim value caml_old_primitive(value a1, value a2) { + return caml_new_primitive(a1, a2); + } + +3. Deal with the addition of the new primitive: + + make coldstart + +4. Ensure the system still works: + + make coreall + +5. Now remove the old primitive stub and issue: + + make bootstrap + +It is desirable for bootstraps to be easily repeatable, so you should commit +changes after step 4. + += Bootstrap test script + +A script is provided (and used on Inria's continuous +integration infrastructure) to make sure the bootstrap works. This +script implements the bootstrap procedure described above and performs +two changes to the compiler: it updates the magic numbers and removes +a primitive from the runtime. It then makes sure the bootstrap still +works after these changes. This script can be run locally as follows: + + OCAML_ARCH=linux ./tools/ci/inria/bootstrap diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 22e630b9..6663229e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -66,10 +66,7 @@ contribution. You should not leave trailing whitespace; not have line longer than 80 columns, not use tab characters (spaces only), and not use non-ASCII characters. These typographical rules can be checked with the script -`tools/check-typo`. - -If you are working from a Git clone, you can automate this process by -copying the file `tools/pre-commit-githook` to `.git/hooks/pre-commit`. +`tools/check-typo`, see [HACKING.adoc: check-typo](HACKING.adoc#check-typo). Otherwise, there are no strongly enforced guidelines specific to the compiler -- and, as a result, the style may differ in the different @@ -341,51 +338,9 @@ log -u` to make sure the rebase patches make sense), but: ## Contributing to the standard library -Contributions to the standard library are very welcome. There is some -widespread belief in the community than the stdlib is somehow "frozen" -and that its evolutions are mostly driven by the need of the OCaml -compiler itself. Let's be clear: this is just plain wrong. The -compiler is happy with its own local utility functions, and many -recent additions to the stdlib are not used by the compiler. - -Another common and wrong idea is that core OCaml maintainers don't -really care about the standard library. This is not true, and won't -be unless one of the "alternative standard" libraries really gains -enough "market share" in the community. - -So: please contribute! - -Obviously, the proposals to evolve the standard library will be -evaluated with very high standards, similar to those applied to the -evolution of the surface langage, and much higher than those for -internal compiler changes (optimizations, etc). - -A key property of the standard library is its stability. Backward -compatibility is not an absolute technical requirement (any addition -to/of a module can break existing code, formally), but breakage should -be limited as much as possible (and assessed, when relevant). A -corollary is that any addition creates a long-term support commitment. -For instance, once a concrete type or function is made public, -changing the exposed definition cannot be done easily. - -There is no plan to extend dramatically the functional domain covered -by the standard library. For instance, proposals to include support -for XML, JSON, or network protocols are very likely to be rejected. Such -domains are better treated by external libraries. Small additions to -existing modules are much simpler to get in, even more so (but not -necessarily) when: - - - they cannot easily be implemented externally, or when - - they facilitate communication between independent external - libraries, or when - - they fill obvious gaps. - -Of course, standard guidelines apply as well: proper documentation, -proper tests, portability (yes, also Windows!), good justification for -why the change is desirable and why it should go into stdlib. - -So: be prepared for some serious review process! But yes, yes, -contributions are welcome and appreciated. Promised. +Contributions to the standard library are very welcome. +See the dedicated [stdlib/CONTRIBUTING.md](stdlib/CONTRIBUTING.md) +for more information. ## Contributing optimizations diff --git a/Changes b/Changes index f7e2b2cd..cf020c89 100644 --- a/Changes +++ b/Changes @@ -1,23 +1,654 @@ -OCaml 4.12.1 (24 September 2021) +OCaml 4.13.0 (24 September 2021) -------------------------------- -### Bug fixes: +### Progress towards Multicore: + +- #10039: Safepoints + Add poll points to native generated code. These are effectively + zero-sized allocations and fix some signal and remembered set + issues. Also multicore prerequisite. + (Sadiq Jaffer, Stephen Dolan, Damien Doligez, Xavier Leroy, + Anmol Sahoo, Mark Shinwell, review by Damien Doligez, Xavier Leroy, + and Mark Shinwell) + +- #9876: do not cache the young_limit GC variable in a processor register. + This affects the ARM64, PowerPC and RISC-V ports, making signal handling + and minor GC triggers more reliable, at the cost of a small slowdown. + (Xavier Leroy, review by Nicolás Ojeda Bär) + +### Language features (highlights): + +- #9584, #7074: Allow to name existentials in pattern-matching + One can now write '(Cstr (type a) (x, y : int * a))' to give a name to + existentials freshly introduced by GADT constructors. + (Jacques Garrigue, review by Leo White and Gabriel Scherer) + +### Compiler user-interface and warnings (highlights): + +- #9331: Improve error messages for functor application and functor types. + (Florian Angeletti and Gabriel Radanne, review by Leo White) + +* #10118, #10140: enable warning 6 [labels-omitted] by default. + The following now warns: + let f ~x y = ... in f 3 5 + the callsite (f 3 5) has to be turned into (f ~x:3 5). + This prevents mistakes where two arguments of the same types are swapped. + (Note: Dune already enables this warning by default.) + (Gabriel Scherer, review by Xavier Leroy and Florian Angeletti, + report by ygrek) + +### Manual and documentation (highlights): + +- #10247: Add initial tranche of examples to reference manual. + Adds some eighty examples to the reference manual, principally to the + expressions and patterns sections. + https://ocaml.org/releases/4.13/manual/patterns.html + (John Whitington, review by Xavier Leroy, Gabriel Scherer, @Fourchaux, and + Florian Angeletti) + +- #9987, #9988, #9996, #9997: add an odoc mode for the documentation + of the standard library and compiler library + (Florian Angeletti, review by David Allsopp, Sébastien Hinderer, + and Gabriel Scherer) + +### Standard library (highlights): + +- #944: Add some missing C99 float operations. `Stdlib` now contains + the inverse hyperbolic functions + `acosh`, `asinh`, and `atanh`. + These functions were also added to module `Stdlib.Float` together with + `exp2`, `log2`, `cbrt`, `erf`, and `erfc`. + Full support on MSVC requires VS2013+ but emulated versions are + still available (for now) for older compilers. + (Markus Mottl, review by David Allsopp, Olivier Andrieu, Florian Angeletti, + Nicolás Ojeda Bär, Daniel Bünzli, Fabian @copy, Pascal Cuoq, Damien + Doligez, Sébastien Hinderer, Jacques-Henri Jourdan, Xavier Leroy, Guillaume + Melquiond, Perry E. Metzger, Runhang Li, Gabriel Scherer, Mark Shinwell, + Bernhard Schommer and Christophe Troestler) + +- #9582: Add Array.{find_opt,find_map,split,combine}. + (Nicolás Ojeda Bär, review by Daniel Bünzli and Gabriel Scherer) + +- #9533: Added String.starts_with and String.ends_with. + (Bernhard Schommer, review by Daniel Bünzli, Gabriel Scherer and + Alain Frisch) + +### Code generation and optimizations (highlights): + +- #10404: Add a generic backward dataflow analyzer and use it to speed up + liveness analysis + (Xavier Leroy, review by Gabriel Scherer, Greta Yorsh, Mark Shinwell) + +- #10414: Avoid compilation times exponential in the nesting of loops + in the spilling and reloading passes + (Xavier Leroy, review by Vincent Laviron) + +### Internal typechecker changes (highlights): + +- #10170: Maintain more structural information in type-checking errors + A mostly-internal change that preserves more information in errors + during type checking; most significantly, it split the errors from + unification, moregen, and type equality into three different types. + (Antal Spector-Zabusky and Mekhrubon Tuarev, review by Leo White, + Florian Angeletti, and Jacques Garrigue) + +- #9994: Make Types.type_expr a private type, and abstract marking mechanism + (Jacques Garrigue and Takafumi Saikawa, + review by Gabriel Scherer and Leo White) + +### Runtime system (highlights): + +- #10188, #10213: Switch the default allocation policy to best-fit and adjust + the default overhead parameter accordingly. + (Damien Doligez, review by Josh Berdine and Xavier Leroy) + +- #10549: Stack overflow detection and naked pointers checking for ARM64 + (Xavier Leroy, review by Stephen Dolan) + +- #9934: Optimise sweeping using prefetching. + (Stephen Dolan and Will Hasenplaugh, review by David Allsopp, Xavier + Leroy and Damien Doligez, benchmarking by Shubham Kumar and KC + Sivaramakrishnan) + +- #10194: Change compaction-triggering heuristic: use the overhead measured + by the previous GC cycle instead of an indirect (and noisy) computation + of the current overhead. + (Damien Doligez, review by Stephen Dolan) + +- #10449: Fix major GC work accounting (the GC was running too fast). + (Damien Doligez, report by Stephen Dolan, review by Nicolás Ojeda Bär and + Sadiq Jaffer) + + +### Language features: + +- #10013: Let-punning + Allow 'let* x in ...' and 'let%ext x in ...' as shorthand for + 'let* x = x in ...' and 'let%ext x = x in ...' respectively. + (Stephen Dolan, review by Gabriel Scherer) + +- #10133: module type substitutions + Allow 'SIG with module type T = F(X).S', 'SIG with module type T := sig end' + and their local equivalent `module type T := sig type u end` + (Florian Angeletti, review by Gabriel Radanne and Leo White) + +### Type system: + +* #10081: Typecheck `x |> f` and `f @@ x` as `(f x)` + (Alain Frisch, review by Jacques Garrigue, Josh Berdine and Thomas Refis) + +### Runtime system: + +- #10318: Windows Unicode runtime functions are no longer marked as + experimental. + (Nicolás Ojeda Bär, review by David Allsopp) + +- #9284: Add -config option to display the configuration of ocamlrun on stdout, + including the search path for shared stub libraries. + (David Allsopp, review by Xavier Leroy) + +- #9919: Introduce caml_record_backtraces and update Interfacing with C to + refer to it (previous instruction to use caml_record_backtrace primitive was + not possible without defining CAML_INTERNALS) + (David Allsopp, review by Xavier Leroy) + +- #10102: Ignore PROFINFO_WIDTH if WITH_PROFINFO is not defined (technically + a breaking change if the configuration system was being abused before). + (David Allsopp, review by Xavier Leroy) - #10107: Ensure modules compiled with -afl-instrument can still link on platforms without AFL support. (David Allsopp, review by Xavier Leroy) +* #10098: Improve command-line parsing in ocamlrun: strictly recognise options, + be more informative for `ocamlrun -I` and support `--` for terminating options + parsing. + (David Allsopp, review by Xavier Leroy) + +- #10101: Add -help/--help option to ocamlrun. + (David Allsopp, review by Xavier Leroy) + +- #10136: Minor clean-ups in runtime/io.c and runtime/caml/io.h + (Xavier Leroy, review by David Allsopp and Guillaume Munch-Maccagnoni) + +- #10171: Tweak the naked pointers checker so that processes which trigger the + alarm always exit with non-zero status (i.e. exit(0) becomes exit(70)). + (David Allsopp, review by Xavier Leroy) + +- #10212: Simplify and improve the Windows-specific code that connects + to the debugger via a socket. + (Antonin Décimo, review by Xavier Leroy) + +- #10217: Fix a segfault in a corner case of compaction (reported in #9853) + (Damien Doligez, report by Sadiq Jaffer, review by Stephen Dolan) + +- #10250, #10266: Dynamically allocate alternate signal stacks to + accommodate changes in Glibc 2.34. + (Xavier Leroy, reports by Tomasz Kłoczko and R.W.M. Jones, review by Anil + Madhavapeddy, Stephen Dolan, and Florian Angeletti) + +### Code generation and optimizations: + +- #1400: Add an optional invariants check on Cmm, which can be activated + with the -dcmm-invariants flag + (Vincent Laviron, with help from Sebastien Hinderer, review by Stephen Dolan + and David Allsopp) + +- #9562, #367: Allow CSE of immutable loads across stores + (Stephen Dolan, review by Mark Shinwell) + +- #9937: improvements in ARM64 code generation (constants, sign extensions) + (Xavier Leroy, review by Stephen Dolan) + +- #10228: Better code-generation for inlined comparisons + (Stephen Dolan, review by Alain Frisch and Xavier Leroy) + +- #10244: Optimise Int32.unsigned_to_int + (Fabian Hemmer, review by Stephen Dolan and Xavier Leroy) + +- #10302, #10303: Fix incorrect instruction selection for string constant loads + on ppc. + (David Allsopp, review by Stephen Dolan) + +- #10349: Fix destroyed_at_c_call on RISC-V + (Mark Shinwell, review by Nicolás Ojeda Bär) + +- #10419: Add %frame_pointers primitive which is true only in native code with + frame pointers mode enabled. + (David Allsopp, review by Vincent Laviron and Mark Shinwell) + +### Standard library: + +- #9448: Add String.{empty,cat} as dual of Bytes.{empty,cat}, + String.{of,to}_bytes as aliases of Bytes.{to,of}_string, + Bytes.split_on_char as dual of String.split_on_char, and binary decoding + functions in String to match those in Bytes. + (David Allsopp, review by Damien Doligez, Gabriel Scherer and others) + +- #9487, #9489: Add Random.full_int which allows 62-bit bounds on 64-bit + systems. + (David Allsopp, request by Francois Berenger, review by Xavier Leroy and + Damien Doligez) + +- #9961: Add Array.fold_left_map. + (Craig Ferguson, review by Damien Doligez) + +- #10097: Lazy.map, Lazy.map_val: ('a -> 'b) -> 'a Lazy.t -> 'b Lazy.t + (map f x) is always (lazy (f (force x))), whereas (map_val f x) + applies f directly if x is already forced. + (Gabriel Scherer, review by Nicolás Ojeda Bär, Alain Frisch, Xavier Leroy, + Daniel Bünzli and Stephen Dolan) + +- #10242: Added convenience pretty printer for Either.t in the Format module. + (Oghenevwogaga Ebresafe, review by Nicolás Ojeda Bär, + Gabriel Scherer and Xavier Van de Woestyne) + +- #10352: Seq.(concat : 'a t t -> 'a t) + Seq.concat_map as an alias to Seq.flat_map, + (Gabriel Scherer, review by Ulugbek Abdullaev and Daniel Bünzli + and Nicolás Ojeda Bär and Florian Angeletti) + +- #882: Add fold_left, fold_right, exists and for_all to String/Bytes + (Yotam Barnoy, review by Alain Frisch and Jeremy Yallop) + +- #4070, #10398: small optimization of Stdlib.{frexp,modf}. + (Markus Mottl, Nicolás Ojeda Bär, review by Gabriel Scherer) + +- #10389, #10391, #10392: Add {Int,Int32,Int64,Nativeint}.{min,max}. + (Nicolás Ojeda Bär and Alain Frisch, review by Xavier Leroy) + +- #10430: Add Format.print_bytes and Format.pp_print_bytes. + (Gabriel Radanne, review by Gabriel Scherer and David Allsopp) + +### Other libraries: + +* #10084: Unix.open_process_args* functions now look up the program in the PATH. + This was already the case under Windows, but this is now also done under + Unix. Note that previously the program was interpreted relative to the current + directory. + (Nicolás Ojeda Bär, review by Gabriel Scherer and Xavier Leroy) + +- #10047: Add `Unix.realpath` + (Daniel Bünzli, review by David Allsopp, Josh Berdine and Gabriel Scherer) + +- #10184: Remove expensive debug assertion from dynlink. + (Leo White, review by David Allsopp and Xavier Leroy) + +- #10185: Consider that IPv6 is always enabled on Windows. + (Antonin Décimo, review by David Allsopp and Xavier Leroy) + +- #10306: Map WSA error code to Unix errno for sockopt and getsockname + functions (Antonin Décimo, review by David Allsopp) + +- #10309: Properly return EBADF on error in Unix.descr_of_{in,out}_channel on + Win32 and map Windows error correctly in Unix.truncate and Unix.ftruncate on + Win32. + (David Allsopp, review by Nicolás Ojeda Bär) + +### Tools: + +- #10139: Adds a -nonavbar option to ocamldoc, to remove confusing + 'Up', 'Previous' and 'Next' links + (John Whitington, review by David Allsopp) + +- #8645, #10363: ocamldoc: escape `<`, `>`, and `&` in html backend. + (Florian Angeletti, report by Wim Lewis, review by Gabriel Scherer) + +### Manual and documentation: + +- #9525, #10402: document that ocamldoc only creates paragraphs + at the toplevel of documentation comments + (Florian Angeletti, report by Hendrik Tews, review by Gabriel Scherer) + +- #10206: Split labels and polymorphic variants tutorials in two. + Moves the GADTs tutorial from the Language Extensions chapter + to the tutorials. + (John Whitington, review by Florian Angeletti and Xavier Leroy) + +- #9786, #10181: improved documentation of Unix.{in,out}_channel_of_descr + with respect to closing. + (Xavier Leroy, report by Jacques-Henri Jourdan, review by Guillaume + Munch-Maccagnoni, Gabriel Scherer, Jacques-Henri Jourdan) + +- #10139: Use the new -nonavbar option to improve navigation within + the reference manual stdlib documentation. + (John Whitington, review by David Allsopp) + +- #1351: Document `-output-complete-obj` option in the manual. + (François Bobot, Nicolás Ojeda Bär, review by Daniel Bünzli and Damien + Doligez) + +- #9632: Document incremental build solutions with opam + (Vincent Laviron, review by Daniel Bünzli and Gabriel Scherer) + +- #10497: Styling changes in the post-processed HTML manual (webman) + (Wiktor Kuchta, review by Florian Angeletti) + +- #10605: manual, name few css classes to ease styling and maintainability. + (Florian Angeletti, review by Wiktor Kuchta and Gabriel Scherer) + +### Compiler user-interface and warnings: + +- #1737, #2092, #7852, #7859, #10405, #10417: Update locations during + destructive substitutions + (Thomas Refis, review by Gabriel Radanne, report by Hugo Heuzard) + +- #2245: Improve error message for link order error in bytecode + (Pierre Chambart, review by Jérémie Dimino and Gabriel Scherer) + +- #8732, improved error messages for invalid private row type definitions. + For instance, [ type t = private [< `A > `A ] ] . + (Florian Angeletti, review by Jacques Garrigue, Thomas Refis, + and Gabriel Scherer) + +- #9407: optional warning for missing mli interface file + (Anukriti Kumar, review by Florian Angeletti) + +- #9960, #10619: extend ocamlc/ocamlopt's -o option to work when + compiling C files + (Sébastien Hinderer, reported by Daniel Bünzli, review by + Florian Angeletti and Gabriel Scherer) + +- #10095: minor simplifications to some syntax error messages. + (François Pottier, review by Gabriel Scherer and Frédéric Bour.) + +- #10196, #10197: better error message on empty character literals ''. + (Gabriel Scherer, review by David Allsopp and Florian Angeletti + and Daniel Bünzli, report by Robin Björklin) + +- #8877: Call the linker when ocamlopt is invoked with .o and .a files only. + (Greta Yorsh, review by Leo White) + +- #10207, #10312: deprecate consecutive letters in warning + specifications. + The form `-w aBcD` was equivalent to `-w -a+b-c+d`. + It is now deprecated to improve the coexistence with warning mnemonics. + However, using isolated single letter is not deprecated to allow the form + `-w "A-32..50-45"`. + (Florian Angeletti, review by Damien Doligez and Gabriel Scherer) + +- #10232: Warning for unused record fields. + (Leo White, review by Florian Angeletti) + +### Internal/compiler-libs changes: + +- #9243, simplify parser rules for array indexing operations + (Florian Angeletti, review by Damien Doligez and Gabriel Scherer) + +- #9650, #9651: keep refactoring the pattern-matching compiler + (Gabriel Scherer, review by Thomas Refis and Florian Angeletti) + +- #9827: Replace references with functions arguments in Simplif + (Anukriti Kumar, review by Vincent Laviron and David Allsop) + +- #10007: Driver.compile_common: when typing a .ml file, return the + compilation unit signature (inferred or from the .cmi) in addition + to the implementation and the coercion. + (Leandro Ostera, review by Gabriel Scherer and Thomas Refis) + +- #10045: Add libext variable to ocamltest and enable C# tests on on mingw + (David Allsopp, review by Gabriel Scherer) + +* #10061, #10078, #10187: remove library `ocamlopttoplevel`, remove modules + `Opttoploop`, `Opttopstart`, which are replaced by `Toploop` and `Topstart` in + library `ocamltoplevel`, made available in native code. + (Louis Gesbert, review by Jeremie Dimino, Mark Shinwell and Gabriel Radanne) + +- #10124: remove duplicated code from the native toplevel, split toplevel + implementation into the shared part (`Topcommon`, etc.) and specific ones + (`Topeval`, `Trace`, `Topmain`). + (Louis Gesbert, review by Jeremie Dimino and Gabriel Radanne) + +- #10086: add the commands `make list-parse-errors` and `make + generate-parse-errors` to generate a set of syntactically incorrect + sentences that covers all error states of the LR automaton. Add these + sentences to the test suite. This can be used to evaluate the quality of the + parser's syntax error messages and (in the future) to evaluate the impact of + changes in the parser. + (François Pottier, review by Gabriel Scherer and Xavier Leroy.) + +- #10090: Distinguished constructors for ref variables at lambda level + (Keryan Didier, review by Gabriel Scherer and Vincent Laviron) + +- #10113: add a `-timeout` option to ocamltest and use it in the test suite. + (Xavier Leroy and Gabriel Scherer, review by Sébastien Hinderer + and David Allsopp) + +* #10169, #10270, #10301, #10451: Use capitalized module names in the Standard + Library prefixing scheme to match Dune, e.g. Stdlib__String instead of + Stdlib__string. This is a breaking change only to code which attempted to use + the internal names before. The Standard Library generated by the Dune rules is + now equivalent to the main build (the Dune rules still do not generate a + distributable compiler). + (David Allsopp and Mark Shinwell, review by Gabriel Scherer) + +- #10327: Add a subdirectories variable and a copy action to ocamltest + (Sébastien Hinderer, review by David Allsopp) + +- #10358: Use a hash table for the load path. + (Leo White, review by Gabriel Scherer) + +- #8936: Per-function environment for Emit + (Greta Yorsh, review by Vincent Laviron and Florian Angeletti) + +- #10543: Fix Ast_mapper to apply the mapping function to the constants in + "interval" patterns `c1..c2`. + (Guillaume Petiot, review by Gabriel Scherer and Nicolás Ojeda Bär) + +### Internal typechecker changes: + +- #10174: Make Tsubst more robust by avoiding strange workarounds + (Takafumi Saikawa and Jacques Garrigue, review by Gabriel Scherer and + Florian Angeletti) + +- #10265: Move type_unboxed.unboxed into type_kind + (Stephen Dolan, review by Gabriel Scherer) + +- #10307: Refactor type_description in the typing env + (Nicolas Chataing, review by Takafumi Saikawa, Florian Angeletti and Thomas + Refis) + +- #10311: Separate the constraint-solving part of Typecore.type_pat into + specific solver functions. + (Jacques Garrigue and Takafumi Saikawa, review by Gabriel Scherer) + +- #10428: Make build_other_constrs work with names instead of tags. + (Nicolas Chataing, review by Florian Angeletti) + +### Build system: + +- #10332, #10333: Generate lambda/runtimedef.ml correctly in Swedish locale. + (the letter 'w' is not included in '[a-z]' in sv_SE.UTF-8) + (David Allsopp, report by Anders Jackson, review by Florian Angeletti and + Gabriel Scherer) + +- #10289, #10406: Do not print option documentation in usage messages. + (Pavlo Khrystenko, review by Gabriel Scherer, fix by Kate Deplaix) + +- #9191, #10091, #10182: take the LDFLAGS variable into account, except on + flexlink-using systems. + (Gabriel Scherer, review by Sébastien Hinderer and David Allsopp, + report by Ralph Seichter) + +- #10135: Overhaul the FlexDLL bootstrap process. It's now fully integrated + with the default build target and controlled by --with-flexdll which allows + externally downloaded sources for FlexDLL to be specified. A separate + non-shared version of the runtime is built, and shared artefacts are no longer + built twice. When bootstrapping, any flexlink in PATH is now ignored and the + Cygwin port also supports bootstrapping FlexDLL. flexlink.opt is automatically + built and installed as part of opt.opt/world.opt. + (David Allsopp, review by Sébastien Hinderer) + +- #10156: configure script: fix sockets feature detection. + (Lucas Pluvinage, review by David Allsopp and Damien Doligez) + +- #10176, #10632: By default, call the assembler through the C compiler driver + (Sébastien Hinderer, review by Gabriel Scherer, David Allsopp and Xavier + Leroy) + +- #10186: configure wasn't using library link flags when searching for + network functions on systems where they're not in libc. Fix IPv6 and + socklen_t detection on Windows. + (Antonin Décimo, review by David Allsopp and Sébastien Hinderer) + +- #10366: Make it possible to use the OCAMLRUN variable to specify + which runtime to use while building the compilers (Sébastien Hinderer, + review by David Allsopp) + +- #10451, #10635: Replace the use of iconv with a C utility to convert $(LIBDIR) + to a C string constant on Windows when building the runtime. Hardens the + generation of the constant on Unix for paths with backslashes, double-quotes + and newlines. + (David Allsopp, review by Florian Angeletti and Sébastien Hinderer) + +- #10471: Fix detection of arm32 architectures with musl in configure. + (Louis Gesbert, review by David Allsopp) + +### Bug fixes: + +- #6654, #9774, #10401: make `include` and with `constraints` handle correctly + the ghost components of signatures. For instance, in + + include struct class c = object end end type c + + the type `c` shadows the `class c` to avoid shadowing only the ghost type + c introduced by the class. + (Florian Angeletti, report by Eduardo Rafael, review by Gabriel Scherer) + +- #6985, #10385: remove all ghost row types from included modules + (Florian Angeletti, review by Gabriel Scherer) + +- #7453, #9828, #10416: fix #show for recursive types and modules + (Florian Angeletti, review by Gabriel Scherer) + +* #7469, #10408: Sys.time now returns processor time on Windows (previously + returned wall-clock time) + (David Allsopp, review by Nicolás Ojeda Bär) + +* #8857, #10220: Don't clobber GetLastError() in caml_leave_blocking_section + when the systhreads library is loaded. + (David Allsopp, report by Anton Bachin, review by Xavier Leroy) + +- #8575, #10362: Surprising interaction between polymorphic variants and + constructor disambiguation. + (Jacques Garrigue, report and review by Thomas Refis) + +- #8917, #8929, #9889, #10219: fix printing of nested recursive definitions + in presence of a name collision. + (Florian Angeletti, report by Thomas Refis, review by Gabriel Scherer) + +- #10005: Try expanding aliases in Ctype.nondep_type_rec + (Stephen Dolan, review by Gabriel Scherer, Leo White and Xavier Leroy) + +- #10072, #10085: Check that sizes and offsets in stack frame descriptors + do not overflow the 16-bit fields where they are stored. + (Xavier Leroy, report by Github user pveber, review by Gabriel Scherer) + +- #10087, #10138: In the toplevel REPL, don't use the cache + of included directories, so that files created or deleted while + the REPL is running are correctly handled. + (Xavier Leroy, report by Github user quakerquickoats, review by + Jeremie Dimino) + - #10294, #10295: fix an assert-failure in pattern-matching compilation (Gabriel Scherer, review by Thomas Refis and Luc Maranget, report by Nicolás Ojeda Bär) -- #10310: configure's --enable-spacetime option now causes an error rather than - being silently ignored. - (David Allsopp, review by Gabriel Scherer) +- #10147, #10148: Fix building runtime with GCC on macOS. + (David Allsopp, report by John Skaller) + +- #10166: Fix illegal permutation error reporting in module aliases. + (Matthew Ryan, review by Florian Angeletti) + +- #10189, #10190, #10347: Universal variables leaking through GADT equations + (Jacques Garrigue, report and review by Leo White) + +- #10205: Avoid overwriting closures while initialising recursive modules + (Stephen Dolan, review by Xavier Leroy, Hugo Heuzard and Vincent Laviron) + +- #10253, #10373: tweak error message for unknown variant constructors + or record fields in type-directed disambiguation + (Florian Angeletti, report by Hongbo Zhang, review by Gabriel Scherer) + +* #10277, #10383: Need to detect ambiguity recursively inside types to + guarantee principality (affects only principal mode) + (Jacques Garrigue, review by Thomas Refis, Leo White and Kate Deplaix) + +- #10283, #10284: Enforce right-to-left evaluation order for Lstaticraise + (Vincent Laviron, report by Github user Ngoguey42, review by Gabriel Scherer) + +- #10298, #10305: Incorrect propagation of type equalities in functor + application + (Jacques Garrigue, report and review by Didier Remy) + +- #10324, #10325: Prevent generation of Lsend(Cached, _) in bytecode + (Vincent Laviron, report by Yawar Amin and Nicolás Ojeda Bär, review by + Jacques Garrigue) + +- #10338, #10340: Translcore.push_defaults does not respect scoping + (Jacques Garrigue, report and review by Stephen Dolan) - #10351: Fix DLL loading with binutils 2.36+ on mingw-w64 (David Allsopp, review by Nicolás Ojeda Bär) +- #10339, #10354, #10387: Fix handling of exception-raising specific + operations during spilling and liveness analysis. + (This bug affects ARM and ARM64.) + In passing, refactor Proc.op_is_pure and Mach.operation_can_raise. + (Xavier Leroy, report by Richard Bornat, review by Stephen Dolan + and Mark Shinwell) + +- #10371: no longer generatd useless `.cds` file when using + `-output-complete-exe`. + (Nicolás Ojeda Bär, review by David Allsopp) + +- #10376: Link runtime libraries correctly on msvc64 in -output-complete-obj + (David Allsopp, review by Gabriel Scherer) + +- #10380: Correct handling of UTF-8 paths in configure on Windows + (David Allsopp, review by Sébastien Hinderer) + +- #10450, #10558: keep %apply and %revapply primitives working with abstract + types. This breach of backward compatibility was only present in the alpha + releases of OCaml 4.13.0 . + (Florian Angeletti, review by Thomas Refis and Leo White) + +- #10454: Check row_more in nondep_type_rec. + (Leo White, review by Thomas Refis) + +- #10468: Correctly pretty print local type substitution, e.g. type t := ..., + with -dsource + (Matt Else, review by Florian Angeletti) + +- #10461, #10498: `caml_send*` helper functions take derived pointers + as arguments. Those must be declared with type Addr instead of Val. + Moreover, poll point insertion must be disabled for `caml_send*`, + otherwise the derived pointer is live across a poll point. + (Vincent Laviron and Xavier Leroy, review by Xavier Leroy and Sadiq Jaffer) + +- #10511: Cygwin ports now correctly configure when flexdll is not available. + (David Allsopp, review by Florian Angeletti) + +- #10550, #10551: fix pretty-print of gadt-pattern-with-type-vars + (Chet Murthy, review by Gabriel Scherer) + +- #10584, #10856: Standard Library documentation build no longer fails if + optional libraries have been disabled. + (David Allsopp, report by Yuri Victorovich review by Florian Angeletti) + +- #10593: Fix untyping of patterns without named existential quantifiers. This + bug was only present in the beta version of OCaml 4.13.0. + (Ulysse Gérard, review by Florian Angeletti) + +- #10603, #10611: Fix if condition marked as inconstant in flambda + (Vincent Laviron and Pierre Chambart, report by Marcello Seri) + + +OCaml 4.12, maintenance version +------------------------------- + +### Bug fixes: + - #10442, #10446: Fix regression in the toplevel to #directory caused by corrections and improvements to the Load_path in #9611. #directory now adds the path to the start of the load path again (so files in the newly @@ -25,10 +656,6 @@ OCaml 4.12.1 (24 September 2021) (David Allsopp, report by Vasile Rotaru, review by Florian Angeletti and Nicolás Ojeda Bär) -- #10449: Fix major GC work accounting (the GC was running too fast). - (Damien Doligez, report by Stephen Dolan, review by Nicolás Ojeda Bär - and Sadiq Jaffer) - - #10478: Fix segfault under Windows due to a mistaken initialization of thread ID when a thread starts. (David Allsopp, Nicolás Ojeda Bär, review by Xavier Leroy) @@ -38,12 +665,6 @@ OCaml 4.12.1 (24 September 2021) reject the ocamlopt-generated code. (Xavier Leroy, report by Dave Aitken, review by Vincent Laviron) -### Manual and documentation - -- #10497: Styling changes in the post-processed HTML manual (webman) - (Wiktor Kuchta, review by Florian Angeletti) - - OCaml 4.12.0 (24 February 2021) ------------------------------- @@ -895,6 +1516,9 @@ OCaml 4.11.0 (19 August 2020) - #9392: Visit registers at most once in Coloring.iter_preferred. (Stephen Dolan, review by Pierre Chambart and Xavier Leroy) +- #9412: Keep Sys.opaque_identity in Cmm and Mach + (Stephen Dolan, review by Mark Shinwell and Gabriel Scherer) + - #9549, #9557: Make -flarge-toc the default for PowerPC and introduce -fsmall-toc to enable the previous behaviour. (David Allsopp, report by Nathaniel Wesley Filardo, review by Xavier Leroy) diff --git a/HACKING.adoc b/HACKING.adoc index a3212b3c..21ab534d 100644 --- a/HACKING.adoc +++ b/HACKING.adoc @@ -144,7 +144,7 @@ result by running make html_doc ---- -and then opening link:./ocamldoc/stdlib_html/index.html[] in a web browser. +and then opening link:./api_docgen/build/html/libref/index.html[] in a web browser. === Tools @@ -167,7 +167,6 @@ has excellent documentation. LICENSE:: license and copyright notice Makefile:: main Makefile Makefile.common:: common Makefile definitions - Makefile.tools:: used by manual/ and testsuite/ Makefiles README.adoc:: general information on the compiler distribution README.win32.adoc:: general information on the Windows ports of OCaml VERSION:: version string. Run `make configure` after changing. @@ -189,6 +188,7 @@ has excellent documentation. ocamltest/:: test driver otherlibs/:: several additional libraries parsing/:: syntax analysis -- see link:parsing/HACKING.adoc[] + release-info/:: documentation and tools to prepare releases runtime/:: bytecode interpreter and runtime systems stdlib/:: standard library testsuite/:: tests -- see link:testsuite/HACKING.adoc[] @@ -224,8 +224,8 @@ If you are working on a development version of the compiler, you can create an opam switch from it by running the following from the development repository: ----- --opam switch create . --empty --opam install . +opam switch create . --empty +opam install . ----- If you want to test someone else's development version from a public @@ -238,6 +238,142 @@ opam switch create my-switch-name --empty opam pin add ocaml-variants.$VERSION+branch git+https://$REPO#branch ---- +==== Incremental builds with `opam` + +This section documents some tips to speed up your workflow when you need to +alternate between testing your branch and patching the compiler. +We'll assume that you're currently in a clone of the compiler's source code. + +===== Initial setup + +For the rest of the section to work, you'll need your compiler to be +configured in the same way as `opam` would have configured it. The simplest +way is to run the normal commands for the switch initialization, with the extra +`--inplace-build` flag: + +----- +opam switch create . --empty +opam install . --inplace-build +----- + +However, if you need specific configuration options, you can also configure it +manually, as long as you make sure that the configuration prefix is the one +where `opam` would install the compiler. +You will then need to install the compiler, either from the working directory +(that you must build yourself) or using the regular sandboxed builds. + +----- +# Example with regular opam build +opam switch create . --empty +opam install . +./configure --prefix=$(opam var prefix) # put extra configuration args here +----- + +----- +# Example with installation from the current directory, installing only the +# bytecode versions of the tools +opam switch create . --empty +./configure --prefix=$(opam var prefix) # put extra configuration args here +make world && make opt +opam install . --assume-built +----- + +===== Basic workflow + +We will assume that the workflow alternates between work on the compiler and +external (`opam`-related) commands. +As an example, debugging an issue in the compiler can be done by a first step +that triggers the issue (by installing a given `opam` package), then adding +some logging to the compiler, re-trigger the issue, and based on the logs either +add more logging, or try a patch, and so on. + +The part of this workflow that we're going to optimize is when we switch from +working on the compiler to using the compiler. The basic way to do this is to +run `opam install .` again, but this will recompile the compiler from scratch +and also trigger a recompilation of all the packages in the switch. + +===== Using `opam-custom-install` + +The `opam-custom-install` plugin allows you to install a package using a custom +command instead of the package-supplied one. It can be installed following +instructions https://gitlab.ocamlpro.com/louis/opam-custom-install[here]. + +In our case, we need to build the compiler, and when we've built everything +that we need then we run `opam custom-install ocaml-variants -- make install`. +This will make `opam` remove the previously installed version of the compiler +(if any), then install the new one in its stead. + +----- +# reinstall the compiler, and rebuild all opam packages +opam custom-install ocaml-variants -- make install +----- + +Since most `opam` packages depend on the compiler, this will trigger a +reinstallation of all the packages in the switch. +If you want to avoid that (for instance, your patch only adds some logging +so you expect the core libraries and all the already compiled packages to be +identical), you can use the additional `--no-recompilations` flag. +There are no checks that it's safe to do so, so if your patch ends up +changing even slightly one of the core libraries' files, you will likely +get inconsistent assumptions errors later. + +----- +# reinstall the compiler, leaving the opam packages untouched -- unsafe! +opam custom-install --no-recompilations ocaml-variants -- make install +----- + +Note aout the first installation: +When you start from an empty switch, and install a compiler (in our case, +tha `ocaml-variants` package provided by the compiler's `opam` file), then +a number of additional packages are installed to ensure that the switch +will work correctly. Mainly, the `ocaml` package needs to be installed, +and while it's done automatically when using regular `opam` commands, the +`custom-install` plugin will not force installation of dependencies. +Moreover, if you try to fix the problem by manually installing the `ocaml` +package, `opam` will try to recompile `ocaml-variants`, using the default +instructions. You can get around this by running +`opam reinstall --forget-pending` just after the `opam custom-install` command +and just before the `opam install ocaml command`. +Full example: + +----- +opam switch create . --empty +./configure --prefix=$(opam var prefix) --disable-ocamldoc --disable-ocamltest +make world && make opt +opam custom-install ocaml-variants -- make install +opam reinstall --forget-pending --yes +opam install ocaml +# You now have a working switch, in which you can start installing packages +----- + +One advantage of this plugin over a plain `make install` is that it +correctly tracks the files associated with the compiler, so if your +`make install` command only installs the bytecode versions of the tools, +then with `opam-custom-install` you will end up in a state where only the +bytecode tools are installed, whereas with a raw `make install` you will have +stale native binaries remaining in your switch. +Since it's significantly faster to build the bytecode version of the tools, +and many `opam` packages will pick the native version of the compilers if +present and the bytecode version otherwise, you can build your initial switch +with the native versions (to get quickly to a state where a bug appears), +then clean your working directory and start building bytecode tools only +for the actual debugging phase. + +===== Without `opam-custom-install` + +You can achieve some improvements using built-in `opam` commands. + +Using `opam install . --assume-built` will simply remove the +package for the compiler, then run the installation instructions +(`make install`) in the working directory, tracking the installed files +correctly. The main difference with the `opam-custom-install` version +is that there's no way to prevent this command from triggering a full +recompilation of your switch. + +You can also run `make install` manually, which will not trigger a +recompilation, but will not remove the previous version either and can +mess with `opam`'s tracking of installed files. + === Useful Makefile targets Besides the targets listed in link:INSTALL.adoc[] for build and @@ -361,33 +497,77 @@ most packages are incompatible with the in-progress development version. === Continuous integration -==== Github's CI: Travis and AppVeyor +[#check-typo] +==== check-typo + +The `tools/check-typo` script enforces various typographical rules in the +OCaml compiler codebase. + +Running `./tools/check-typo` from the repository root will check all +source files. This can be fairly slow (2 minutes for example). Use +`./tools/check-typo ` to run it on some file or directory +(recursively) only. + +Running `./tools/check-typo-since trunk` checks all files that changed +in the commits since `trunk` -- this work with any git reference. It +runs much faster than a full `./tools/check-typo`, typically instantly. -The script that is run on Travis continuous integration servers is -link:tools/ci/travis/travis-ci.sh[]; its configuration can be found as -a Travis configuration file in link:.travis.yml[]. +You can also setup a git commit-hook to automatically run `check-typo` +on the changes you commit, by copying the file +`tools/pre-commit-githook` to `.git/hooks/pre-commit`. If changes in a commit +alter the `configure` script, the hook also checks that committed `configure` +script is up-to-date. + +Some files need special rules to opt out of `check-typo` checks; this +is specified in the `.gitattributes` file at the root of the +repository, using `typo.foo` attributes. + +==== GitHub's Continuous Integration: GitHub Actions and AppVeyor + +The scripts that are run on GitHub Actions are described in +link:.github/workflows/build.yml[]. For example, if you want to reproduce the default build on your machine, you can use the configuration values and run command taken from -link:.travis.yml[]: +link:tools/ci/actions/runner.sh[]: ---- -CI_KIND=build XARCH=x64 bash -ex tools/ci/travis/travis-ci.sh +XARCH=x64 bash -ex tools/ci/actions/runner.sh configure ---- -The scripts support two other kinds of tests (values of the -`CI_KIND` variable) which both inspect the patch submitted as part of -a pull request. `tests` checks that the testsuite has been modified -(hopefully, improved) by the patch, and `changes` checks that the -link:Changes[] file has been modified (hopefully to add a new entry). - -These tests rely on the `$TRAVIS_COMMIT_RANGE` variable which you can +The link:.github/workflows/hygiene.yml[] script supports other kinds of +tests which inspect the patch submitted as part of a pull request. These +tests rely on ancillary data generated by GitHub Actions which you have to set explicitly to reproduce them locally. -The `changes` check can be disabled by including "(no change -entry needed)" in one of your commit messages -- but in general all -patches submitted should come with a Changes entry; see the guidelines -in link:CONTRIBUTING.md[]. +`Changes updated` checks that the link:Changes[] file has been modified +(hopefully to add a new entry). It can be disabled by including "_(no change +entry needed)_" in one of your commit messages -- but in general all patches +submitted should come with a Changes entry; see the guidelines in +link:CONTRIBUTING.md[]. + +The Windows ports take a long time to test - INRIA's precheck service is the +best to use when all 6 Windows ports need testing for a branch, but the +AppVeyor scripts also support the other ports. The matrix is controlled by +the following environment variables, which should be set in link:appveyor.yml[]: + +- `PORT` - this must be set on each job. Either `mingw`, `msvc` or `cygwin` + followed by `32` or `64`. +- `BOOTSTRAP_FLEXDLL` - must be set on each job. Either `true` or `false`. + At present, must be `false` for Cygwin builds. Controls whether flexlink + is bootstrapped as part of the test or installed from a binary archive. +- `FORCE_CYGWIN_UPGRADE`. Default: `0`. Set to `1` to force an upgrade of + Cygwin packages as part of the build. Normally a full upgrade is only + triggered if the packages installed require it. +- `BUILD_MODE`. Default: `world.opt`. Either `world.opt`, `steps`, or `C`. + Controls whether the build uses the `world.opt` target or the classic + `world`, `opt`, `opt.opt` targets. The `C` build is a fast test used to + build just enough of the tree to cover the C sources (it's used to test + old MSVC compilers). +- `SDK`. Defaults to Visual Studio 2015. Specifies the exact command to run + to set-up the Microsoft build environment. +- `CYGWIN_DIST`. Default: `64`. Either `64` or `32`, selects 32-bit or 64-bit + Cygwin as the build environment. ==== INRIA's Continuous Integration (CI) diff --git a/INSTALL.adoc b/INSTALL.adoc index 0ad38fc6..42d9f59d 100644 --- a/INSTALL.adoc +++ b/INSTALL.adoc @@ -33,7 +33,7 @@ The `configure` script accepts options that can be discovered by running: ./configure --help + -Some options or variables like (LDFLAGS) may not be taken into account +Some options or variables like LDLIBS may not be taken into account by the OCaml build system at the moment. Please report an issue if you discover such a variable or option and this causes troubles to you. + @@ -45,9 +45,7 @@ Examples: * On a Linux x86-64 host, to build a 32-bit version of OCaml: - ./configure --build=x86_64-pc-linux-gnu --host=i386-linux \ - CC='gcc -m32' AS='as --32' ASPP='gcc -m32 -c' \ - PARTIALLD='ld -r -melf_i386' + ./configure --build=x86_64-pc-linux-gnu --host=i686-linux-gnu * For AIX 7.x with the IBM compiler `xlc`: @@ -166,3 +164,12 @@ and sanity checks that could help you pinpoint the problem. * On HP 9000/700 machines under HP/UX 9, some versions of `cc` are unable to compile correctly the runtime system (wrong code is generated for `(x - y)` where `x` is a pointer and `y` an integer). Fix: use `gcc`. + +* In the unlikely case that a platform does not offer all C99 float operations + that the runtime needs, a configuration error will result. Users + can work around this problem by calling `configure` with the flag + `--enable-imprecise-c99-float-ops`. This will enable simple but potentially + imprecise implementations of C99 float operations. Users with exacting + requirements for mathematical accuracy, numerical precision, and proper + handling of mathematical corner cases and error conditions may need to + consider running their code on a platform with better C99 support. diff --git a/Makefile b/Makefile index 41d8e263..8d8f1b41 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,10 @@ # The main Makefile ROOTDIR = . +# NOTE: it is important that OCAMLLEX is defined *before* Makefile.common +# gets included, so that its definition here takes precedence +# over the one there. +OCAMLLEX ?= $(BOOT_OCAMLLEX) include Makefile.common .PHONY: defaultentry @@ -34,16 +38,17 @@ endif include stdlib/StdlibModules CAMLC=$(BOOT_OCAMLC) -g -nostdlib -I boot -use-prims runtime/primitives -CAMLOPT=$(CAMLRUN) ./ocamlopt$(EXE) -g -nostdlib -I stdlib -I otherlibs/dynlink +CAMLOPT=$(OCAMLRUN) ./ocamlopt$(EXE) -g -nostdlib -I stdlib -I otherlibs/dynlink ARCHES=amd64 i386 arm arm64 power s390x riscv INCLUDES=-I utils -I parsing -I typing -I bytecomp -I file_formats \ -I lambda -I middle_end -I middle_end/closure \ -I middle_end/flambda -I middle_end/flambda/base_types \ - -I asmcomp -I asmcomp/debug \ + -I asmcomp \ -I driver -I toplevel -COMPFLAGS=-strict-sequence -principal -absname -w +a-4-9-40-41-42-44-45-48-66 \ - -warn-error A \ +COMPFLAGS=-strict-sequence -principal -absname \ + -w +a-4-9-40-41-42-44-45-48-66-70 \ + -warn-error +a \ -bin-annot -safe-string -strict-formats $(INCLUDES) LINKFLAGS= @@ -53,8 +58,7 @@ else OCAML_NATDYNLINKOPTS = -ccopt "$(NATDYNLINKOPTS)" endif -CAMLLEX=$(CAMLRUN) boot/ocamllex -CAMLDEP=$(CAMLRUN) boot/ocamlc -depend +CAMLDEP=$(OCAMLRUN) boot/ocamlc -depend DEPFLAGS=-slash DEPINCLUDES=$(INCLUDES) @@ -67,8 +71,10 @@ OPTSTART=driver/optmain.cmo TOPLEVELSTART=toplevel/topstart.cmo -OPTTOPLEVELSTART=toplevel/opttopstart.cmo +TOPLEVELINIT=toplevel/toploop.cmo +# This list is passed to expunge, which accepts both uncapitalized and +# capitalized module names. PERVASIVES=$(STDLIB_MODULES) outcometree topdirs toploop LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader @@ -76,29 +82,20 @@ LIBFILES=stdlib.cma std_exit.cmo *.cmi camlheader COMPLIBDIR=$(LIBDIR)/compiler-libs TOPINCLUDES=$(addprefix -I otherlibs/,$(filter-out %threads,$(OTHERLIBRARIES))) -RUNTOP=./runtime/ocamlrun$(EXE) ./ocaml$(EXE) \ - -nostdlib -I stdlib -I toplevel \ - -noinit $(TOPFLAGS) $(TOPINCLUDES) -NATRUNTOP=./ocamlnat$(EXE) \ - -nostdlib -I stdlib -I toplevel \ - -noinit $(TOPFLAGS) $(TOPINCLUDES) ifeq "$(UNIX_OR_WIN32)" "unix" EXTRAPATH= else EXTRAPATH = PATH="otherlibs/win32unix:$(PATH)" endif -BOOT_FLEXLINK_CMD= -ifeq "$(UNIX_OR_WIN32)" "win32" -FLEXDLL_SUBMODULE_PRESENT := $(wildcard flexdll/Makefile) -ifeq "$(FLEXDLL_SUBMODULE_PRESENT)" "" +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" + COLDSTART_DEPS = BOOT_FLEXLINK_CMD = else + COLDSTART_DEPS = boot/ocamlruns$(EXE) BOOT_FLEXLINK_CMD = \ - FLEXLINK_CMD="../boot/ocamlrun$(EXE) ../flexdll/flexlink.exe" -endif -else + FLEXLINK_CMD="../boot/ocamlruns$(EXE) ../boot/flexlink.byte$(EXE)" endif expunge := expunge$(EXE) @@ -135,13 +132,51 @@ programs := expunge ocaml ocamlc ocamlc.opt ocamlnat ocamlopt ocamlopt.opt $(foreach program, $(programs), $(eval $(call PROGRAM_SYNONYM,$(program)))) +USE_RUNTIME_PRIMS = -use-prims ../runtime/primitives +USE_STDLIB = -nostdlib -I ../stdlib + +FLEXDLL_OBJECTS = \ + flexdll_$(FLEXDLL_CHAIN).$(O) flexdll_initer_$(FLEXDLL_CHAIN).$(O) +FLEXLINK_BUILD_ENV = \ + MSVC_DETECT=0 OCAML_CONFIG_FILE=../Makefile.config \ + CHAINS=$(FLEXDLL_CHAIN) ROOTDIR=.. + +boot/ocamlruns$(EXE): + $(MAKE) -C runtime ocamlruns$(EXE) + cp runtime/ocamlruns$(EXE) boot/ocamlruns$(EXE) + # Start up the system from the distribution compiler +# The process depends on whether FlexDLL is also being bootstrapped. +# Normal procedure: +# - Build the runtime +# - Build the standard library using runtime/ocamlrun +# FlexDLL procedure: +# - Build ocamlruns +# - Build the standard library using boot/ocamlruns +# - Build flexlink and FlexDLL support objects +# - Build the runtime +# runtime/ocamlrun is then installed to boot/ocamlrun and the stdlib artefacts +# are copied to boot/ .PHONY: coldstart -coldstart: +coldstart: $(COLDSTART_DEPS) +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" + $(MAKE) -C runtime all + $(MAKE) -C stdlib \ + OCAMLRUN='$$(ROOTDIR)/runtime/ocamlrun$(EXE)' \ + CAMLC='$$(BOOT_OCAMLC) $(USE_RUNTIME_PRIMS)' all +else + $(MAKE) -C stdlib OCAMLRUN='$$(ROOTDIR)/boot/ocamlruns$(EXE)' \ + CAMLC='$$(BOOT_OCAMLC)' all + $(MAKE) -C $(FLEXDLL_SOURCES) $(FLEXLINK_BUILD_ENV) \ + OCAMLRUN='$$(ROOTDIR)/boot/ocamlruns$(EXE)' NATDYNLINK=false \ + OCAMLOPT='$(value BOOT_OCAMLC) $(USE_RUNTIME_PRIMS) $(USE_STDLIB)' \ + flexlink.exe support + mv $(FLEXDLL_SOURCES)/flexlink.exe boot/flexlink.byte$(EXE) + cp $(addprefix $(FLEXDLL_SOURCES)/, $(FLEXDLL_OBJECTS)) boot/ $(MAKE) -C runtime $(BOOT_FLEXLINK_CMD) all +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" cp runtime/ocamlrun$(EXE) boot/ocamlrun$(EXE) - $(MAKE) -C stdlib $(BOOT_FLEXLINK_CMD) \ - CAMLC='$$(BOOT_OCAMLC) -use-prims ../runtime/primitives' all + cd boot; rm -f $(LIBFILES) cd stdlib; cp $(LIBFILES) ../boot cd boot; $(LN) ../runtime/libcamlrun.$(A) . @@ -158,7 +193,7 @@ core: coldstart # Check if fixpoint reached -CMPBYT := $(CAMLRUN) tools/cmpbyt$(EXE) +CMPBYT := $(OCAMLRUN) tools/cmpbyt$(EXE) .PHONY: compare compare: @@ -188,7 +223,7 @@ promote-cross: promote-common # Promote the newly compiled system to the rank of bootstrap compiler # (Runs on the new runtime, produces code for the new runtime) .PHONY: promote -promote: PROMOTE = $(CAMLRUN) tools/stripdebug +promote: PROMOTE = $(OCAMLRUN) tools/stripdebug promote: promote-common cp runtime/ocamlrun$(EXE) boot/ocamlrun$(EXE) @@ -209,10 +244,12 @@ opt: checknative .PHONY: opt.opt opt.opt: checknative $(MAKE) checkstack - $(MAKE) runtime - $(MAKE) core + $(MAKE) coreall $(MAKE) ocaml $(MAKE) opt-core +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" + $(MAKE) flexlink.opt$(EXE) +endif $(MAKE) ocamlc.opt $(MAKE) otherlibraries $(WITH_DEBUGGER) $(WITH_OCAMLDOC) \ $(WITH_OCAMLTEST) @@ -237,7 +274,7 @@ coreboot: # Rebuild the library (using runtime/ocamlrun ./ocamlc) $(MAKE) library-cross # Promote the new compiler and the new runtime - $(MAKE) CAMLRUN=runtime/ocamlrun$(EXE) promote + $(MAKE) OCAMLRUN=runtime/ocamlrun$(EXE) promote # Rebuild the core system $(MAKE) partialclean $(MAKE) core @@ -278,11 +315,15 @@ world.opt: checknative # Different git mechanism displayed depending on whether this source tree came # from a git clone or a source tarball. -flexdll/Makefile: - @echo In order to bootstrap FlexDLL, you need to place the sources in - @echo flexdll. +.PHONY: flexdll flexlink flexlink.opt + +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" +flexdll flexlink flexlink.opt: + @echo It is no longer necessary to bootstrap FlexDLL with a separate + @echo make invocation. Simply place the sources for FlexDLL in a + @echo sub-directory. @echo This can either be done by downloading a source tarball from - @echo \ http://alain.frisch.fr/flexdll.html + @echo \ https://github.com/alainfrisch/flexdll/releases @if [ -d .git ]; then \ echo or by checking out the flexdll submodule with; \ echo \ git submodule update --init; \ @@ -290,60 +331,42 @@ flexdll/Makefile: echo or by cloning the git repository; \ echo \ git clone https://github.com/alainfrisch/flexdll.git; \ fi + @echo "Then pass --with-flexdll= to configure and build as normal." @false -.PHONY: flexdll -flexdll: flexdll/Makefile flexlink - $(MAKE) -C flexdll \ - OCAML_CONFIG_FILE=../Makefile.config \ - MSVC_DETECT=0 CHAINS=$(FLEXDLL_CHAIN) NATDYNLINK=false support +else -# Bootstrapping flexlink - leaves a bytecode image of flexlink.exe in flexdll/ -FLEXLINK_OCAMLOPT = \ - ../boot/ocamlrun$(EXE) ../boot/ocamlc \ - -use-prims ../runtime/primitives -nostdlib -I ../boot +.PHONY: flexdll +flexdll: flexdll/Makefile + @echo WARNING! make flexdll is no longer required + @echo This target will be removed in a future release. .PHONY: flexlink -flexlink: flexdll/Makefile - $(MAKE) -C runtime BOOTSTRAPPING_FLEXLINK=yes ocamlrun$(EXE) - cp runtime/ocamlrun$(EXE) boot/ocamlrun$(EXE) - $(MAKE) -C stdlib \ - COMPILER="../boot/ocamlc -use-prims ../runtime/primitives" \ - $(filter-out *.cmi,$(LIBFILES)) - cd stdlib && cp $(LIBFILES) ../boot/ - $(MAKE) -C flexdll MSVC_DETECT=0 OCAML_CONFIG_FILE=../Makefile.config \ - CHAINS=$(FLEXDLL_CHAIN) NATDYNLINK=false \ - OCAMLOPT="$(FLEXLINK_OCAMLOPT)" \ - flexlink.exe - $(MAKE) -C runtime clean - $(MAKE) partialclean +flexlink: + @echo Bootstrapping just flexlink.exe is no longer supported + @echo Bootstrapping FlexDLL is now enabled with + @echo ./configure --with-flexdll + @false -.PHONY: flexlink.opt -flexlink.opt: - cd flexdll && \ - mv flexlink.exe flexlink && \ - ($(MAKE) OCAML_FLEXLINK="../boot/ocamlrun$(EXE) ./flexlink" \ - MSVC_DETECT=0 OCAML_CONFIG_FILE=../Makefile.config \ - OCAMLOPT="../ocamlopt.opt$(EXE) -nostdlib -I ../stdlib" \ - flexlink.exe || \ - (mv flexlink flexlink.exe && false)) && \ - mv flexlink.exe flexlink.opt && \ - mv flexlink flexlink.exe - -INSTALL_COMPLIBDIR=$(DESTDIR)$(COMPLIBDIR) -INSTALL_FLEXDLLDIR=$(INSTALL_LIBDIR)/flexdll - -.PHONY: install-flexdll -install-flexdll: - $(INSTALL_PROG) flexdll/flexlink.exe "$(INSTALL_BINDIR)/flexlink$(EXE)" -ifneq "$(filter-out mingw,$(TOOLCHAIN))" "" - $(INSTALL_DATA) flexdll/default$(filter-out _i386,_$(ARCH)).manifest \ - "$(INSTALL_BINDIR)/" +ifeq "$(wildcard ocamlopt.opt$(EXE))" "" + FLEXLINK_OCAMLOPT=../runtime/ocamlrun$(EXE) ../ocamlopt$(EXE) +else + FLEXLINK_OCAMLOPT=../ocamlopt.opt$(EXE) endif - if test -n "$(wildcard flexdll/flexdll_*.$(O))" ; then \ - $(MKDIR) "$(INSTALL_FLEXDLLDIR)" ; \ - $(INSTALL_DATA) flexdll/flexdll_*.$(O) "$(INSTALL_FLEXDLLDIR)" ; \ - fi + +flexlink.opt$(EXE): + $(MAKE) -C $(FLEXDLL_SOURCES) $(FLEXLINK_BUILD_ENV) \ + OCAML_FLEXLINK='$(value OCAMLRUN) $$(ROOTDIR)/boot/flexlink.byte$(EXE)' \ + OCAMLOPT="$(FLEXLINK_OCAMLOPT) -nostdlib -I ../stdlib" flexlink.exe + mv $(FLEXDLL_SOURCES)/flexlink.exe $@ + +partialclean:: + rm -f flexlink.opt$(EXE) +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" + +INSTALL_COMPLIBDIR = $(DESTDIR)$(COMPLIBDIR) +INSTALL_FLEXDLLDIR = $(INSTALL_LIBDIR)/flexdll +FLEXDLL_MANIFEST = default$(filter-out _i386,_$(ARCH)).manifest # Installation .PHONY: install @@ -373,6 +396,9 @@ endif driver/*.cmi \ toplevel/*.cmi \ "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + toplevel/byte/*.cmi \ + "$(INSTALL_COMPLIBDIR)" ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" $(INSTALL_DATA) \ utils/*.cmt utils/*.cmti utils/*.mli \ @@ -384,6 +410,9 @@ ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" driver/*.cmt driver/*.cmti driver/*.mli \ toplevel/*.cmt toplevel/*.cmti toplevel/*.mli \ "$(INSTALL_COMPLIBDIR)" + $(INSTALL_DATA) \ + toplevel/byte/*.cmt \ + "$(INSTALL_COMPLIBDIR)" endif $(INSTALL_DATA) \ compilerlibs/*.cma \ @@ -397,8 +426,8 @@ endif "$(INSTALL_LIBDIR)" ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" $(INSTALL_DATA) \ - toplevel/topdirs.cmt toplevel/topdirs.cmti \ - toplevel/topdirs.mli \ + toplevel/topdirs.cmt \ + toplevel/topdirs.cmti toplevel/topdirs.mli \ "$(INSTALL_LIBDIR)" endif $(MAKE) -C tools install @@ -411,21 +440,34 @@ endif done ifneq "$(WITH_OCAMLDOC)" "" $(MAKE) -C ocamldoc install +endif +ifeq "$(WITH_OCAMLDOC)-$(STDLIB_MANPAGES)" "ocamldoc-true" + $(MAKE) -C api_docgen install endif if test -n "$(WITH_DEBUGGER)"; then \ $(MAKE) -C debugger install; \ fi -ifeq "$(UNIX_OR_WIN32)" "win32" - if test -n "$(FLEXDLL_SUBMODULE_PRESENT)"; then \ - $(MAKE) install-flexdll; \ - fi +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" +ifeq "$(TOOLCHAIN)" "msvc" + $(INSTALL_DATA) $(FLEXDLL_SOURCES)/$(FLEXDLL_MANIFEST) \ + "$(INSTALL_BINDIR)/" endif +ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(INSTALL_PROG) \ + boot/flexlink.byte$(EXE) "$(INSTALL_BINDIR)/flexlink.byte$(EXE)" +endif # ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" + $(MKDIR) "$(INSTALL_FLEXDLLDIR)" + $(INSTALL_DATA) $(addprefix stdlib/flexdll/, $(FLEXDLL_OBJECTS)) \ + "$(INSTALL_FLEXDLLDIR)" +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" $(INSTALL_DATA) Makefile.config "$(INSTALL_LIBDIR)" ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" if test -f ocamlopt$(EXE); then $(MAKE) installopt; else \ cd "$(INSTALL_BINDIR)"; \ $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ + (test -f flexlink.byte$(EXE) && \ + $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ fi else if test -f ocamlopt$(EXE); then $(MAKE) installopt; fi @@ -454,9 +496,6 @@ endif $(INSTALL_DATA) \ asmcomp/*.cmi \ "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - asmcomp/debug/*.cmi \ - "$(INSTALL_COMPLIBDIR)" ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" $(INSTALL_DATA) \ middle_end/*.cmt middle_end/*.cmti \ @@ -479,10 +518,6 @@ ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" asmcomp/*.cmt asmcomp/*.cmti \ asmcomp/*.mli \ "$(INSTALL_COMPLIBDIR)" - $(INSTALL_DATA) \ - asmcomp/debug/*.cmt asmcomp/debug/*.cmti \ - asmcomp/debug/*.mli \ - "$(INSTALL_COMPLIBDIR)" endif $(INSTALL_DATA) \ $(OPTSTART) \ @@ -499,15 +534,13 @@ ifeq "$(INSTALL_BYTECODE_PROGRAMS)" "true" $(LN) ocamlc.byte$(EXE) ocamlc$(EXE); \ $(LN) ocamlopt.byte$(EXE) ocamlopt$(EXE); \ $(LN) ocamllex.byte$(EXE) ocamllex$(EXE); \ + (test -f flexlink.byte$(EXE) && \ + $(LN) flexlink.byte$(EXE) flexlink$(EXE)) || true; \ fi else if test -f ocamlopt.opt$(EXE); then $(MAKE) installoptopt; fi endif $(MAKE) -C tools installopt - if test -f ocamlopt.opt$(EXE) -a -f flexdll/flexlink.opt ; then \ - $(INSTALL_PROG) \ - flexdll/flexlink.opt "$(INSTALL_BINDIR)/flexlink$(EXE)" ; \ - fi .PHONY: installoptopt installoptopt: @@ -518,6 +551,11 @@ installoptopt: $(LN) ocamlc.opt$(EXE) ocamlc$(EXE); \ $(LN) ocamlopt.opt$(EXE) ocamlopt$(EXE); \ $(LN) ocamllex.opt$(EXE) ocamllex$(EXE) +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" + $(INSTALL_PROG) flexlink.opt$(EXE) "$(INSTALL_BINDIR)" + cd "$(INSTALL_BINDIR)"; \ + $(LN) flexlink.opt$(EXE) flexlink$(EXE) +endif $(INSTALL_DATA) \ utils/*.cmx parsing/*.cmx typing/*.cmx bytecomp/*.cmx \ file_formats/*.cmx \ @@ -526,7 +564,6 @@ installoptopt: middle_end/closure/*.cmx \ middle_end/flambda/*.cmx \ middle_end/flambda/base_types/*.cmx \ - asmcomp/debug/*.cmx \ "$(INSTALL_COMPLIBDIR)" $(INSTALL_DATA) \ compilerlibs/*.cmxa compilerlibs/*.$(A) \ @@ -538,10 +575,9 @@ installoptopt: if test -f ocamlnat$(EXE) ; then \ $(INSTALL_PROG) ocamlnat$(EXE) "$(INSTALL_BINDIR)"; \ $(INSTALL_DATA) \ - toplevel/opttopdirs.cmi \ - "$(INSTALL_LIBDIR)"; \ - $(INSTALL_DATA) \ - $(OPTTOPLEVELSTART:.cmo=.cmx) $(OPTTOPLEVELSTART:.cmo=.$(O)) \ + toplevel/*.cmx \ + toplevel/native/*.cmx \ + $(TOPLEVELSTART:.cmo=.$(O)) \ "$(INSTALL_COMPLIBDIR)"; \ fi cd "$(INSTALL_COMPLIBDIR)" && \ @@ -555,7 +591,8 @@ ifeq "$(INSTALL_SOURCE_ARTIFACTS)" "true" utils/*.ml parsing/*.ml typing/*.ml bytecomp/*.ml driver/*.ml \ file_formats/*.ml \ lambda/*.ml \ - toplevel/*.ml middle_end/*.ml middle_end/closure/*.ml \ + toplevel/*.ml toplevel/byte/*.ml \ + middle_end/*.ml middle_end/closure/*.ml \ middle_end/flambda/*.ml middle_end/flambda/base_types/*.ml \ asmcomp/*.ml \ asmcmp/debug/*.ml \ @@ -611,38 +648,43 @@ ocaml_dependencies := \ .INTERMEDIATE: ocaml.tmp ocaml.tmp: $(ocaml_dependencies) - $(CAMLC) $(LINKFLAGS) -linkall -o $@ $^ + $(CAMLC) $(LINKFLAGS) -I toplevel/byte -linkall -o $@ $^ ocaml$(EXE): $(expunge) ocaml.tmp - - $(CAMLRUN) $^ $@ $(PERVASIVES) + - $(OCAMLRUN) $^ $@ $(PERVASIVES) partialclean:: rm -f ocaml$(EXE) +# Use TOPFLAGS to pass additional flags to the bytecode or native toplevel +# when running make runtop or make natruntop +TOPFLAGS ?= +OC_TOPFLAGS = -nostdlib -I stdlib -I toplevel -noinit $(TOPINCLUDES) $(TOPFLAGS) + +# Note: Beware that, since this rule begins with a coldstart, both +# boot/ocamlrun and runtime/ocamlrun will be the same when the toplevel +# is run. .PHONY: runtop runtop: $(MAKE) coldstart $(MAKE) ocamlc $(MAKE) otherlibraries $(MAKE) ocaml - @$(EXTRAPATH) $(RLWRAP) $(RUNTOP) + @$(EXTRAPATH) $(RLWRAP) $(OCAMLRUN) ./ocaml$(EXE) $(OC_TOPFLAGS) .PHONY: natruntop natruntop: $(MAKE) core $(MAKE) opt $(MAKE) ocamlnat - @$(FLEXLINK_ENV) $(EXTRAPATH) $(RLWRAP) $(NATRUNTOP) + @$(FLEXLINK_ENV) $(EXTRAPATH) $(RLWRAP) ./ocamlnat$(EXE) $(OC_TOPFLAGS) # Native dynlink otherlibs/dynlink/dynlink.cmxa: otherlibs/dynlink/native/dynlink.ml $(MAKE) -C otherlibs/dynlink allopt -# The lexer - -parsing/lexer.ml: parsing/lexer.mll - $(CAMLLEX) $(OCAMLLEX_FLAGS) $< +# Cleanup the lexer partialclean:: rm -f parsing/lexer.ml @@ -709,7 +751,7 @@ cvt_emit := tools/cvt_emit$(EXE) asmcomp/emit.ml: asmcomp/$(ARCH)/emit.mlp $(cvt_emit) echo \# 1 \"$(ARCH)/emit.mlp\" > $@ - $(CAMLRUN) $(cvt_emit) < $< >> $@ \ + $(OCAMLRUN) $(cvt_emit) < $< >> $@ \ || { rm -f $@; exit 2; } partialclean:: @@ -731,9 +773,20 @@ partialclean:: # The runtime system for the bytecode compiler +$(SAK): + $(MAKE) -C runtime sak$(EXE) + .PHONY: runtime runtime: stdlib/libcamlrun.$(A) +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "true" +runtime: $(addprefix stdlib/flexdll/, $(FLEXDLL_OBJECTS)) +stdlib/flexdll/flexdll%.$(O): $(FLEXDLL_SOURCES)/flexdll%.$(O) | stdlib/flexdll + cp $< $@ +stdlib/flexdll: + $(MKDIR) $@ +endif + .PHONY: makeruntime makeruntime: $(MAKE) -C runtime $(BOOT_FLEXLINK_CMD) all @@ -778,7 +831,7 @@ library: ocamlc .PHONY: library-cross library-cross: $(MAKE) -C stdlib \ - $(BOOT_FLEXLINK_CMD) CAMLRUN=../runtime/ocamlrun$(EXE) all + $(BOOT_FLEXLINK_CMD) OCAMLRUN=../runtime/ocamlrun$(EXE) all .PHONY: libraryopt libraryopt: @@ -846,7 +899,7 @@ parsing/parser.mli: boot/menhir/parser.mli beforedepend:: parsing/camlinternalMenhirLib.ml \ parsing/camlinternalMenhirLib.mli \ - parsing/parser.ml parsing/parser.mli + parsing/parser.ml parsing/parser.mli partialclean:: partialclean-menhir @@ -875,16 +928,19 @@ partialclean:: .PHONY: html_doc html_doc: ocamldoc - $(MAKE) -C ocamldoc $@ - @echo "documentation is in ./ocamldoc/stdlib_html/" + $(MAKE) -C api_docgen html + @echo "documentation is in ./api_docgen/html/" .PHONY: manpages manpages: - $(MAKE) -C ocamldoc $@ + $(MAKE) -C api_docgen man partialclean:: $(MAKE) -C ocamldoc clean +partialclean:: + $(MAKE) -C api_docgen clean + # The extra libraries .PHONY: otherlibraries @@ -926,13 +982,12 @@ endif # Check that the stack limit is reasonable (Unix-only) .PHONY: checkstack ifeq "$(UNIX_OR_WIN32)" "unix" -checkstack := tools/checkstack -checkstack: $(checkstack)$(EXE) +checkstack: tools/checkstack$(EXE) $< -.INTERMEDIATE: $(checkstack)$(EXE) $(checkstack).$(O) -$(checkstack)$(EXE): $(checkstack).$(O) - $(MKEXE) $(OUTPUTEXE)$@ $< +.INTERMEDIATE: tools/checkstack$(EXE) tools/checkstack.$(O) +tools/checkstack$(EXE): tools/checkstack.$(O) + $(MAKE) -C tools $(BOOT_FLEXLINK_CMD) checkstack$(EXE) else checkstack: @ @@ -1004,21 +1059,33 @@ endif ocamlnat$(EXE): compilerlibs/ocamlcommon.cmxa compilerlibs/ocamloptcomp.cmxa \ compilerlibs/ocamlbytecomp.cmxa \ otherlibs/dynlink/dynlink.cmxa \ - compilerlibs/ocamlopttoplevel.cmxa \ - $(OPTTOPLEVELSTART:.cmo=.cmx) - $(CAMLOPT_CMD) $(LINKFLAGS) -linkall -o $@ $^ + compilerlibs/ocamltoplevel.cmxa \ + $(TOPLEVELSTART:.cmo=.cmx) + $(CAMLOPT_CMD) $(LINKFLAGS) -linkall -I toplevel/native -o $@ $^ + + +toplevel/topdirs.cmx: toplevel/topdirs.ml + $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< + +$(TOPLEVELINIT:.cmo=.cmx): $(TOPLEVELINIT:.cmo=.ml) \ + toplevel/native/topeval.cmx + $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< + +$(TOPLEVELSTART:.cmo=.cmx): $(TOPLEVELSTART:.cmo=.ml) \ + toplevel/native/topmain.cmx + $(CAMLOPT_CMD) $(COMPFLAGS) $(OPTCOMPFLAGS) -I toplevel/native -c $< partialclean:: rm -f ocamlnat ocamlnat.exe -toplevel/opttoploop.cmx: otherlibs/dynlink/dynlink.cmxa +toplevel/native/topeval.cmx: otherlibs/dynlink/dynlink.cmxa # The numeric opcodes make_opcodes := tools/make_opcodes$(EXE) bytecomp/opcodes.ml: runtime/caml/instruct.h $(make_opcodes) - runtime/ocamlrun$(EXE) $(make_opcodes) -opcodes < $< > $@ + $(NEW_OCAMLRUN) $(make_opcodes) -opcodes < $< > $@ bytecomp/opcodes.mli: bytecomp/opcodes.ml $(CAMLC) -i $< > $@ @@ -1038,22 +1105,20 @@ endif # Default rules -.SUFFIXES: .ml .mli .cmo .cmi .cmx - -.ml.cmo: - $(CAMLC) $(COMPFLAGS) -c $< +%.cmo: %.ml + $(CAMLC) $(COMPFLAGS) -c $< -I $(@D) -.mli.cmi: +%.cmi: %.mli $(CAMLC) $(COMPFLAGS) -c $< -.ml.cmx: - $(CAMLOPT) $(COMPFLAGS) $(OPTCOMPFLAGS) -c $< +%.cmx: %.ml + $(CAMLOPT) $(COMPFLAGS) $(OPTCOMPFLAGS) -c $< -I $(@D) partialclean:: for d in utils parsing typing bytecomp asmcomp middle_end file_formats \ lambda middle_end/closure middle_end/flambda \ - middle_end/flambda/base_types asmcomp/debug \ - driver toplevel tools; do \ + middle_end/flambda/base_types \ + driver toplevel toplevel/byte toplevel/native tools; do \ rm -f $$d/*.cm[ioxt] $$d/*.cmti $$d/*.annot $$d/*.s $$d/*.asm \ $$d/*.o $$d/*.obj $$d/*.so $$d/*.dll; \ done @@ -1062,18 +1127,23 @@ partialclean:: depend: beforedepend (for d in utils parsing typing bytecomp asmcomp middle_end \ lambda file_formats middle_end/closure middle_end/flambda \ - middle_end/flambda/base_types asmcomp/debug \ - driver toplevel; \ - do $(CAMLDEP) $(DEPFLAGS) $(DEPINCLUDES) $$d/*.mli $$d/*.ml || exit; \ + middle_end/flambda/base_types \ + driver toplevel toplevel/byte toplevel/native; \ + do \ + $(CAMLDEP) $(DEPFLAGS) -I $$d $(DEPINCLUDES) $$d/*.mli $$d/*.ml \ + || exit; \ done) > .depend .PHONY: distclean distclean: clean rm -f boot/ocamlrun boot/ocamlrun.exe boot/camlheader \ - boot/*.cm* boot/libcamlrun.a boot/libcamlrun.lib boot/ocamlc.opt + boot/ocamlruns boot/ocamlruns.exe \ + boot/flexlink.byte boot/flexlink.byte.exe \ + boot/flexdll_*.o boot/flexdll_*.obj \ + boot/*.cm* boot/libcamlrun.a boot/libcamlrun.lib boot/ocamlc.opt rm -f Makefile.config Makefile.build_config rm -f runtime/caml/m.h runtime/caml/s.h - rm -rf autom4te.cache + rm -rf autom4te.cache flexdll-sources rm -f config.log config.status libtool rm -f tools/eventlog_metadata rm -f tools/*.bak @@ -1088,8 +1158,8 @@ config.status: @echo "- In file README.win32.adoc for Windows systems." @echo "On Unix systems, if you've just unpacked the distribution," @echo "something like" - @echo " ./configure" - @echo " make" - @echo " make install" + @echo " ./configure" + @echo " make" + @echo " make install" @echo "should work." @false diff --git a/Makefile.best_binaries b/Makefile.best_binaries index fb3402b2..4f05f698 100644 --- a/Makefile.best_binaries +++ b/Makefile.best_binaries @@ -40,7 +40,7 @@ choose_best = $(strip $(if \ $(and $(USE_BEST_BINARIES),$(wildcard $(ROOTDIR)/$1.opt$(EXE)),$(strip \ $(call check_not_stale,$1$(EXE),$1.opt$(EXE)))), \ $(ROOTDIR)/$1.opt$(EXE), \ - $(CAMLRUN) $(ROOTDIR)/$1$(EXE))) + $(OCAMLRUN) $(ROOTDIR)/$1$(EXE))) BEST_OCAMLC := $(call choose_best,ocamlc) BEST_OCAMLOPT := $(call choose_best,ocamlopt) @@ -50,7 +50,7 @@ BEST_OCAMLLEX := $(call choose_best,lex/ocamllex) # is not built yet, using the bootstrap compiler. # Unlike other tools, there is no risk of mixing incompatible -# bootrap-compiler and host-compiler object files, as ocamldep only +# bootstrap-compiler and host-compiler object files, as ocamldep only # produces text output. BEST_OCAMLDEP := $(strip $(if \ $(and $(USE_BEST_BINARIES),$(wildcard $(ROOTDIR)/ocamlc.opt$(EXE)),$(strip \ diff --git a/Makefile.build_config.in b/Makefile.build_config.in index 0dce5574..eb96306e 100644 --- a/Makefile.build_config.in +++ b/Makefile.build_config.in @@ -34,3 +34,12 @@ OC_DLL_LDFLAGS=@oc_dll_ldflags@ # The rlwrap command (for the *runtop targets) RLWRAP=@rlwrap@ + +# Which document generator: odoc or ocamldoc? +DOCUMENTATION_TOOL=@documentation_tool@ +DOCUMENTATION_TOOL_CMD=@documentation_tool_cmd@ + +# The location of the FlexDLL sources to use (usually provided as the flexdll +# Git submodule) +FLEXDLL_SOURCES=@flexdir@ +BOOTSTRAPPING_FLEXDLL=@bootstrapping_flexdll@ diff --git a/Makefile.common b/Makefile.common index f3e428a1..b3b418e5 100644 --- a/Makefile.common +++ b/Makefile.common @@ -23,29 +23,41 @@ DEPDIR=.dep D=d MKDIR=mkdir -p +# $(EMPTY) is defined in Makefile.config, but may not have been loaded +EMPTY := +# $(SPACE) contains a single space +SPACE := $(EMPTY) $(EMPTY) + DESTDIR ?= INSTALL_BINDIR := $(DESTDIR)$(BINDIR) INSTALL_LIBDIR := $(DESTDIR)$(LIBDIR) INSTALL_STUBLIBDIR := $(DESTDIR)$(STUBLIBDIR) INSTALL_MANDIR := $(DESTDIR)$(MANDIR) -ifeq "$(UNIX_OR_WIN32)" "win32" FLEXDLL_SUBMODULE_PRESENT := $(wildcard $(ROOTDIR)/flexdll/Makefile) -else -FLEXDLL_SUBMODULE_PRESENT = -endif -# Use boot/ocamlc.opt if available -CAMLRUN ?= $(ROOTDIR)/boot/ocamlrun$(EXE) -ifeq (0,$(shell \ +# Variables used to represent the OCaml runtime system +# Most of the time, boot/ocamlrun and runtime/ocamlrun are the same. +# However, under some circumstances it is important to be able to +# distinguish one from the other, hence these two variables. +# Boot/ocamlrun is the most frequently used in the build system, so +# we use OCAMLRUN to designate it and keep NEW_OCAMLRUN to refer +# to runtime/ocamlrun, because it's less frequently used. +OCAMLRUN ?= $(ROOTDIR)/boot/ocamlrun$(EXE) +NEW_OCAMLRUN ?= $(ROOTDIR)/runtime/ocamlrun$(EXE) + +TEST_BOOT_OCAMLC_OPT = $(shell \ test $(ROOTDIR)/boot/ocamlc.opt -nt $(ROOTDIR)/boot/ocamlc; \ - echo $$?)) + echo $$?) + +# Use boot/ocamlc.opt if available +ifeq "$(TEST_BOOT_OCAMLC_OPT)" "0" BOOT_OCAMLC = $(ROOTDIR)/boot/ocamlc.opt else - BOOT_OCAMLC = $(CAMLRUN) $(ROOTDIR)/boot/ocamlc + BOOT_OCAMLC = $(OCAMLRUN) $(ROOTDIR)/boot/ocamlc endif -ifeq "$(FLEXDLL_SUBMODULE_PRESENT)" "" +ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" FLEXLINK_ENV = CAMLOPT_CMD = $(CAMLOPT) OCAMLOPT_CMD = $(OCAMLOPT) @@ -53,21 +65,25 @@ ifeq "$(FLEXDLL_SUBMODULE_PRESENT)" "" ocamlc_cmd = $(ocamlc) ocamlopt_cmd = $(ocamlopt) else +ifeq "$(wildcard $(ROOTDIR)/flexlink.opt$(EXE))" "" FLEXLINK_ENV = \ - OCAML_FLEXLINK="$(ROOTDIR)/boot/ocamlrun $(ROOTDIR)/flexdll/flexlink.exe" + OCAML_FLEXLINK="$(ROOTDIR)/boot/ocamlrun$(EXE) \ + $(ROOTDIR)/boot/flexlink.byte$(EXE)" +else + FLEXLINK_ENV = \ + OCAML_FLEXLINK="$(ROOTDIR)/flexlink.opt$(EXE) -I $(ROOTDIR)/stdlib/flexdll" +endif # ifeq "$(wildcard $(ROOTDIR)/flexlink.opt$(EXE))" "" CAMLOPT_CMD = $(FLEXLINK_ENV) $(CAMLOPT) OCAMLOPT_CMD = $(FLEXLINK_ENV) $(OCAMLOPT) MKLIB_CMD = $(FLEXLINK_ENV) $(MKLIB) ocamlc_cmd = $(FLEXLINK_ENV) $(ocamlc) ocamlopt_cmd = $(FLEXLINK_ENV) $(ocamlopt) -endif +endif # ifeq "$(BOOTSTRAPPING_FLEXDLL)" "false" OPTCOMPFLAGS= ifeq "$(FUNCTION_SECTIONS)" "true" OPTCOMPFLAGS += -function-sections endif -# By default, request ocamllex to be quiet -OCAMLLEX_FLAGS ?= -q # Escape special characters in the argument string. # There are four characters that need escaping: @@ -120,3 +136,39 @@ ifneq ($(EXE),) $(1): $(1)$(EXE) endif endef # PROGRAM_SYNONYM + +# Lexer generation + +BOOT_OCAMLLEX ?= $(OCAMLRUN) $(ROOTDIR)/boot/ocamllex + +# Default value for OCAMLLEX +# In those directories where this needs to be overriden, the overriding +# should take place *before* Makefile.common is included. + +OCAMLLEX ?= $(BEST_OCAMLLEX) + +OCAMLLEXFLAGS ?= -q + +%.ml: %.mll + $(OCAMLLEX) $(OCAMLLEXFLAGS) $< + +# Parser generation + +OCAMLYACC ?= $(ROOTDIR)/yacc/ocamlyacc$(EXE) + +OCAMLYACCFLAGS ?= + +%.ml %.mli: %.mly + $(OCAMLYACC) $(OCAMLYACCFLAGS) $< + +SAK = $(ROOTDIR)/runtime/sak$(EXE) + +# stdlib/StdlibModules cannot be include'd unless $(SAK) has been built. These +# two rules add that dependency. They have to be pattern rules since +# Makefile.common is included before default targets. +$(ROOTDIR)/%/sak$(EXE): + $(MAKE) -C $(ROOTDIR)/$* sak$(EXE) + +ifneq "$(REQUIRES_CONFIGURATION)" "" +$(ROOTDIR)/%/StdlibModules: $(SAK) ; +endif diff --git a/Makefile.config.in b/Makefile.config.in index 652a1c5b..08ac80ff 100644 --- a/Makefile.config.in +++ b/Makefile.config.in @@ -76,6 +76,8 @@ AS_HAS_DEBUG_PREFIX_MAP=@as_has_debug_prefix_map@ # our own symbols): OC_LDFLAGS=@oc_ldflags@ +LDFLAGS?=@LDFLAGS@ + ### How to invoke the C preprocessor through the C compiler CPP=@CPP@ @@ -170,9 +172,8 @@ OTHERLIBRARIES=@otherlibraries@ ### Link-time options to ocamlc or ocamlopt for linking with POSIX threads # Needed for the "systhreads" package -PTHREAD_LINK=@pthread_link@ -PTHREAD_CAML_LINK=$(addprefix -cclib ,$(PTHREAD_LINK)) -PTHREAD_CFLAGS=@PTHREAD_CFLAGS@ +PTHREAD_LIBS=@PTHREAD_LIBS@ +PTHREAD_CAML_LIBS=$(addprefix -cclib ,$(PTHREAD_LIBS)) UNIX_OR_WIN32=@unix_or_win32@ UNIXLIB=@unixlib@ @@ -202,7 +203,7 @@ OCAMLOPT_CPPFLAGS=@ocamlc_cppflags@ NATIVECCLIBS=@nativecclibs@ SYSTHREAD_SUPPORT=@systhread_support@ PACKLD=@PACKLD@ -IFLEXDIR=@iflexdir@ +FLEXDLL_CHAIN=@flexdll_chain@ EXTRALIBS=@extralibs@ CCOMPTYPE=@ccomptype@ TOOLCHAIN=@toolchain@ @@ -218,7 +219,8 @@ MKMAINDLL=@mkmaindll@ MKEXEDEBUGFLAG=@mkexedebugflag@ RUNTIMED=@debug_runtime@ -RUNTIMEI=@instrumented_runtime@ +INSTRUMENTED_RUNTIME=@instrumented_runtime@ +INSTRUMENTED_RUNTIME_LIBS=@instrumented_runtime_libs@ WITH_DEBUGGER=@with_debugger@ WITH_CAMLTEX=@with_camltex@ WITH_OCAMLDOC=@ocamldoc@ @@ -232,6 +234,7 @@ TARGET=@target@ HOST=@host@ FLAMBDA=@flambda@ WITH_FLAMBDA_INVARIANTS=@flambda_invariants@ +WITH_CMM_INVARIANTS=@cmm_invariants@ FORCE_SAFE_STRING=@force_safe_string@ DEFAULT_SAFE_STRING=@default_safe_string@ WINDOWS_UNICODE=@windows_unicode@ @@ -248,10 +251,11 @@ ifeq "$(TOOLCHAIN)" "msvc" MERGEMANIFESTEXE=test ! -f $(1).manifest \ || mt -nologo -outputresource:$(1) -manifest $(1).manifest \ && rm -f $(1).manifest - MKEXE_BOOT=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OUTPUTEXE)$(1) $(2) \ - /link /subsystem:console $(OC_LDFLAGS) && ($(MERGEMANIFESTEXE)) + MKEXE_USING_COMPILER=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OUTPUTEXE)$(1) $(2) \ + /link /subsystem:console $(OC_LDFLAGS) $(LDFLAGS) && ($(MERGEMANIFESTEXE)) else - MKEXE_BOOT=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OC_LDFLAGS) $(OUTPUTEXE)$(1) $(2) + MKEXE_USING_COMPILER=$(CC) $(OC_CFLAGS) $(CFLAGS) $(OC_LDFLAGS) $(LDFLAGS) \ + $(OUTPUTEXE)$(1) $(2) endif # ifeq "$(TOOLCHAIN)" "msvc" # The following variables were defined only in the Windows-specific makefiles. @@ -261,20 +265,34 @@ endif # ifeq "$(TOOLCHAIN)" "msvc" # in the future their definition may be moved to a more private part of # the compiler's build system ifeq "$(UNIX_OR_WIN32)" "win32" - OTOPDIR=$(WINTOPDIR) - CTOPDIR=$(WINTOPDIR) CYGPATH=cygpath -m DIFF=/usr/bin/diff -q --strip-trailing-cr FIND=/usr/bin/find SORT=/usr/bin/sort SET_LD_PATH=PATH="$(PATH):$(LD_PATH)" - FLEXLINK_CMD=flexlink - FLEXDLL_CHAIN=@flexdll_chain@ - # FLEXLINK_FLAGS must be safe to insert in an OCaml string - # (see ocamlmklibconfig.ml in tools/Makefile) - FLEXLINK_FLAGS=@flexlink_flags@ - FLEXLINK=$(FLEXLINK_CMD) $(FLEXLINK_FLAGS) else # ifeq "$(UNIX_OR_WIN32)" "win32" # On Unix, make sure FLEXLINK is defined but empty - FLEXLINK = + SORT=sort + CYGPATH=echo + SET_LD_PATH=CAML_LD_LIBRARY_PATH="$(LD_PATH)" endif # ifeq "$(UNIX_OR_WIN32)" "win32" + +FLEXLINK_FLAGS=@flexlink_flags@ +FLEXLINK_CMD=flexlink +FLEXLINK=$(FLEXLINK_CMD) $(FLEXLINK_FLAGS) + +# Deprecated variables + +## Variables renamed in OCaml 4.13 + +RUNTIMEI=$(INSTRUMENTED_RUNTIME) + +### pthread-related variables + +PTHREAD_LINK=$(PTHREAD_LIBS) +PTHREAD_CAML_LINK=$(PTHREAD_CAML_LIBS) + +### It is expected that the value of PTHREAD_LINK changes between OCaml +### 4.12 and 4.13. Indeed, for OCaml 4.12 most of the time the variable +### contained -lpthread. From 4.13 onward it will most of the time be +### empty since we have -pthread in CFLAGS which implies -lpthread. diff --git a/Makefile.config_if_required b/Makefile.config_if_required index cc84164b..a25ffeb6 100644 --- a/Makefile.config_if_required +++ b/Makefile.config_if_required @@ -13,9 +13,7 @@ #* * #************************************************************************** -ifeq "$(MAKECMDGOALS)" "" -MAKECMDGOALS += defaultentry -endif +MAKECMDGOALS ?= defaultentry CLEAN_TARGET_NAMES=clean partialclean distclean diff --git a/Makefile.dev b/Makefile.dev index 90a69dec..1e1eab9a 100644 --- a/Makefile.dev +++ b/Makefile.dev @@ -27,8 +27,8 @@ build-all-asts: @$(MAKE) --no-print-directory $(AST_FILES) CAMLC_DPARSETREE := \ - $(CAMLRUN) ./ocamlc -nostdlib -nopervasives \ - -stop-after parsing -dparsetree + $(OCAMLRUN) ./ocamlc -nostdlib -nopervasives \ + -stop-after parsing -dparsetree %.ml.ast: %.ml ocamlc $(CAMLC_DPARSETREE) $< 2> $@ || exit 0 diff --git a/Makefile.menhir b/Makefile.menhir index c2068d23..c46fcaa0 100644 --- a/Makefile.menhir +++ b/Makefile.menhir @@ -48,7 +48,7 @@ MENHIR ?= menhir ## Unused tokens -# tokens COMMENT, DOCSTRING and EOL are produced by special lexer +# The tokens COMMENT, DOCSTRING and EOL are produced by special lexer # modes used by other consumers than the parser. # GREATERBRACKET ">]" was added by the parser by symmetry with "[<" @@ -57,11 +57,29 @@ MENHIR ?= menhir unused_tokens := COMMENT DOCSTRING EOL GREATERRBRACKET -## Menhir compilation flags +## Menhir's flags. -MENHIRFLAGS := --explain --dump --ocamlc "$(CAMLC) $(COMPFLAGS)" --infer \ - --lalr --strict --table -lg 1 -la 1 \ - $(addprefix --unused-token ,$(unused_tokens)) --fixed-exception +# The basic flags influence the analysis of the grammar and the construction +# of the automaton. The complete set of flags includes extra flags that +# influence type inference and code production. + +MENHIRBASICFLAGS := \ + --lalr \ + --explain \ + --dump \ + --require-aliases \ + --strict \ + -lg 1 \ + -la 1 \ + $(addprefix --unused-token ,$(unused_tokens)) \ + +MENHIRFLAGS := \ + $(MENHIRBASICFLAGS) \ + --infer \ + --ocamlc "$(CAMLC) $(COMPFLAGS)" \ + --fixed-exception \ + --table \ + --strategy simplified \ ## promote-menhir @@ -132,7 +150,9 @@ test-menhir: parsing/parser.mly partialclean-menhir:: rm -f \ $(addprefix parsing/parser.,ml mli) \ - $(addprefix parsing/camlinternalMenhirLib.,ml mli) + $(addprefix parsing/camlinternalMenhirLib.,ml mli) \ + $(addprefix parsing/parser.,automaton conflicts) \ + $(addprefix parsing/parser.,auto.messages) \ clean-menhir: partialclean-menhir @@ -157,7 +177,126 @@ include .depend.menhir interpret-menhir: @ echo "Please wait, I am building the LALR automaton..." - @ $(MENHIR) $(MENHIRFLAGS) parsing/parser.mly \ + @ $(MENHIR) $(MENHIRBASICFLAGS) parsing/parser.mly \ --interpret \ --interpret-show-cst \ --trace \ + +## list-parse-errors + +# This rule runs Menhir's reachability analysis, which produces a list of all +# states where a syntax error can be detected (and a corresponding list of of +# erroneous sentences). This data is stored in parsing/parser.auto.messages. +# This analysis requires about 3 minutes and 6GB of RAM. + +# The analysis is performed on a copy of the grammar where every block +# of text comprised between the markers BEGIN AVOID and END AVOID has +# been removed. This allows us to avoid certain syntactic forms in the +# sentences that we produce. See parser.mly for more explanations. + +# Because of this, we must run Menhir twice: once on a modified copy of the +# grammar to produce the sentences, and once on the original grammar to update +# the auto-comments (which would otherwise be incorrect). + +.PHONY: list-parse-errors +list-parse-errors: + @ tmp=`mktemp -d /tmp/parser.XXXX` && \ + sed -e '/BEGIN AVOID/,/END AVOID/d' \ + parsing/parser.mly > $$tmp/parser.mly && \ + $(MENHIR) $(MENHIRBASICFLAGS) $$tmp/parser.mly \ + --list-errors -la 2 \ + > parsing/parser.auto.messages && \ + rm -rf $$tmp + @ cp parsing/parser.auto.messages parsing/parser.auto.messages.bak + @ $(MENHIR) $(MENHIRBASICFLAGS) parsing/parser.mly \ + --update-errors parsing/parser.auto.messages.bak \ + > parsing/parser.auto.messages + @ rm -f parsing/parser.auto.messages.bak + +## generate-parse-errors + +# This rule assumes that [make list-parse-errors] has been run first. + +# This rule turns the error sentences stored in parsing/parser.auto.messages +# into one .ml file. + +# (It would in principle be preferable to create one file per sentence, but +# that would be much slower. We abuse the ability of the OCaml toplevel to +# resynchronize after an error, and put all sentences into a single file.) + +# This requires Menhir 20201214 or newer. + +GPE_DIR := tests/generated-parse-errors +GPE_ML := errors.ml +GPE_REF := errors.compilers.reference +GPE_START := implementation use_file toplevel_phrase + +.PHONY: generate-parse-errors +generate-parse-errors: + @ \ + mkdir -p testsuite/$(GPE_DIR) && \ + $(MENHIR) $(MENHIRBASICFLAGS) parsing/parser.mly \ + --echo-errors-concrete parsing/parser.auto.messages 2>/dev/null | \ + (cd testsuite/$(GPE_DIR) && touch $(GPE_REF) && ( \ + echo "(* TEST\n * toplevel\n*)" && \ + while IFS= read -r symbolic ; do \ + IFS= read -r concrete ; \ + concrete=$${concrete#### Concrete syntax: } ; \ + : '$$symbolic is the sentence in symbolic form' ; \ + : '$$concrete is the sentence in concrete form' ; \ + case "$$symbolic" in \ + *": SEMISEMI"*) \ + : 'If the sentence begins with SEMISEMI, ignore it. Our hack' ; \ + : 'does not support these sentences, and there are only 6 of' ; \ + : 'them anyway.' ; \ + continue ;; \ + *) \ + case "$$symbolic" in \ + *"EOF") \ + : 'If the sentence ends with EOF, replace it on the fly' ; \ + : 'with some other token (say, WHEN).' ; \ + echo "#0 \"$${symbolic%%EOF}WHEN\"" ; \ + echo "$$concrete when" ; \ + echo ";;" ;; \ + *) \ + : 'Emit a # directive containing the symbolic sentence.' ; \ + echo "#0 \"$$symbolic\"" ; \ + : 'Emit the concrete sentence.' ; \ + echo "$$concrete" ; \ + : 'Emit a double semicolon to allow resynchronization.' ; \ + echo ";;" ;; \ + esac \ + esac \ + done) \ + > $(GPE_ML) && \ + : 'Count how many sentences we have emitted, per start symbol.' ; \ + for symbol in $(GPE_START) ; do \ + count=$$(grep -h -e "$$symbol:" $(GPE_ML) | wc -l) && \ + echo "$$count sentences whose start symbol is $$symbol." ; \ + done \ + ) + @ \ + read -p "Re-generate the expected output for this test? " -n 1 -r && \ + echo && \ + if [[ $$REPLY =~ ^[Yy]$$ ]] ; then \ + make -C testsuite promote DIR=$(GPE_DIR) >/dev/null 2>&1 && \ + echo "Done." ; \ + make classify-parse-errors ; \ + else \ + echo "OK, stop." ; \ + fi + +.PHONY: classify-parse-errors +classify-parse-errors: + @ ( \ + cd testsuite/$(GPE_DIR) && \ + echo "The parser's output can be described as follows:" && \ + c=$$(grep "^Error: Syntax error" $(GPE_REF) | wc -l) && \ + echo "$${c} syntax errors reported." && \ + c=$$(grep "^Error: Syntax error$$" $(GPE_REF) | wc -l) && \ + echo "$${c} errors without an explanation." && \ + c=$$(grep "^Error: Syntax" $(GPE_REF) | grep expected | wc -l) && \ + echo "$${c} errors with an indication of what was expected." && \ + c=$$(grep "might be unmatched" $(GPE_REF) | wc -l) && \ + echo "$${c} errors with an indication of an unmatched delimiter." && \ + true) diff --git a/Makefile.tools b/Makefile.tools deleted file mode 100644 index 75fa9bb4..00000000 --- a/Makefile.tools +++ /dev/null @@ -1,110 +0,0 @@ -#************************************************************************** -#* * -#* OCaml * -#* * -#* Xavier Clerc, SED, INRIA Rocquencourt * -#* * -#* Copyright 2010 Institut National de Recherche en Informatique et * -#* en Automatique. * -#* * -#* All rights reserved. This file is distributed under the terms of * -#* the GNU Lesser General Public License version 2.1, with the * -#* special exception on linking described in the file LICENSE. * -#* * -#************************************************************************** - -# This makefile provides variables for using the in-tree compiler, -# interpreter, lexer and other associated tools. It is intended to be -# included within other makefiles. -# See manual/tools/Makefile and manual/manual/tutorials/Makefile as examples. -# Note that these makefile should define the $(TOPDIR) variable on their -# own. - -WINTOPDIR=`cygpath -m "$(TOPDIR)"` - -# TOPDIR is the root directory of the OCaml sources, in Unix syntax. -# WINTOPDIR is the same directory, in Windows syntax. - -OTOPDIR=$(TOPDIR) -CTOPDIR=$(TOPDIR) -CYGPATH=echo -DIFF=diff -q -SORT=sort -SET_LD_PATH=CAML_LD_LIBRARY_PATH="$(LD_PATH)" - -# The variables above may be overridden by .../Makefile.config -# OTOPDIR is either TOPDIR or WINTOPDIR, whichever is appropriate for -# arguments given to the OCaml compiler. -# CTOPDIR is either TOPDIR or WINTOPDIR, whichever is appropriate for -# arguments given to the C and Fortran compilers. -# CYGPATH is the command that translates unix-style file names into -# whichever syntax is appropriate for arguments of OCaml programs. -# DIFF is a "diff -q" command that ignores trailing CRs under Windows. -# SORT is the Unix "sort" command. Usually a simple command, but may be an -# absolute name if the Windows "sort" command is in the PATH. -# SET_LD_PATH is a command prefix that sets the path for dynamic libraries -# (CAML_LD_LIBRARY_PATH for Unix, PATH for Windows) using the LD_PATH shell -# variable. Note that for Windows we add Unix-syntax directory names in -# PATH, and Cygwin will translate it to Windows syntax. - -# TOPDIR is legacy, our makefiles should use ROOTDIR now -ROOTDIR=$(TOPDIR) -include $(ROOTDIR)/Makefile.config_if_required - -# Make sure USE_RUNTIME is defined -USE_RUNTIME ?= - -ifneq ($(USE_RUNTIME),) -#Check USE_RUNTIME value -ifeq ($(findstring $(USE_RUNTIME),d i),) -$(error If set, USE_RUNTIME must be equal to "d" (debug runtime) \ - or "i" (instrumented runtime)) -endif - -RUNTIME_VARIANT=-I $(OTOPDIR)/runtime \ - -runtime-variant $(USE_RUNTIME) -export OCAMLRUNPARAM?=v=0 -endif - -OCAMLRUN=$(TOPDIR)/runtime/ocamlrun$(USE_RUNTIME)$(EXE) - -OCFLAGS=-nostdlib -I $(OTOPDIR)/stdlib $(COMPFLAGS) -OCOPTFLAGS= - -ifeq ($(SUPPORTS_SHARED_LIBRARIES),false) - CUSTOM = -custom -else - CUSTOM = -endif - -OCAML=$(OCAMLRUN) $(OTOPDIR)/ocaml$(EXE) $(OCFLAGS) -noinit -ifeq "$(FLEXLINK)" "" - FLEXLINK_PREFIX= -else - ifeq "$(wildcard $(TOPDIR)/flexdll/Makefile)" "" - FLEXLINK_PREFIX= - else - EMPTY= - FLEXLINK_PREFIX=OCAML_FLEXLINK="$(WINTOPDIR)/boot/ocamlrun$(EXE) \ - $(WINTOPDIR)/flexdll/flexlink.exe" $(EMPTY) - endif -endif -OCAMLC=$(FLEXLINK_PREFIX)$(OCAMLRUN) $(OTOPDIR)/ocamlc$(EXE) \ - $(CUSTOM) $(OCFLAGS) $(RUNTIME_VARIANT) -OCAMLOPT=$(FLEXLINK_PREFIX)$(OCAMLRUN) $(OTOPDIR)/ocamlopt$(EXE) $(OCFLAGS) \ - $(RUNTIME_VARIANT) -OCAMLDOC=$(OCAMLRUN) $(OTOPDIR)/ocamldoc/ocamldoc$(EXE) -OCAMLLEX=$(OCAMLRUN) $(OTOPDIR)/lex/ocamllex$(EXE) -OCAMLMKLIB=$(FLEXLINK_PREFIX)$(OCAMLRUN) $(OTOPDIR)/tools/ocamlmklib$(EXE) \ - -ocamlc "$(OTOPDIR)/runtime/ocamlrun$(USE_RUNTIME)$(EXE) \ - $(OTOPDIR)/ocamlc$(EXE) $(OCFLAGS) $(RUNTIME_VARIANT)" \ - -ocamlopt "$(OTOPDIR)/runtime/ocamlrun$(USE_RUNTIME)$(EXE) \ - $(OTOPDIR)/ocamlopt$(EXE) $(OCFLAGS) $(RUNTIME_VARIANT)" -OCAMLYACC=$(TOPDIR)/yacc/ocamlyacc$(EXE) -DUMPOBJ=$(OCAMLRUN) $(OTOPDIR)/tools/dumpobj$(EXE) -OBJINFO=$(OCAMLRUN) $(OTOPDIR)/tools/ocamlobjinfo$(EXE) - -#FORTRAN_COMPILER= -#FORTRAN_LIBRARY= - -UNIXLIBVAR=`case "$(OTHERLIBRARIES)" in *win32unix*) echo win32;; esac` diff --git a/README.adoc b/README.adoc index e4f5b7ab..0ac4b2f4 100644 --- a/README.adoc +++ b/README.adoc @@ -1,10 +1,16 @@ |===== -| Branch `trunk` | Branch `4.11` | Branch `4.10` | Branch `4.09` | Branch `4.08` | Branch `4.07` | Branch `4.06` | Branch `4.05` +| Branch `trunk` | Branch `4.12` | Branch `4.11` | Branch `4.10` -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=trunk["TravisCI Build Status (trunk branch)", - link="https://travis-ci.org/ocaml/ocaml"] +| image:https://github.com/ocaml/ocaml/workflows/Build/badge.svg?branch=trunk["Github CI Build Status (trunk branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3ABuild"] + image:https://github.com/ocaml/ocaml/workflows/Hygiene/badge.svg?branch=trunk["Github CI Hygiene Status (trunk branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3AHygiene"] image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=trunk&svg=true["AppVeyor Build Status (trunk branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] +| image:https://github.com/ocaml/ocaml/workflows/main/badge.svg?branch=4.12["Github CI Build Status (4.12 branch)", + link="https://github.com/ocaml/ocaml/actions?query=workflow%3Amain"] + image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.12&svg=true["AppVeyor Build Status (4.12 branch)", + link="https://ci.appveyor.com/project/avsm/ocaml"] | image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.11["TravisCI Build Status (4.11 branch)", link="https://travis-ci.org/ocaml/ocaml"] image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.11&svg=true["AppVeyor Build Status (4.11 branch)", @@ -13,43 +19,23 @@ link="https://travis-ci.org/ocaml/ocaml"] image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.10&svg=true["AppVeyor Build Status (4.10 branch)", link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.09["TravisCI Build Status (4.09 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.09&svg=true["AppVeyor Build Status (4.09 branch)", - link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.08["TravisCI Build Status (4.08 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.08&svg=true["AppVeyor Build Status (4.08 branch)", - link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.07["TravisCI Build Status (4.07 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.07&svg=true["AppVeyor Build Status (4.07 branch)", - link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.06["TravisCI Build Status (4.06 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.06&svg=true["AppVeyor Build Status (4.06 branch)", - link="https://ci.appveyor.com/project/avsm/ocaml"] -| image:https://travis-ci.org/ocaml/ocaml.svg?branch=4.05["TravisCI Build Status (4.05 branch)", - link="https://travis-ci.org/ocaml/ocaml"] - image:https://ci.appveyor.com/api/projects/status/github/ocaml/ocaml?branch=4.05&svg=true["AppVeyor Build Status (4.05 branch)", - link="https://ci.appveyor.com/project/avsm/ocaml"] |===== = README = == Overview -OCaml is an implementation of the ML language, based on the Caml Light -dialect extended with a complete class-based object system and a powerful -module system in the style of Standard ML. +OCaml is a functional, statically-typed programming language from the +ML family, offering a powerful module system extending that of +Standard ML and a feature-rich, class-based object system. OCaml comprises two compilers. One generates bytecode which is then -interpreted by a C program. This compiler runs quickly, generates compact -code with moderate memory requirements, and is portable to essentially any -32 or 64 bit Unix platform. Performance of generated programs is quite good -for a bytecoded implementation. This compiler can be used either as a -standalone, batch-oriented compiler that produces standalone programs, or as -an interactive, toplevel-based system. +interpreted by a C program. This compiler runs quickly, generates +compact code with moderate memory requirements, and is portable to +many 32 or 64 bit platforms. Performance of generated programs is +quite good for a bytecoded implementation. This compiler can be used +either as a standalone, batch-oriented compiler that produces +standalone programs, or as an interactive REPL system. The other compiler generates high-performance native code for a number of processors. Compilation takes longer and generates bigger code, but the @@ -65,7 +51,7 @@ compiler currently runs on the following platforms: | ARM 64 bits | Linux, macOS | FreeBSD | ARM 32 bits | Linux | FreeBSD, NetBSD, OpenBSD | Power 64 bits | Linux | -| Power 32 bits | | Linux +| Power 32 bits | Linux | | RISC-V 64 bits | Linux | | IBM Z (s390x) | Linux | |==== @@ -77,14 +63,14 @@ the compiler may work under other operating systems with little work. == Copyright All files marked "Copyright INRIA" in this distribution are -Copyright (C) 1996-2020 Institut National de Recherche en Informatique et +Copyright (C) 1996-2021 Institut National de Recherche en Informatique et en Automatique (INRIA) and distributed under the conditions stated in file LICENSE. == Installation See the file link:INSTALL.adoc[] for installation instructions on -machines running Unix, Linux, OS X and Cygwin. For native Microsoft +machines running Unix, Linux, macOS and Cygwin. For native Microsoft Windows, see link:README.win32.adoc[]. == Documentation @@ -102,6 +88,10 @@ https://ocaml.org/docs/install.html == Keeping in Touch with the Caml Community +There is an active and friendly discussion forum at + +https://discuss.ocaml.org/ + The OCaml mailing list is the longest-running forum for OCaml users. You can email it at @@ -115,10 +105,6 @@ An alternative archive of the mailing list is also available at https://inbox.ocaml.org/ -You can also access a newer discussion forum at - -https://discuss.ocaml.org/ - There also exist other mailing lists, chat channels, and various other forums around the internet for getting in touch with the OCaml and ML family language community. These can be accessed at diff --git a/README.win32.adoc b/README.win32.adoc index d6da9138..bfd1d0cd 100644 --- a/README.win32.adoc +++ b/README.win32.adoc @@ -62,9 +62,10 @@ methods are available, the officially supported environment for doing this is Only the `make` Cygwin package is required. `diffutils` is required if you wish to be able to run the test suite. -Unless you are also compiling the Cygwin port of OCaml, you should not install -the `gcc-core` or `flexdll` packages. If you do, care may be required to ensure -that a particular build is using the correct installation of `flexlink`. +Unless you are also compiling the Cygwin port of OCaml, you do not need the +`gcc-core` or `flexdll` packages. If you do install them, care may be required +to ensure that a particular build is using the correct installation of +`flexlink`. [[bmflex]] In addition to Cygwin, FlexDLL must also be installed, which is available from @@ -75,7 +76,7 @@ bootstrap FlexDLL, you will need to ensure that the directory to which you install FlexDLL is included in your `PATH` environment variable. Note: binary distributions of FlexDLL are compatible only with Visual Studio 2013 and earlier; for Visual Studio 2015 and later, you will need to compile the C -objects from source, or build ocaml using the flexdll target. +objects from source, or configure ocaml with the `--with-flexdll` option. The base bytecode system (ocamlc, ocaml, ocamllex, ocamlyacc, ...) of all three ports runs without any additional tools. @@ -200,7 +201,7 @@ Now run: for 32-bit, or: - ./configure --build=x86_64-unknown-cygwin --host=x86_64-pc-windows + ./configure --build=x86_64-pc-cygwin --host=x86_64-pc-windows for 64-bit. @@ -245,7 +246,7 @@ C code (`ocamlc -custom`) require the appropriate Mingw-w64 gcc and the `mingw64-i686-gcc-core` package for 32-bit and the `mingw64-x86_64-gcc-core` package for 64-bit. - - Do not try to use the Cygwin version of flexdll for this port. + - The Cygwin version of flexdll does not work with this port. - The standalone mingw toolchain from the Mingw-w64 project (http://mingw-w64.org/) is not supported. Please use the version packaged in @@ -265,7 +266,7 @@ Now run: for 32-bit, or: - ./configure --build=x86_64-unknown-cygwin --host=x86_64-w64-mingw32 + ./configure --build=x86_64-pc-cygwin --host=x86_64-w64-mingw32 for 64-bit. @@ -290,11 +291,9 @@ is, naturally, written in OCaml. This creates a circular dependency if you wish to build entirely from sources. Since OCaml 4.03 and FlexDLL 0.35, it is now possible to bootstrap the two programs simultaneously. The process is identical for both ports. If you choose to compile this way, it is not necessary to -install FlexDLL separately -- indeed, if you do install FlexDLL separately, you -may need to be careful to ensure that `ocamlopt` picks up the correct `flexlink` -in your `PATH`. +install FlexDLL separately. -You must place the FlexDLL sources for Version 0.35 or later in the directory +You must extract the FlexDLL sources for Version 0.35 or later in the directory `flexdll/` at the top-level directory of the OCaml distribution. This can be done in one of three ways: @@ -309,25 +308,18 @@ done in one of three ways: + git submodule update --init -OCaml is then compiled as normal for the port you require, except that before -building the compiler itself, you must compile `flexdll`, i.e.: +OCaml is then compiled normally for the port you require. - make flexdll make - make flexlink.opt make install - * You should ignore the error messages that say ocamlopt was not found. * `make install` will install FlexDLL by placing `flexlink.exe` (and the default manifest file for the Microsoft port) in `bin/` and the FlexDLL object files in `lib/`. - * If you don't include `make flexlink.opt`, `flexlink.exe` will be a - bytecode program. `make install` always installs the "best" - `flexlink.exe` (i.e. there is never a `flexlink.opt.exe` installed). - * If you have populated `flexdll/`, you *must* run - `make flexdll`. If you wish to revert to using an externally - installed FlexDLL, you must erase the contents of `flexdll/` before - compiling. + * If you have populated `flexdll/`, the build will always use it, ignoring + any externally installed FlexDLL. You can override this behaviour by either + erasing the contents of `flexdll/` or passing the `--without-flexdll` option + to `configure`. == Unicode support diff --git a/VERSION b/VERSION index 89a99f03..3cc34799 100644 --- a/VERSION +++ b/VERSION @@ -1,4 +1,4 @@ -4.12.1 +4.13.0 # The version string is the first line of this file. # It must be in the format described in stdlib/sys.mli diff --git a/aclocal.m4 b/aclocal.m4 index 33873178..6db770c4 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -58,7 +58,8 @@ unknown #endif] )], [AC_CACHE_VAL([ocaml_cv_cc_vendor], - [ocaml_cv_cc_vendor=`grep ['^[a-z]'] conftest.i | tr -s ' ' '-'`])], + [ocaml_cv_cc_vendor=`grep ['^[a-z]'] conftest.i | tr -s ' ' '-' \ + | tr -d '\r'`])], [AC_MSG_FAILURE([unexpected preprocessor failure])]) AC_MSG_RESULT([$ocaml_cv_cc_vendor]) ]) @@ -130,6 +131,7 @@ AC_DEFUN([OCAML_CC_SAVE_VARIABLES], [ saved_CC="$CC" saved_CFLAGS="$CFLAGS" saved_CPPFLAGS="$CPPFLAGS" + saved_LIBS="$LIBS" saved_ac_ext="$ac_ext" saved_ac_compile="$ac_compile" # Move the content of confdefs.h to another file so it does not @@ -147,6 +149,7 @@ AC_DEFUN([OCAML_CC_RESTORE_VARIABLES], [ CPPFLAGS="$saved_CPPFLAGS" CFLAGS="$saved_CFLAGS" CC="$saved_CC" + LIBS="$saved_LIBS" ]) AC_DEFUN([OCAML_AS_HAS_DEBUG_PREFIX_MAP], [ @@ -290,3 +293,179 @@ AC_DEFUN([OCAML_CHECK_LIBUNWIND], [ LDFLAGS="$SAVED_LDFLAGS" CFLAGS="$SAVED_CFLAGS" ]) + +AC_DEFUN([OCAML_TEST_FLEXLINK], [ + OCAML_CC_SAVE_VARIABLES + + AC_MSG_CHECKING([whether $1 works]) + + AC_COMPILE_IFELSE( + [AC_LANG_SOURCE([int answer = 42;])], + [# Create conftest1.$ac_objext as a symlink on Cygwin to ensure that native + # flexlink can cope. The reverse test is unnecessary (a Cygwin-compiled + # flexlink can read anything). + mv conftest.$ac_objext conftest1.$ac_objext + AS_CASE([$4],[*-pc-cygwin], + [ln -s conftest1.$ac_objext conftest2.$ac_objext], + [cp conftest1.$ac_objext conftest2.$ac_objext]) + + CC="$1 -chain $2 -exe" + LIBS="conftest2.$ac_objext" + CPPFLAGS="$3 $CPPFLAGS" + AC_LINK_IFELSE( + [AC_LANG_SOURCE([int main() { return 0; }])], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + AC_MSG_ERROR([$1 does not work])])], + [AC_MSG_RESULT([unexpected compile error]) + AC_MSG_ERROR([error calling the C compiler])]) + + OCAML_CC_RESTORE_VARIABLES +]) + +AC_DEFUN([OCAML_TEST_FLEXDLL_H], [ + OCAML_CC_SAVE_VARIABLES + + AS_IF([test -n "$1"],[CPPFLAGS="-I $1 $CPPFLAGS"]) + have_flexdll_h=no + AC_CHECK_HEADER([flexdll.h],[have_flexdll_h=yes],[have_flexdll_h=no]) + AS_IF([test x"$have_flexdll_h" = 'xno'], + [AS_IF([test -n "$1"], + [AC_MSG_ERROR([$1/flexdll.h appears unusable])])]) + + OCAML_CC_RESTORE_VARIABLES +]) + +AC_DEFUN([OCAML_TEST_FLEXLINK_WHERE], [ + OCAML_CC_SAVE_VARIABLES + + AC_MSG_CHECKING([if "$1 -where" includes flexdll.h]) + flexlink_where="$($1 -where | tr -d '\r')" + CPPFLAGS="$CPPFLAGS -I \"$flexlink_where\"" + cat > conftest.c <<"EOF" +#include +int main (void) {return 0;} +EOF + cat > conftest.Makefile </dev/null 2>/dev/null], + [have_flexdll_h=yes + AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no])]) + + OCAML_CC_RESTORE_VARIABLES +]) + +AC_DEFUN([OCAML_HOST_IS_EXECUTABLE], [ + AC_MSG_CHECKING([whether host executables can be run in the build]) + old_cross_compiling="$cross_compiling" + cross_compiling='no' + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[int main (void) {return 0;}]])], + [AC_MSG_RESULT([yes]) + host_runnable=true], + [AC_MSG_RESULT([no]) + host_runnable=false], + # autoconf displays a warning if this parameter is missing, but + # cross-compilation mode was disabled above. + [assert=false]) + cross_compiling="$old_cross_compiling" +]) + +# This is AC_RUN_IFELSE but taking $host_runnable into account (i.e. if the +# program can be run, then it is run) +AC_DEFUN([OCAML_RUN_IFELSE], [ + old_cross_compiling="$cross_compiling" + AS_IF([test "x$host_runnable" = 'xtrue'], [cross_compiling='no']) + AC_RUN_IFELSE([$1],[$2],[$3],[$4]) + cross_compiling="$old_cross_compiling" +]) + +AC_DEFUN([OCAML_C99_CHECK_ROUND], [ + AC_MSG_CHECKING([whether round works]) + OCAML_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +int main (void) { + static volatile double d = 0.49999999999999994449; + return (fpclassify(round(d)) != FP_ZERO); +} + ]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAS_WORKING_ROUND])], + [AC_MSG_RESULT([no]) + AS_CASE([$enable_imprecise_c99_float_ops,$target], + [no,*], [hard_error=true], + [yes,*], [hard_error=false], + [*,x86_64-w64-mingw32], [hard_error=false], + [hard_error=true]) + AS_IF([test x"$hard_error" = "xtrue"], + [AC_MSG_ERROR(m4_normalize([ + round does not work, enable emulation with + --enable-imprecise-c99-float-ops]))], + [AC_MSG_WARN(m4_normalize([ + round does not work; emulation enabled]))])], + [AS_CASE([$target], + [x86_64-w64-mingw32],[AC_MSG_RESULT([cross-compiling; assume not])], + [AC_MSG_RESULT([cross-compiling; assume yes]) + AC_DEFINE([HAS_WORKING_ROUND])])]) +]) + +AC_DEFUN([OCAML_C99_CHECK_FMA], [ + AC_MSG_CHECKING([whether fma works]) + OCAML_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +int main (void) { + /* Tests 264-266 from testsuite/tests/fma/fma.ml. These tests trigger the + broken implementations of Cygwin64, mingw-w64 (x86_64) and VS2013-2017. + The static volatile variables aim to thwart GCC's constant folding. */ + static volatile double x, y, z; + double t264, t265, t266; + x = 0x3.bd5b7dde5fddap-496; + y = 0x3.bd5b7dde5fddap-496; + z = -0xd.fc352bc352bap-992; + t264 = fma(x, y, z); + x = 0x3.bd5b7dde5fddap-504; + y = 0x3.bd5b7dde5fddap-504; + z = -0xd.fc352bc352bap-1008; + t265 = fma(x, y, z); + x = 0x8p-540; + y = 0x4p-540; + z = 0x4p-1076; + t266 = fma(x, y, z); + return (!(t264 == 0x1.0989687cp-1044 || + t264 == 0x0.000004277ca1fp-1022 || /* Acceptable emulated values */ + t264 == 0x0.00000428p-1022) + || !(t265 == 0x1.0988p-1060 || + t265 == 0x0.0000000004278p-1022 || /* Acceptable emulated values */ + t265 == 0x0.000000000428p-1022) + || !(t266 == 0x8p-1076)); +} + ]])], + [AC_MSG_RESULT([yes]) + AC_DEFINE([HAS_WORKING_FMA])], + [AC_MSG_RESULT([no]) + AS_CASE([$enable_imprecise_c99_float_ops,$target], + [no,*], [hard_error=true], + [yes,*], [hard_error=false], + [*,x86_64-w64-mingw32|*,x86_64-*-cygwin*], [hard_error=false], + [AS_CASE([$ocaml_cv_cc_vendor], + [msvc-*], [AS_IF([test "${ocaml_cv_cc_vendor#msvc-}" -lt 1920 ], + [hard_error=false], + [hard_error=true])], + [hard_error=true])]) + AS_IF([test x"$hard_error" = "xtrue"], + [AC_MSG_ERROR(m4_normalize([ + fma does not work, enable emulation with + --enable-imprecise-c99-float-ops]))], + [AC_MSG_WARN(m4_normalize([ + fma does not work; emulation enabled]))])], + [AS_CASE([$target], + [x86_64-w64-mingw32|x86_64-*-cygwin*], + [AC_MSG_RESULT([cross-compiling; assume not])], + [AC_MSG_RESULT([cross-compiling; assume yes]) + AC_DEFINE([HAS_WORKING_FMA])])]) +]) diff --git a/api_docgen/Compiler_libs.pre.mld b/api_docgen/Compiler_libs.pre.mld new file mode 100644 index 00000000..9c479b78 --- /dev/null +++ b/api_docgen/Compiler_libs.pre.mld @@ -0,0 +1,6 @@ +{1 Warning} + This library is part of the internal OCaml compiler API, and is +not the language standard library. + There are no compatibility guarantees between releases, so code written +against these modules must be willing to depend on specific OCaml compiler +versions. diff --git a/api_docgen/Format_tutorial.mld b/api_docgen/Format_tutorial.mld new file mode 100644 index 00000000..7da5f732 --- /dev/null +++ b/api_docgen/Format_tutorial.mld @@ -0,0 +1,425 @@ +{1 Principles} + +Line breaking is based on three concepts: + +{ul {- {b boxes} : a box is a logical pretty-printing unit, which + defines a behaviour of the pretty-printing engine to display the + material inside the box.} + {- {b break hints}: a break hint is a directive to the + pretty-printing engine that proposes to break the line here, if it is + necessary to properly print the rest of the material. + Otherwise, the pretty-printing engine never break lines (except + "in case of emergency" to avoid very bad output). + In short, a break hint tells the pretty printer that a line break here + may be appropriate.} + {- {b indentation rules}: + When a line break occurs, the pretty-printing engines fixes the + indentation (or amount of leading spaces) of the new line using + indentation rules, as follows: + {ul {- A box can state the extra indentation of every new line opened in + its scope. This extra indentation is named + {b box breaking indentation}.} + {- A break hint can also set the additional indentation of the new line + it may fire. This extra indentation is named {b hint breaking + indentation}.} + {- If break hint [bh] fires a new line within box + [b], then the indentation of the new line is simply the sum of: + the current indentation of box [b] + + + the additional box breaking indentation, as defined by box [b] + + + the additional hint breaking indentation, as defined by break + hint [bh].}}}} + +{1 Boxes} + +There are 4 types of boxes. (The most often used is the "hov" box type, so skip +the rest at first reading). + + - {b horizontal box} ({i h} box, as obtained by the + {!open_hbox} procedure): within this box, break hints do not + lead to line breaks. + - {b vertical box} ({i v} box, as obtained by the + {!open_vbox} procedure): within this box, every break hint lead + to a new line. + - {b vertical/horizontal box} ({i hv} box, as obtained by + the {!open_hvbox} procedure): if it is possible, the entire box + is written on a single line; otherwise, every break hint within the box + leads to a new line. + - {b vertical or horizontal box} ({i hov} box, as obtained + by the {!open_box} or {!open_hovbox} procedures): within this box, break + hints are used to cut the line when there is no more room on the line. + There are two kinds of "hov" boxes, you can find the details + below. In first approximation, let me + consider these two kinds of "hov" boxes as equivalent and + obtained by calling the {!open_box} procedure. + +Let me give an example. Suppose we can write 10 chars before +the right margin (that indicates no more room). We represent any +char as a [-] sign; characters [\[] and [\]] +indicates the opening and closing of a box and [b] stands +for a break hint given to the pretty-printing engine. + +The output "--b--b--" is displayed like this (the [b] symbol +stands for the value of the break that is explained below): + +Within a "h" box: + +{[ +--b--b-- +]} + +Within a "v" box: + +{[ +--b +--b +-- +]} + +Within a "hv" box: + +If there is enough room to print the box on the line: + +{[ +--b--b-- +]} + +But "---b---b---" that cannot fit on the line is written + +{[ +---b +---b +--- +]} + +Within a "hov" box: + +If there is enough room to print the box on the line: + +{[ +--b--b-- +]} + +But if "---b---b---" cannot fit on the line, it is written as + +{[ +---b---b +--- +]} + +The first break hint does not lead to a new line, since there is enough room on +the line. The second one leads to a new line since there is no more room to +print the material following it. If the room left on the line were even +shorter, the first break hint may lead to a new line and "---b---b---" is +written as: + +{[ +---b +---b +--- +]} + +{1 Printing spaces} + +Break hints are also used to output spaces (if the line is not split when the +break is encountered, otherwise the new line indicates properly the separation +between printing items). You output a break hint using [print_break sp indent], +and this sp integer is used to print "sp" spaces. Thus [print_break sp ...] may +be thought as: print [sp] spaces or output a new line. + +For instance, if b is [break 1 0] in the output "--b--b--", we get + +within a "h" box: + +{[ +-- -- -- +]} + +within a "v" box: + +{[ +-- +-- +-- +]} + +within a "hv" box: +{[ +-- -- -- +]} + +or, according to the remaining room on the line: + +{[ +-- +-- +-- +]} + +and similarly for "hov" boxes. + +Generally speaking, a printing routine using "format", should not directly +output white spaces: the routine should use break hints instead. (For instance +[print_space ()] that is a convenient abbreviation for [print_break 1 0] and +outputs a single space or break the line.) + +{1 Indentation of new lines} + +The user gets 2 ways to fix the indentation of new lines: + +{b When defining the box}: when you open a box, you can fix the indentation +added to each new line opened within that box. + +For instance: [open_hovbox 1] opens a "hov" box with new lines indented 1 more +than the initial indentation of the box. With output "---\[--b--b--b--", we +get: + +{[ +---\[--b--b + --b-- +]} + +with open_hovbox 2, we get + +{[ +---\[--b--b + --b-- +]} + +Note: the \[ sign in the display is not visible on the screen, it is just there +to materialise the aperture of the pretty-printing box. Last "screen" stands +for: + +{[ +-----b--b + --b-- +]} + +{b When defining the break that makes the new line}. As said above, you output +a break hint using [print_break sp indent]. The [indent] integer is used to fix +the additional indentation of the new line. Namely, it is added to the default +indentation offset of the box where the break occurs. + +For instance, if \[ stands for the opening of a "hov" box with 1 as extra +indentation (as obtained by [open_hovbox 1]), and b is [print_break 1 2], then + from output "---\[--b--b--b--", we get: + +{[ + ---\[-- -- + -- + -- +]} + +{1 Refinement on "hov" boxes} + +The "hov" box type is refined into two categories. + +- {b the vertical or horizontal {i packing} box} (as obtained by the +{!open_hovbox} procedure): break hints are used to cut the line when there is no +more room on the line; no new line occurs if there is enough room on the line. +- {b vertical or horizontal {i structural} box} (as obtained by the {!open_box} +procedure): similar to the "hov" packing box, the break hints are used to cut +the line when there is no more room on the line; in addition, break hints that +can show the box structure lead to new lines even if there is enough room on +the current line. + +The difference between a packing and a structural "hov" box is shown by a +routine that closes boxes and parentheses at the end of printing: with packing +boxes, the closure of boxes and parentheses do not lead to new lines if there +is enough room on the line, whereas with structural boxes each break hint will +lead to a new line. For instance, when printing +"\[(---\[(----\[(---b)\]b)\]b)\]", where "b" is a break hint without extra +indentation ([print_cut ()]). If "\[" means opening of a packing "hov" box +({!open_hovbox}), "\[(---\[(----\[(---b)\]b)\]b)\]" is printed as follows: + +{[ +(--- + (---- + (---))) +]} + +If we replace the packing boxes by structural boxes ({!open_box}), each break +hint that precedes a closing parenthesis can show the boxes structure, if it +leads to a new line; hence "\[(---\[(----\[(---b)\]b)\]b)\]" is printed like +this: + +{[ +(--- + (---- + (--- + ) + ) +) +]} + +{1 Practical advice} + +When writing a pretty-printing routine, follow these simple rules: + ++ Boxes must be opened and closed consistently ([open_*] and {!close_box} must +be nested like parentheses). ++ Never hesitate to open a box. ++ Output many break hints, otherwise the pretty-printer is in a bad situation +where it tries to do its best, which is always "worse than your bad". ++ Do not try to force spacing using explicit spaces in the character strings. +For each space you want in the output emit a break hint ([print_space ()]), +unless you explicitly don't want the line to be broken here. For instance, +imagine you want to pretty print an OCaml definition, more precisely a [let rec +ident = expression] value definition. You will probably treat the first three +spaces as "unbreakable spaces" and write them directly in the string constants +for keywords, and print ["let rec"] before the identifier, and similarly write +[=] to get an unbreakable space after the identifier; in contrast, the space +after the [=] sign is certainly a break hint, since breaking the line after [=] +is a usual (and elegant) way to indent the expression part of a definition. In +short, it is often necessary to print unbreakable spaces; however, most of the +time a space should be considered a break hint. ++ Do not try to force new lines, let the pretty-printer do it for you: that's +its only job. In particular, do not use {!force_newline}: this procedure +effectively leads to a newline, but it also as the unfortunate side effect to +partially reinitialise the pretty-printing engine, so that the rest of the +printing material is noticeably messed up. ++ Never put newline characters directly in the strings to be printed: pretty +printing engine will consider this newline character as any other character +written on the current line and this will completely mess up the output. +Instead of new line characters use line break hints: if those break hints must +always result in new lines, it just means that the surrounding box must be a +vertical box! ++ End your main program by a [print_newline ()] call, that flushes the +pretty-printer tables (hence the output). (Note that the top-level loop of the +interactive system does it as well, just before a new input.) + +{1 Printing to stdout: using printf} + +The format module provides a general printing facility "a la" printf. In +addition to the usual conversion facility provided by printf, you can write +pretty-printing indications directly inside the format string (opening and +closing boxes, indicating breaking hints, etc). + +Pretty-printing annotations are introduced by the [@] symbol, directly into the +string format. Almost any function of the [Format] module can be called from +within a [printf] format string. For instance + +- "[@\[]" open a box (open_box 0). You may precise the type as an extra +argument. For instance [@\[] is equivalent to [open_hovbox n]. +- "[@\]]" close a box ([close_box ()]). +- "[@ ]" output a breakable space ([print_space ()]). +- "[@,]" output a break hint ([print_cut ()]). +- "[@;]" emit a "full" break hint ([print_break n m]). +- "[@.]" end the pretty-printing, closing all the boxes still opened +([print_newline ()]). + +For instance + +{v +printf "@\[<1>%s@ =@ %d@ %s@\]@." "Prix TTC" 100 "Euros";; +Prix TTC = 100 Euros +- : unit = () +v} + +{1 A concrete example} + +Let me give a full example: the shortest non trivial example you could imagine, +that is the lambda calculus :) + +Thus the problem is to pretty-print the values of a concrete data type that +models a language of expressions that defines functions and their applications +to arguments. + +First, I give the abstract syntax of lambda-terms: + +{v +type lambda = + | Lambda of string * lambda + | Var of string + | Apply of lambda * lambda +;; +v} + +I use the format library to print the lambda-terms: + +{v +open Format;; + +let ident = print_string;; +let kwd = print_string;; +val ident : string -> unit = +val kwd : string -> unit = + +let rec print_exp0 = function +| Var s -> ident s +| lam -> open_hovbox 1; kwd "("; print_lambda lam; kwd ")"; close_box () + +and print_app = function +| e -> open_hovbox 2; print_other_applications e; close_box () + +and print_other_applications f = + match f with + | Apply (f, arg) -> print_app f; print_space (); print_exp0 arg + | f -> print_exp0 f + +and print_lambda = function +| Lambda (s, lam) -> + open_hovbox 1; + kwd "\\"; ident s; kwd "."; print_space(); print_lambda lam; + close_box() + | e -> print_app e;; +val print_app : lambda -> unit = +val print_other_applications : lambda -> unit = +val print_lambda : lambda -> unit = +v} + +{2 Most general pretty-printing: using fprintf} + +We use the [fprintf] function to write the most versatile version of the +pretty-printing functions for lambda-terms. Now, the functions get an extra +argument, namely a pretty-printing formatter (the ppf argument) where printing +will occur. This way the printing routines are more general, since they can +print on any formatter defined in the program (either printing to a file, or to +[stdout], to [stderr], or even to a string). Furthermore, the pretty-printing +functions are now compositional, since they may be used in conjunction with the +special [%a] conversion, that prints a [fprintf] argument with a user's supplied +function (these user's supplied functions also have a formatter as first +argument). + +Using [fprintf], the lambda-terms printing routines can be written as follows: + +{v +open Format;; + +let ident ppf s = fprintf ppf "%s" s;; +let kwd ppf s = fprintf ppf "%s" s;; +val ident : Format.formatter -> string -> unit +val kwd : Format.formatter -> string -> unit + +let rec pr_exp0 ppf = function +| Var s -> fprintf ppf "%a" ident s +| lam -> fprintf ppf "@\[<1>(%a)@\]" pr_lambda lam + +and pr_app ppf = function +| e -> fprintf ppf "@\[<2>%a@\]" pr_other_applications e + +and pr_other_applications ppf f = +match f with +| Apply (f, arg) -> fprintf ppf "%a@ %a" pr_app f pr_exp0 arg +| f -> pr_exp0 ppf f + +and pr_lambda ppf = function +| Lambda (s, lam) -> +fprintf ppf "@\[<1>%a%a%a@ %a@\]" kwd "\\" ident s kwd "." pr_lambda lam +| e -> pr_app ppf e +;; +val pr_app : Format.formatter -> lambda -> unit +val pr_other_applications : Format.formatter -> lambda -> unit +val pr_lambda : Format.formatter -> lambda -> unit +v} + +Given those general printing routines, procedures to print to [stdout] or +[stderr] is just a matter of partial application: + +{v +let print_lambda = pr_lambda std_formatter;; +let eprint_lambda = pr_lambda err_formatter;; +val print_lambda : lambda -> unit +val eprint_lambda : lambda -> unit +v} diff --git a/ocamltest/getocamloptdefaultflags b/api_docgen/Makefile old mode 100755 new mode 100644 similarity index 69% rename from ocamltest/getocamloptdefaultflags rename to api_docgen/Makefile index 8d835eed..f00cfccf --- a/ocamltest/getocamloptdefaultflags +++ b/api_docgen/Makefile @@ -1,11 +1,10 @@ -#!/bin/sh #************************************************************************** #* * #* OCaml * #* * -#* Sebastien Hinderer, projet Gallium, INRIA Paris * +#* Florian Angeletti, projet Cambium, Inria Paris * #* * -#* Copyright 2016 Institut National de Recherche en Informatique et * +#* Copyright 2020 Institut National de Recherche en Informatique et * #* en Automatique. * #* * #* All rights reserved. This file is distributed under the terms of * @@ -13,14 +12,20 @@ #* special exception on linking described in the file LICENSE. * #* * #************************************************************************** +ROOTDIR = .. +-include $(ROOTDIR)/Makefile.build_config -# This script provides command-line options to use by default -# when invoking ocamlopt +ifeq ($(DOCUMENTATION_TOOL),odoc) + include odoc/Makefile +else + include ocamldoc/Makefile +endif -# It is used to add that disable annoying linker warnings on some versions -# of OpenBSD +odoc-%: + $(MAKE) -C odoc $* ROOTDIR=../.. -case "$1" in - i386-*-openbsd5.[5-9]*|i386-*-openbsd[6-9].*) - echo "-ccopt -nopie";; -esac +ocamldoc-%: + $(MAKE) -C ocamldoc $* ROOTDIR=../.. + +clean: + rm -rf build odoc/build ocamldoc/build diff --git a/api_docgen/Makefile.common b/api_docgen/Makefile.common new file mode 100644 index 00000000..e360da66 --- /dev/null +++ b/api_docgen/Makefile.common @@ -0,0 +1,56 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Florian Angeletti, projet Cambium, Inria Paris * +#* * +#* Copyright 2020 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** +ROOTDIR = .. +DOCGEN= $(ROOTDIR)/api_docgen + +include $(ROOTDIR)/Makefile.common +include $(ROOTDIR)/stdlib/StdlibModules +include $(ROOTDIR)/Makefile.best_binaries +include $(DOCGEN)/Makefile.docfiles + +DOC_COMPILERLIBS_DIRS= $(addprefix $(ROOTDIR)/,\ + parsing utils typing bytecomp driver file_formats lambda) + +DOC_STDLIB_DIRS = $(addprefix $(ROOTDIR)/, stdlib \ + otherlibs/str otherlibs/$(UNIXLIB) otherlibs/dynlink \ + otherlibs/systhreads) + +.PHONY: all +all: html pdf man + +DIRS = $(addprefix build/,libref compilerlibref man latex texi \ + html html/libref html/compilerlibref) + +$(DIRS): + $(MKDIR) $@ + +pdf: build/latex/alldoc.pdf +latex: +man: +html: +build/latex/alldoc.pdf: build/latex/stdlib_input.tex \ + build/latex/compilerlibs_input.tex | build/latex/ifocamldoc.tex + +$(DOCGEN)/build/Compiler_libs.mld: $(DOCGEN)/Compiler_libs.pre.mld + cp $< $@ && echo "{!modules:$(compilerlibref_C)}" >> $@ + +build/latex/ifocamldoc.tex: $(ROOTDIR)/Makefile.config | build/latex + +build/latex/alldoc.tex:$(DOCGEN)/alldoc.tex | build/latex + cp $< $@ + +$(compilerlibref_TEXT:%=build/%.mld) $(libref_TEXT:%=build/%.mld): \ +build/%.mld:$(DOCGEN)/%.mld + cp $< $@ diff --git a/api_docgen/Makefile.docfiles b/api_docgen/Makefile.docfiles new file mode 100644 index 00000000..14a3b183 --- /dev/null +++ b/api_docgen/Makefile.docfiles @@ -0,0 +1,81 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Florian Angeletti, projet Cambium, Inria Paris * +#* * +#* Copyright 2020 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** + +# Capitalize first letter of argument +define up +$(shell echo $(1) | cut -c1 | tr '[:lower:]' '[:upper:]') +endef + +define capitalize_one +$(call up,$(1))$(shell echo $(1) | cut -c2-) +endef + +define capitalize +$(foreach m,$(1),$(call capitalize_one,$m)) +endef + +define sort +$(shell $(BEST_OCAMLDEP) -sort $(1)) +endef + + +str_MLIS := str.mli +unix_MLIS := unix.mli unixLabels.mli +dynlink_MLIS := dynlink.mli +thread_MLIS := \ + thread.mli condition.mli mutex.mli event.mli \ + threadUnix.mli semaphore.mli + +STDLIB=$(filter-out stdlib__Pervasives, $(STDLIB_MODULES)) + +stdlib_UNPREFIXED=$(filter-out pervasives, $(STDLIB_MODULE_BASENAMES)) + +otherlibref := $(dynlink_MLIS:%.mli=%) + +ifneq "$(filter str,$(OTHERLIBRARIES))" "" +otherlibref += $(str_MLIS:%.mli=%) +endif + +ifneq "$(filter %unix,$(OTHERLIBRARIES))" "" +otherlibref += $(unix_MLIS:%.mli=%) +endif + +ifneq "$(filter systhreads,$(OTHERLIBRARIES))" "" +otherlibref += $(thread_MLIS:%.mli=%) +endif + +libref_EXTRA=stdlib__pervasives +libref_TEXT=Ocaml_operators Format_tutorial +libref_C=$(call capitalize,$(libref) $(libref_EXTRA)) + +PARSING_MLIS := $(call sort, \ + $(notdir $(wildcard $(ROOTDIR)/parsing/*.mli))\ +) +UTILS_MLIS := $(call sort,$(notdir $(wildcard $(ROOTDIR)/utils/*.mli))) +DRIVER_MLIS := pparse.mli + +compilerlibref_MLIS= \ + $(PARSING_MLIS) \ + $(UTILS_MLIS) \ + $(DRIVER_MLIS) +compilerlibref=$(compilerlibref_MLIS:%.mli=%) +compilerlibref_TEXT=Compiler_libs +compilerlibref_C=$(call capitalize,$(compilerlibref)) + +ALL_LIBREF= $(libref_TEXT:%=libref/%) $(libref:%=libref/%) +ALL_COMPILERLIBREF= \ + $(compilerlibref_TEXT:%=compilerlibref/%) \ + $(compilerlibref:%=compilerlibref/%) +ALL_DOC= $(ALL_LIBREF) $(ALL_COMPILERLIBREF) diff --git a/stdlib/ocaml_operators.mld b/api_docgen/Ocaml_operators.mld similarity index 97% rename from stdlib/ocaml_operators.mld rename to api_docgen/Ocaml_operators.mld index de7f30ef..68393d74 100644 --- a/stdlib/ocaml_operators.mld +++ b/api_docgen/Ocaml_operators.mld @@ -7,14 +7,14 @@ are also listed as references. {%latex: % % Note: the tables below should be kept in sync with the one in -% manual/manual/refman/expr.etex . +% manual/src/refman/expr.etex . % \begin{tabular}{cc} \hline Operator class & Associativity \\ \hline $!\ldots$ $\tilde{}\ldots$ & -- \\ -$.\cdots()$ $.\cdots[]$ $.\cdots\\{\\}$ & -- \\ +$.\cdots()$ $.\cdots[]$ $.\cdots$\textbraceleft\textbraceright& -- \\ \#\ldots & left \\ function application & left \\ - -. & -- \\ diff --git a/api_docgen/alldoc.tex b/api_docgen/alldoc.tex new file mode 100644 index 00000000..ce782e72 --- /dev/null +++ b/api_docgen/alldoc.tex @@ -0,0 +1,93 @@ +\documentclass{book} + +\usepackage[colorlinks=true,breaklinks=true]{hyperref} +\usepackage{color} +\usepackage{lmodern} +\usepackage[T1]{fontenc} +\usepackage[strings,nohyphen]{underscore} +\input{ifocamldoc} +\ifocamldoc +\usepackage{ocamldoc} +\usepackage{textcomp} +\else +\usepackage{changepage} +\usepackage{longtable} +\usepackage{listings} +\newcommand{\ocamlcodefragment}[1]{{\ttfamily\setlength{\parindent}{0cm}% +\raggedright#1}} +\newcommand{\ocamlinlinecode}[1]{{\ttfamily#1}} +\newcommand{\bold}[1]{{\bfseries#1}} +\newenvironment{ocamlexception}{\bfseries}{} +\newenvironment{ocamlextension}{\bfseries}{} +\newenvironment{ocamlarrow}{} + +\newcommand{\ocamltag}[2]{\begin{ocaml#1}#2\end{ocaml#1}} +\newenvironment{ocamlkeyword}{\bfseries}{} +\newenvironment{ocamlconstructor}{\bfseries}{} +\newenvironment{ocamltype-var}{\itshape\ttfamily}{} + +\newcommand{\ocamlhighlight}{\bfseries\uline} +\newcommand{\ocamlerror}{\bfseries} +\newcommand{\ocamlwarning}{\bfseries} + +\definecolor{lightgray}{gray}{0.97} +\definecolor{gray}{gray}{0.5} +\newcommand{\ocamlcomment}{\color{gray}\normalfont\small} +\newcommand{\ocamlstring}{\color{gray}\bfseries} +\newenvironment{ocamlindent}{\begin{adjustwidth}{2em}{0pt}}{\end{adjustwidth}} +\newenvironment{ocamltabular}[2][l]{\begin{tabular}{#2}}% +{\end{tabular}} + +\lstnewenvironment{ocamlcodeblock}{ + \lstset{ + backgroundcolor = \color{lightgray}, + basicstyle=\ttfamily, + showstringspaces=false, + language=caml, + escapeinside={$}{$}, + columns=fullflexible, + stringstyle=\ocamlstring, + commentstyle=\ocamlcomment, + keepspaces=true, + keywordstyle=\ocamlkeyword, + moredelim=[is][\ocamlhighlight]{<<}{>>}, + moredelim=[s][\ocamlstring]{\{|}{|\}}, + moredelim=[s][\ocamlstring]{\{delimiter|}{|delimiter\}}, + keywords={[2]{val,initializer,nonrec}}, keywordstyle={[2]\ocamlkeyword}, + belowskip=0\baselineskip, + upquote=true, + literate={'"'}{\textquotesingle "\textquotesingle}3 + {'\\"'}{\textquotesingle \textbackslash"\textquotesingle}4, + } +}{} +\fi + +\ifocamldoc +\newcommand{\docitem}[2]{\input{#2}} +\else +\newcommand{\docitem}[2]{\input{#1/#2}} +\fi + +\begin{document} +\chapter{Stdlib} +\docitem{libref}{Stdlib.tex} +\input{stdlib_input} +\docitem{libref}{Ocaml_operators.tex} +\chapter{Dynlink} +\docitem{libref}{Dynlink.tex} +\chapter{Str} +\docitem{libref}{Str.tex} +\chapter{Thread} +\docitem{libref}{Condition.tex} +\docitem{libref}{Event.tex} +\docitem{libref}{Mutex.tex} +\docitem{libref}{Thread.tex} +\docitem{libref}{ThreadUnix.tex} +\docitem{libref}{Semaphore.tex} +\chapter{Unix} +\docitem{libref}{UnixLabels.tex} +\docitem{libref}{Unix.tex} +\chapter{Compilerlibs} +\docitem{compilerlibref}{Compiler_libs.tex} +\input{compilerlibs_input.tex} +\end{document} diff --git a/api_docgen/ocamldoc/Makefile b/api_docgen/ocamldoc/Makefile new file mode 100644 index 00000000..87cd9cdb --- /dev/null +++ b/api_docgen/ocamldoc/Makefile @@ -0,0 +1,126 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Florian Angeletti, projet Cambium, Inria Paris * +#* * +#* Copyright 2020 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** +include $(ROOTDIR)/api_docgen/Makefile.common +include $(ROOTDIR)/ocamldoc/Makefile.best_ocamldoc +vpath %.mli $(ROOTDIR)/stdlib $(DOC_COMPILERLIBS_DIRS) $(DOC_STDLIB_DIRS) + + +man: build/man/Stdlib.3o +latex: build/latex/Stdlib.tex +html: \ + build/html/libref/Stdlib.html \ + build/html/compilerlibref/Compiler_libs.html +texi: build/texi/stdlib.texi + +DOC_STDLIB_INCLUDES= $(addprefix -I , $(DOC_STDLIB_DIRS)) + +DOC_ALL_INCLUDES = \ + $(DOC_STDLIB_INCLUDES) \ + $(addprefix -I ,$(DOC_COMPILERLIBS_DIRS)) + +libref=$(stdlib_UNPREFIXED) $(otherlibref) + +ALL_MAN= $(ALL_DOC:%=build/man/%.3o) +ALL_LATEX= $(ALL_DOC:%=build/latex/%.tex) + +build/latex/ifocamldoc.tex: | build/latex + printf '\\newif\ifocamldoc\ocamldoctrue\n' > $@ + +$(libref:%=build/libref/%.odoc): build/libref/%.odoc: %.mli | build/libref + $(OCAMLDOC_RUN) -nostdlib -hide Stdlib -lib Stdlib \ + -pp \ +"$(AWK) -v ocamldoc=true -f $(ROOTDIR)/stdlib/expand_module_aliases.awk" \ + $(DOC_STDLIB_INCLUDES) $< -dump $@ + +$(compilerlibref:%=build/compilerlibref/%.odoc):\ +build/compilerlibref/%.odoc: %.mli | build/compilerlibref + $(OCAMLDOC_RUN) -nostdlib -hide Stdlib \ + $(DOC_ALL_INCLUDES) $< -dump $@ + +$(compilerlibref_TEXT:%=build/compilerlibref/%.odoc):\ +build/compilerlibref/%.odoc: $(DOCGEN)/build/%.mld | build/compilerlibref + $(OCAMLDOC_RUN) $(DOC_ALL_INCLUDES) -text $< -dump $@ + +$(libref_TEXT:%=build/libref/%.odoc):\ +build/libref/%.odoc: $(DOCGEN)/%.mld | build/libref + $(OCAMLDOC_RUN) $(DOC_STDLIB_INCLUDES) -text $< -dump $@ + +ALL_COMPILED_DOC=$(ALL_DOC:%=build/%.odoc) +build/man/Stdlib.3o: $(ALL_COMPILED_DOC) | build/man + $(OCAMLDOC_RUN) -man -d build/man -man-mini \ + -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ + $(addprefix -load , $(ALL_COMPILED_DOC)) + +HTML_OPTIONS= -charset="utf8" -colorize-code -nonavbar + +build/html/libref/Stdlib.html: $(ALL_LIBREF:%=build/%.odoc) | build/html/libref + $(OCAMLDOC_RUN) -html -d build/html/libref \ + $(HTML_OPTIONS) \ + -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ + $(addprefix -load , $(ALL_LIBREF:%=build/%.odoc)) + +build/html/compilerlibref/Compiler_libs.html: \ + $(ALL_COMPILERLIBREF:%=build/%.odoc) | build/html/compilerlibref + $(OCAMLDOC_RUN) -html -d build/html/compilerlibref \ + -nostdlib -hide Stdlib -t "OCaml compiler library" \ + $(HTML_OPTIONS) \ + -intro $(DOCGEN)/build/Compiler_libs.mld \ + $(addprefix -load , $(ALL_COMPILERLIBREF:%=build/%.odoc)) + +build/texi/stdlib.texi: $(ALL_COMPILED_DOC) | build/texi + $(OCAMLDOC_RUN) -texi -o $@ \ + -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ + $(addprefix -load , $(ALL_COMPILED_DOC)) + +build/latex/Stdlib.tex: $(ALL_COMPILED_DOC) | build/latex + $(OCAMLDOC_RUN) -latex -o build/latex/all.tex \ + -hide Stdlib -lib Stdlib $(DOC_ALL_INCLUDES) \ + -sepfiles \ + -latextitle "1,subsection*" \ + -latextitle "2,subsubsection*" \ + -latex-type-prefix "TYP" \ + -latex-module-prefix "" \ + -latex-module-type-prefix "" \ + -latex-value-prefix "" \ + -nostdlib -hide Stdlib -lib Stdlib -t "OCaml library" \ + $(addprefix -load , $(ALL_COMPILED_DOC)) + +build/latex/alldoc.pdf: build/latex/Stdlib.tex build/latex/alldoc.tex \ + | build/latex + cd build/latex && \ + TEXINPUTS=$${TEXINPUTS}:$(ROOTDIR)/ocamldoc pdflatex alldoc + cd build/latex && \ + TEXINPUTS=$${TEXINPUTS}:$(ROOTDIR)/ocamldoc pdflatex alldoc + +stdlib_INPUT=$(foreach module,\ +$(filter-out stdlib.mli camlinternal%,$(stdlib_UNPREFIXED)),\ +\\input{$(call capitalize,$(module)).tex}\ +) +build/latex/stdlib_input.tex: | build/latex + echo $(stdlib_INPUT) > $@ + +compilerlibs_INPUT=$(foreach module,\ +$(filter-out camlinternal%,$(compilerlibref)),\ +\\input{$(call capitalize,$(module)).tex}) +build/latex/compilerlibs_input.tex: | build/latex + echo $(compilerlibs_INPUT) > $@ + +INSTALL_MANODIR=$(INSTALL_MANDIR)/man3 +.PHONY:install +install: + $(MKDIR) "$(INSTALL_MANODIR)" + if test -d build/man; then \ + $(INSTALL_DATA) build/man/*.3o "$(INSTALL_MANODIR)"; \ + else : ; fi diff --git a/api_docgen/odoc/Makefile b/api_docgen/odoc/Makefile new file mode 100644 index 00000000..5c22a15b --- /dev/null +++ b/api_docgen/odoc/Makefile @@ -0,0 +1,193 @@ +#************************************************************************** +#* * +#* OCaml * +#* * +#* Florian Angeletti, projet Cambium, Inria Paris * +#* * +#* Copyright 2020 Institut National de Recherche en Informatique et * +#* en Automatique. * +#* * +#* All rights reserved. This file is distributed under the terms of * +#* the GNU Lesser General Public License version 2.1, with the * +#* special exception on linking described in the file LICENSE. * +#* * +#************************************************************************** +include $(ROOTDIR)/api_docgen/Makefile.common + +vpath %.cmti $(ROOTDIR)/stdlib $(DOC_COMPILERLIBS_DIRS) $(DOC_STDLIB_DIRS) +vpath %.cmt $(ROOTDIR)/stdlib + +ifeq ($(DOCUMENTATION_TOOL),odoc) + odoc ?= $(DOCUMENTATION_TOOL_CMD) +else + odoc ?= odoc +endif + +libref = $(STDLIB) $(otherlibref) + +# odoc needs a "page-" prefix for a mld documentation file +define page_name + $(dir $1)page-$(notdir $1) +endef + +define stdlib_prefix + $(if $(filter-out stdlib camlinternal%,$1),\ + Stdlib.$(call capitalize,$1),\ + $(call capitalize, $1)) +endef + +# define the right conditional for the manual +build/latex/ifocamldoc.tex: | build/latex + printf '\\newif\ifocamldoc\ocamldocfalse\n' > $@ + + +# \input{} all modules in the stdlib for the latex api manual +stdlib_INPUT= $(foreach module,\ +$(filter-out stdlib camlinternal%, $(STDLIB:stdlib__%=%)),\ +\\input{libref/Stdlib.$(call capitalize,$(module)).tex}\ +) + +build/latex/stdlib_input.tex: | build/latex + echo $(stdlib_INPUT)> $@ + +build/latex/compilerlibs_input.tex: | build/latex + echo $(compilerlibref_C:%=\\input{compilerlibref/%})> $@ + +# The build process for odoc has 3 phases: +# 1. generation of internal individual documentation files (.odoc) +# 2. generation of linked documentation files (.odocl) +# 3. generation of the actual (.tex,.html,.3o) documentation + +# rules for the mld files +$(libref_TEXT:%=build/libref/page-%.odoc): +build/libref/page-%.odoc:$(DOCGEN)/%.mld | build/libref + $(odoc) compile -I build/libref --package libref $< -o $@ + +$(compilerlibref_TEXT:%=build/compilerlibref/page-%.odoc):\ +build/compilerlibref/page-%.odoc:$(DOCGEN)/build/%.mld | build/compilerlibref + $(odoc) compile -I build/libref --package compilerlibref $< -o $@ + +# rules for the stdlib and otherlibs .doc files +$(libref:%=build/libref/%.odoc):\ +build/libref/%.odoc: %.cmti | build/libref + $(odoc) compile -I build/libref --package libref $< -o $@ + +# pervasives is handled separatedly due to the lack of cmti file +$(libref_EXTRA:%=build/libref/%.odoc):build/libref/%.odoc:%.cmt + $(odoc) compile -I build/libref --package libref $< -o $@ + +# rules for the compilerlib documentation +$(compilerlibref:%=build/compilerlibref/%.odoc):\ +build/compilerlibref/%.odoc: %.cmti $(libref:%=build/libref/%.odoc) \ +| build/compilerlibref + $(odoc) compile -I build/libref -I build/compilerlibref \ + --package compilerlibref $< -o $@ + +ALL_TEXT = $(libref_TEXT:%=libref/%) $(compilerlibref_TEXT:%=compilerlibref/%) +ALL_PAGE_TEXT=$(foreach mld,$(ALL_TEXT),$(call page_name,$(mld))) +TARGET_UNITS= \ + $(compilerlibref:%=compilerlibref/%) \ + libref/stdlib $(otherlibref:%=libref/%) \ + $(addprefix libref/,$(filter camlinternal%,$(STDLIB))) +ALL_UNITS = $(compilerlibref:%=compilerlibref/%) $(libref:%=libref/%) +ALL_PAGED_DOC = $(TARGET_UNITS) $(ALL_PAGE_TEXT) + +# rules for odocl generation +# Note that we are using a dependency on the whole phase 1 rather than tracking +# the individual file dependencies +$(ALL_UNITS:%=build/%.odocl):%.odocl:%.odoc \ + | $(ALL_PAGED_DOC:%=build/%.odoc) + $(odoc) link -I build/libref -I build/compilerlibref $< + +$(ALL_PAGE_TEXT:%=build/%.odocl):%.odocl:%.odoc \ + | $(ALL_PAGED_DOC:%=build/%.odoc) + $(odoc) link -I build/libref -I build/compilerlibref $< + +# Rules for all three backends: + +ALL_HTML = $(ALL_PAGED_DOC:%=build/%.html.stamp) +ALL_MAN = $(ALL_PAGED_DOC:%=build/%.3o.stamp) +ALL_LATEX = $(ALL_PAGED_DOC:%=build/%.tex.stamp) + +build/libref/stdlib.html.stamp: $(STDLIB:%=build/libref/%.odocl) | build/libref +build/libref/stdlib.3o.stamp: $(STDLIB:%=build/libref/%.odocl) | build/libref +build/libref/stdlib.tex.stamp: $(STDLIB:%=build/libref/%.odocl) | build/libref + +man: $(ALL_MAN) +html: $(ALL_HTML) build/html/odoc.css +html: build/libref/index.html.stamp build/compilerlibref/index.html.stamp + +# Html rules +$(ALL_HTML): %.html.stamp: %.odocl | build/html + $(odoc) html-generate --output-dir build/html $< + touch $@ + +build/html/odoc.css: | build/html + $(odoc) support-files --output-dir build/html + +$(build/libref.html.stamp build/compilerlibref.html.stamp): +%.html.stamp: %.mld | build/ + $(odoc) html-generate --output-dir build/html $< + touch $@ + +# Html indexes for the api documentation + +# The stdlib index is generated from the list of stdlib modules. +stdlib_INDEX=\ + $(foreach m,$(stdlib_UNPREFIXED),$(call stdlib_prefix,$m))\ + $(call capitalize, $(otherlibref)) +build/libref.mld: + echo {0 OCaml standard library} {!modules:$(stdlib_INDEX)} > $@ + +build/libref/index.html.stamp: $(ALL_HTML) build/libref.mld | build/libref + $(odoc) compile --package libref build/libref.mld + $(odoc) link -I build/libref build/page-libref.odoc + $(odoc) html-generate build/page-libref.odocl --output-dir build/html + mv build/html/libref/libref.html build/html/libref/index.html + touch $@ + +build/compilerlibref/index.html.stamp: $(ALL_HTML) \ + build/compilerlibref/page-Compiler_libs.html.stamp | build/compilerlibref + cp build/html/compilerlibref/Compiler_libs.html \ + build/html/compilerlibref/index.html + touch $@ + +# Latex rules + +latex: $(ALL_LATEX) + + +build/latex/alldoc.pdf: $(ALL_LATEX) build/latex/alldoc.tex \ +build/latex/stdlib_input.tex build/latex/compilerlibs_input.tex \ +| build/latex + cd build/latex && pdflatex alldoc.tex + cd build/latex && pdflatex alldoc.tex + +# We include children pages directly except for the root Stdlib module +NOT_STDLIB=$(filter-out libref/stdlib,$(ALL_PAGED_DOC)) +$(NOT_STDLIB:%=build/%.tex.stamp):\ +build/%.tex.stamp: build/%.odocl | build/ + $(odoc) latex-generate --with-children=true --output-dir build/latex $< + touch $@ + +# Stdlib latex page: we manually integrate stdlib module +build/libref/stdlib.tex.stamp: build/libref/stdlib.odocl | build/libref + $(odoc) latex-generate --with-children=false --output-dir build/latex $< + touch $@ + +# Man pages +$(ALL_PAGED_DOC:%=build/%.3o.stamp):build/%.3o.stamp:build/%.odocl | build/ + $(odoc) man-generate --output-dir build/man $< + touch $@ + +# Man pages are the only installed documentation +INSTALL_MANODIR=$(INSTALL_MANDIR)/man3 +.PHONY:install +install: + $(MKDIR) "$(INSTALL_MANODIR)" + if test -d build/man/libref ; then \ + $(INSTALL_DATA) build/man/libref/* "$(INSTALL_MANODIR)"; \ + else : ; fi + if test -d build/man/compilerlibref ; then \ + $(INSTALL_DATA) build/man/libref/* "$(INSTALL_MANODIR)"; \ + else : ; fi diff --git a/appveyor.yml b/appveyor.yml index e87600b5..719be706 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -26,11 +26,21 @@ environment: CYG_ROOT: C:/cygwin64 CYG_MIRROR: http://mirrors.kernel.org/sourceware/cygwin/ CYG_CACHE: C:/cygwin64/var/cache/setup - FLEXDLL_VERSION: 0.38 + FLEXDLL_VERSION: 0.39 OCAMLRUNPARAM: v=0,b + FORCE_CYGWIN_UPGRADE: 0 + BUILD_MODE: world.opt matrix: - PORT: mingw32 + BOOTSTRAP_FLEXDLL: true - PORT: msvc64 + BOOTSTRAP_FLEXDLL: false + BUILD_MODE: steps + - PORT: msvc32 + BOOTSTRAP_FLEXDLL: false + BUILD_MODE: C + SDK: |- + "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x86 matrix: fast_finish: true diff --git a/asmcomp/CSEgen.ml b/asmcomp/CSEgen.ml index 7ba1a1c2..2f54a35c 100644 --- a/asmcomp/CSEgen.ml +++ b/asmcomp/CSEgen.ml @@ -25,7 +25,7 @@ type valnum = int type op_class = | Op_pure (* pure arithmetic, produce one or several result *) | Op_checkbound (* checkbound-style: no result, can raise an exn *) - | Op_load (* memory load *) + | Op_load of Asttypes.mutable_flag (* memory load *) | Op_store of bool (* memory store, false = init, true = assign *) | Op_other (* anything else that does not allocate nor store in memory *) @@ -40,29 +40,30 @@ module Equations = struct Map.Make(struct type t = rhs let compare = Stdlib.compare end) type 'a t = - { load_equations : 'a Rhs_map.t; + { mutable_load_equations : 'a Rhs_map.t; other_equations : 'a Rhs_map.t } let empty = - { load_equations = Rhs_map.empty; + { mutable_load_equations = Rhs_map.empty; other_equations = Rhs_map.empty } let add op_class op v m = match op_class with - | Op_load -> - { m with load_equations = Rhs_map.add op v m.load_equations } + | Op_load Mutable -> + { m with mutable_load_equations = + Rhs_map.add op v m.mutable_load_equations } | _ -> { m with other_equations = Rhs_map.add op v m.other_equations } let find op_class op m = match op_class with - | Op_load -> - Rhs_map.find op m.load_equations + | Op_load Mutable -> + Rhs_map.find op m.mutable_load_equations | _ -> Rhs_map.find op m.other_equations - let remove_loads m = - { load_equations = Rhs_map.empty; + let remove_mutable_loads m = + { mutable_load_equations = Rhs_map.empty; other_equations = m.other_equations } end @@ -190,8 +191,8 @@ let set_unknown_regs n rs = (* Keep only the equations satisfying the given predicate. *) -let remove_load_numbering n = - { n with num_eqs = Equations.remove_loads n.num_eqs } +let remove_mutable_load_numbering n = + { n with num_eqs = Equations.remove_mutable_loads n.num_eqs } (* Forget everything we know about registers of type [Addr]. *) @@ -223,11 +224,11 @@ method class_of_operation op = | Imove | Ispill | Ireload -> assert false (* treated specially *) | Iconst_int _ | Iconst_float _ | Iconst_symbol _ -> Op_pure | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ -> assert false (* treated specially *) + | Iextcall _ | Iopaque -> assert false (* treated specially *) | Istackoffset _ -> Op_other - | Iload(_,_) -> Op_load + | Iload(_,_,mut) -> Op_load mut | Istore(_,_,asg) -> Op_store asg - | Ialloc _ -> assert false (* treated specially *) + | Ialloc _ | Ipoll _ -> assert false (* treated specially *) | Iintop(Icheckbound) -> Op_checkbound | Iintop _ -> Op_pure | Iintop_imm(Icheckbound, _) -> Op_checkbound @@ -235,7 +236,6 @@ method class_of_operation op = | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat -> Op_pure | Ispecific _ -> Op_other - | Iname_for_debugger _ -> Op_pure (* Operations that are so cheap that it isn't worth factoring them. *) @@ -244,11 +244,11 @@ method is_cheap_operation op = | Iconst_int _ -> true | _ -> false -(* Forget all equations involving memory loads. Performed after a - non-initializing store *) +(* Forget all equations involving mutable memory loads. + Performed after a non-initializing store *) method private kill_loads n = - remove_load_numbering n + remove_mutable_load_numbering n (* Perform CSE on the given instruction [i] and its successors. [n] is the value numbering current at the beginning of [i]. *) @@ -277,23 +277,26 @@ method private cse n i = arguments is always a memory load. For simplicity, we just forget everything. *) {i with next = self#cse empty_numbering i.next} - | Iop (Ialloc _) -> + | Iop Iopaque -> + (* Assume arbitrary side effects from Iopaque *) + {i with next = self#cse empty_numbering i.next} + | Iop (Ialloc _) | Iop (Ipoll _) -> (* For allocations, we must avoid extending the live range of a pseudoregister across the allocation if this pseudoreg is a derived heap pointer (a pointer into the heap that does not point to the beginning of a Caml block). PR#6484 is an example of this situation. Such pseudoregs have type [Addr]. Pseudoregs with types other than [Addr] can be kept. - Moreover, allocation can trigger the asynchronous execution + Moreover, allocations and polls can trigger the asynchronous execution of arbitrary Caml code (finalizer, signal handler, context switch), which can contain non-initializing stores. - Hence, all equations over loads must be removed. *) + Hence, all equations over mutable loads must be removed. *) let n1 = kill_addr_regs (self#kill_loads n) in let n2 = set_unknown_regs n1 i.res in {i with next = self#cse n2 i.next} | Iop op -> begin match self#class_of_operation op with - | (Op_pure | Op_checkbound | Op_load) as op_class -> + | (Op_pure | Op_checkbound | Op_load _) as op_class -> let (n1, varg) = valnum_regs n i.arg in let n2 = set_unknown_regs n1 (Proc.destroyed_at_oper i.desc) in begin match find_equation op_class n1 (op, varg) with @@ -331,7 +334,7 @@ method private cse n i = {i with next = self#cse n2 i.next} | Op_store true -> (* A non-initializing store can invalidate - anything we know about prior loads. *) + anything we know about prior mutable loads. *) let n1 = set_unknown_regs n (Proc.destroyed_at_oper i.desc) in let n2 = set_unknown_regs n1 i.res in let n3 = self#kill_loads n2 in diff --git a/asmcomp/CSEgen.mli b/asmcomp/CSEgen.mli index c80e7b4c..26e93e91 100644 --- a/asmcomp/CSEgen.mli +++ b/asmcomp/CSEgen.mli @@ -19,7 +19,7 @@ type op_class = | Op_pure (* pure, produce one result *) | Op_checkbound (* checkbound-style: no result, can raise an exn *) - | Op_load (* memory load *) + | Op_load of Asttypes.mutable_flag (* memory load *) | Op_store of bool (* memory store, false = init, true = assign *) | Op_other (* anything else that does not allocate nor store in memory *) diff --git a/asmcomp/amd64/CSE.ml b/asmcomp/amd64/CSE.ml index 60503d69..b473e7b2 100644 --- a/asmcomp/amd64/CSE.ml +++ b/asmcomp/amd64/CSE.ml @@ -30,7 +30,7 @@ method! class_of_operation op = | Ilea _ | Isextend32 | Izextend32 -> Op_pure | Istore_int(_, _, is_asg) -> Op_store is_asg | Ioffset_loc(_, _) -> Op_store true - | Ifloatarithmem _ | Ifloatsqrtf _ -> Op_load + | Ifloatarithmem _ | Ifloatsqrtf _ -> Op_load Mutable | Ibswap _ | Isqrtf -> super#class_of_operation op end | _ -> super#class_of_operation op diff --git a/asmcomp/amd64/arch.ml b/asmcomp/amd64/arch.ml index 581db3db..0d0c5406 100644 --- a/asmcomp/amd64/arch.ml +++ b/asmcomp/amd64/arch.ml @@ -134,7 +134,20 @@ let print_specific_operation printreg op ppf arg = | Izextend32 -> fprintf ppf "zextend32 %a" printreg arg.(0) +(* Are we using the Windows 64-bit ABI? *) + let win64 = match Config.system with | "win64" | "mingw64" | "cygwin" -> true | _ -> false + +(* Specific operations that are pure *) + +let operation_is_pure = function + | Ilea _ | Ibswap _ | Isqrtf | Isextend32 | Izextend32 -> true + | Ifloatarithmem _ | Ifloatsqrtf _ -> true + | _ -> false + +(* Specific operations that can raise *) + +let operation_can_raise _ = false diff --git a/asmcomp/amd64/emit.mlp b/asmcomp/amd64/emit.mlp index 06988c67..123e2d07 100644 --- a/asmcomp/amd64/emit.mlp +++ b/asmcomp/amd64/emit.mlp @@ -23,6 +23,7 @@ open Reg open Mach open Linear open Emitaux +open Emitenv open X86_ast open X86_proc @@ -67,35 +68,24 @@ let emit_debug_info dbg = let fp = Config.with_frame_pointers -(* Tradeoff between code size and code speed *) - -let fastcode_flag = ref true - -(* Layout of the stack frame *) -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let frame_required = ref false - -let frame_size () = (* includes return address *) - if !frame_required then begin +let frame_size env = (* includes return address *) + if env.f.fun_frame_required then begin let sz = - (!stack_offset + 8 * (num_stack_slots.(0) + num_stack_slots.(1)) + 8 + (env.stack_offset + + 8 * (env.f.fun_num_stack_slots.(0) + env.f.fun_num_stack_slots.(1)) + + 8 + (if fp then 8 else 0)) in Misc.align sz 16 end else - !stack_offset + 8 + env.stack_offset + 8 -let slot_offset loc cl = +let slot_offset env loc cl = match loc with - | Incoming n -> frame_size() + n + | Incoming n -> (frame_size env) + n | Local n -> if cl = 0 - then !stack_offset + n * 8 - else !stack_offset + (num_stack_slots.(0) + n) * 8 + then env.stack_offset + n * 8 + else env.stack_offset + (env.f.fun_num_stack_slots.(0) + n) * 8 | Outgoing n -> n (* Symbols *) @@ -175,19 +165,19 @@ let label s = sym (emit_label s) let def_label ?typ s = D.label ?typ (emit_label s) -let emit_Llabel fallthrough lbl = - if not fallthrough && !fastcode_flag then D.align 4; +let emit_Llabel env fallthrough lbl = + if not fallthrough && env.f.fun_fast then D.align 4; def_label lbl (* Output a pseudo-register *) -let reg = function +let reg env = function | { loc = Reg.Reg r } -> register_name r | { loc = Stack s; typ = Float } as r -> - let ofs = slot_offset s (register_class r) in + let ofs = slot_offset env s (register_class r) in mem64 REAL8 ofs RSP | { loc = Stack s } as r -> - let ofs = slot_offset s (register_class r) in + let ofs = slot_offset env s (register_class r) in mem64 QWORD ofs RSP | { loc = Unknown } -> assert false @@ -196,31 +186,22 @@ let reg64 = function | { loc = Reg.Reg r } -> int_reg_name.(r) | _ -> assert false - -let res i n = reg i.res.(n) - -let arg i n = reg i.arg.(n) - +let arg env i n = reg env i.arg.(n) +let res env i n = reg env i.res.(n) (* Output a reference to the lower 8, 16 or 32 bits of a register *) let reg_low_8_name = Array.map (fun r -> Reg8L r) int_reg_name let reg_low_16_name = Array.map (fun r -> Reg16 r) int_reg_name let reg_low_32_name = Array.map (fun r -> Reg32 r) int_reg_name -let emit_subreg tbl typ r = +let emit_subreg env tbl typ r = match r.loc with | Reg.Reg r when r < 13 -> tbl.(r) - | Stack s -> mem64 typ (slot_offset s (register_class r)) RSP + | Stack s -> mem64 typ (slot_offset env s (register_class r)) RSP | _ -> assert false -let arg8 i n = emit_subreg reg_low_8_name BYTE i.arg.(n) -let arg16 i n = emit_subreg reg_low_16_name WORD i.arg.(n) -let arg32 i n = emit_subreg reg_low_32_name DWORD i.arg.(n) let arg64 i n = reg64 i.arg.(n) -let res16 i n = emit_subreg reg_low_16_name WORD i.res.(n) -let res32 i n = emit_subreg reg_low_32_name DWORD i.res.(n) - (* Output an addressing mode *) let addressing addr typ i n = @@ -241,7 +222,7 @@ let addressing addr typ i n = (* Record live pointers at call points -- see Emitaux *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label () in let live_offset = ref [] in Reg.Set.iter @@ -249,60 +230,40 @@ let record_frame_label live dbg = | {typ = Val; loc = Reg r} -> live_offset := ((r lsl 1) + 1) :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> () ) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in def_label lbl -(* Record calls to the GC -- we've moved them out of the way *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame: label; (* Label of frame descriptor *) - } - -let call_gc_sites = ref ([] : gc_call list) - let emit_call_gc gc = def_label gc.gc_lbl; emit_call "caml_call_gc"; - def_label gc.gc_frame; + def_label gc.gc_frame_lbl; I.jmp (label gc.gc_return_lbl) -(* Record calls to caml_ml_array_bound_error. - In -g mode we maintain one call to - caml_ml_array_bound_error per bound check site. Without -g, we can share - a single call. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame: label; (* Label of frame descriptor *) - (* As for [gc_call]. *) - } - -let bound_error_sites = ref ([] : bound_error_call list) -let bound_error_call = ref 0 - -let bound_error_label dbg = +let bound_error_label env dbg = if !Clflags.debug then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := - { bd_lbl = lbl_bound_error; bd_frame = lbl_frame; } :: !bound_error_sites; + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- { bd_lbl = lbl_bound_error; bd_frame = lbl_frame; } + :: env.bound_error_sites; lbl_bound_error end else begin - if !bound_error_call = 0 then bound_error_call := new_label(); - !bound_error_call + match env.bound_error_call with + | None -> + let lbl = new_label () in + env.bound_error_call <- Some lbl; + lbl + | Some lbl -> lbl end let emit_call_bound_error bd = @@ -310,12 +271,13 @@ let emit_call_bound_error bd = emit_call "caml_ml_array_bound_error"; def_label bd.bd_frame -let emit_call_bound_errors () = - List.iter emit_call_bound_error !bound_error_sites; - if !bound_error_call > 0 then begin - def_label !bound_error_call; +let emit_call_bound_errors env = + List.iter emit_call_bound_error env.bound_error_sites; + match env.bound_error_call with + | Some lbl -> + def_label lbl; emit_call "caml_ml_array_bound_error" - end + | None -> () (* Names for instructions *) @@ -354,14 +316,15 @@ let cond = function (* Output an = 0 or <> 0 test. *) -let output_test_zero arg = +let output_test_zero env arg = match arg.loc with - | Reg.Reg _ -> I.test (reg arg) (reg arg) - | _ -> I.cmp (int 0) (reg arg) + | Reg.Reg _ -> I.test (reg env arg) (reg env arg) + | _ -> I.cmp (int 0) (reg env arg) (* Output a floating-point compare and branch *) -let emit_float_test cmp i lbl = +let emit_float_test env cmp i lbl = + let arg = arg env in (* Effect of comisd on flags and conditional branches: ZF PF CF cond. branches taken unordered 1 1 1 je, jb, jbe, jp @@ -409,9 +372,9 @@ let emit_float_test cmp i lbl = (* Deallocate the stack frame before a return or tail call *) -let output_epilogue f = - if !frame_required then begin - let n = frame_size() - 8 - (if fp then 8 else 0) in +let output_epilogue env f = + if env.f.fun_frame_required then begin + let n = (frame_size env) - 8 - (if fp then 8 else 0) in if n <> 0 then begin I.add (int n) rsp; @@ -471,25 +434,27 @@ let emit_named_text_section func_name = (* Output the assembly code for an instruction *) -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 - (* Emit an instruction *) -let emit_instr fallthrough i = +let emit_instr env fallthrough i = + let arg8 i n = emit_subreg env reg_low_8_name BYTE i.arg.(n) in + let arg16 i n = emit_subreg env reg_low_16_name WORD i.arg.(n) in + let arg32 i n = emit_subreg env reg_low_32_name DWORD i.arg.(n) in + let res16 i n = emit_subreg env reg_low_16_name WORD i.res.(n) in + let res32 i n = emit_subreg env reg_low_32_name DWORD i.res.(n) in + let arg = arg env in + let res = res env in emit_debug_info i.dbg; match i.desc with | Lend -> () | Lprologue -> - assert (!prologue_required); + assert (env.f.fun_prologue_required); if fp then begin I.push rbp; cfi_adjust_cfa_offset 8; I.mov rsp rbp; end; - if !frame_required then begin - let n = frame_size() - 8 - (if fp then 8 else 0) in + if env.f.fun_frame_required then begin + let n = (frame_size env) - 8 - (if fp then 8 else 0) in if n <> 0 then begin I.sub (int n) rsp; @@ -500,9 +465,9 @@ let emit_instr fallthrough i = let src = i.arg.(0) and dst = i.res.(0) in if src.loc <> dst.loc then begin match src.typ, src.loc, dst.loc with - | Float, Reg.Reg _, Reg.Reg _ -> I.movapd (reg src) (reg dst) - | Float, _, _ -> I.movsd (reg src) (reg dst) - | _ -> I.mov (reg src) (reg dst) + | Float, Reg.Reg _, Reg.Reg _ -> I.movapd (reg env src) (reg env dst) + | Float, _, _ -> I.movsd (reg env src) (reg env dst) + | _ -> I.mov (reg env src) (reg env dst) end | Lop(Iconst_int n) -> if n = 0n then begin @@ -536,19 +501,19 @@ let emit_instr fallthrough i = load_symbol_addr s (res i 0) | Lop(Icall_ind) -> I.call (arg i 0); - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Icall_imm { func; }) -> add_used_symbol func; emit_call func; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Itailcall_ind) -> - output_epilogue (fun () -> I.jmp (arg i 0)) + output_epilogue env (fun () -> I.jmp (arg i 0)) | Lop(Itailcall_imm { func; }) -> begin - if func = !function_name then - I.jmp (label !tailrec_entry_point) + if func = env.f.fun_name then + I.jmp (label env.f.fun_tailrec_entry_point_label) else begin - output_epilogue begin fun () -> + output_epilogue env begin fun () -> add_used_symbol func; emit_jump func end @@ -559,7 +524,7 @@ let emit_instr fallthrough i = if alloc then begin load_symbol_addr func rax; emit_call "caml_c_call"; - record_frame i.live (Dbg_other i.dbg); + record_frame env i.live (Dbg_other i.dbg); if system <> S_win64 then begin (* TODO: investigate why such a diff. This comes from: @@ -580,8 +545,8 @@ let emit_instr fallthrough i = then I.sub (int n) rsp; if n <> 0 then cfi_adjust_cfa_offset n; - stack_offset := !stack_offset + n - | Lop(Iload(chunk, addr)) -> + env.stack_offset <- env.stack_offset + n + | Lop(Iload(chunk, addr, _mut)) -> let dest = res i 0 in begin match chunk with | Word_int | Word_val -> @@ -621,21 +586,21 @@ let emit_instr fallthrough i = end | Lop(Ialloc { bytes = n; dbginfo }) -> assert (n <= (Config.max_young_wosize + 1) * Arch.size_addr); - if !fastcode_flag then begin + if env.f.fun_fast then begin I.sub (int n) r15; I.cmp (domain_field Domainstate.Domain_young_limit) r15; let lbl_call_gc = new_label() in let lbl_frame = - record_frame_label i.live (Dbg_alloc dbginfo) + record_frame_label env i.live (Dbg_alloc dbginfo) in I.jb (label lbl_call_gc); let lbl_after_alloc = new_label() in def_label lbl_after_alloc; I.lea (mem64 NONE 8 R15) (res i 0); - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame = lbl_frame; } :: !call_gc_sites + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites end else begin begin match n with | 16 -> emit_call "caml_alloc1" @@ -645,10 +610,31 @@ let emit_instr fallthrough i = I.sub (int n) r15; emit_call "caml_allocN" end; - let label = record_frame_label i.live (Dbg_alloc dbginfo) in + let label = record_frame_label env i.live (Dbg_alloc dbginfo) in def_label label; I.lea (mem64 NONE 8 R15) (res i 0) end + | Lop(Ipoll { return_label }) -> + I.cmp (domain_field Domainstate.Domain_young_limit) r15; + let gc_call_label = new_label () in + let lbl_after_poll = match return_label with + | None -> new_label() + | Some(lbl) -> lbl in + let lbl_frame = + record_frame_label env i.live (Dbg_alloc []) + in + begin match return_label with + | None -> I.jbe (label gc_call_label) + | Some return_label -> I.ja (label return_label) + end; + env.call_gc_sites <- + { gc_lbl = gc_call_label; + gc_return_lbl = lbl_after_poll; + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; + begin match return_label with + | None -> def_label lbl_after_poll + | Some _ -> I.jmp (label gc_call_label) + end | Lop(Iintop(Icomp cmp)) -> I.cmp (arg i 1) (arg i 0); I.set (cond cmp) al; @@ -658,11 +644,11 @@ let emit_instr fallthrough i = I.set (cond cmp) al; I.movzx al (res i 0) | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in I.cmp (arg i 1) (arg i 0); I.jbe (label lbl) | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in I.cmp (int n) (arg i 0); I.jbe (label lbl) | Lop(Iintop(Idiv | Imod)) -> @@ -695,6 +681,8 @@ let emit_instr fallthrough i = I.cvtsi2sd (arg i 0) (res i 0) | Lop(Iintoffloat) -> I.cvttsd2si (arg i 0) (res i 0) + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific(Ilea addr)) -> I.lea (addressing addr NONE i 0) (res i 0) | Lop(Ispecific(Istore_int(n, addr, _))) -> @@ -724,38 +712,37 @@ let emit_instr fallthrough i = I.movsxd (arg32 i 0) (res i 0) | Lop(Ispecific(Izextend32)) -> I.mov (arg32 i 0) (res32 i 0) - | Lop (Iname_for_debugger _) -> () | Lreloadretaddr -> () | Lreturn -> - output_epilogue begin fun () -> + output_epilogue env begin fun () -> I.ret () end | Llabel lbl -> - emit_Llabel fallthrough lbl + emit_Llabel env fallthrough lbl | Lbranch lbl -> I.jmp (label lbl) | Lcondbranch(tst, lbl) -> let lbl = label lbl in begin match tst with | Itruetest -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.jne lbl | Ifalsetest -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.je lbl | Iinttest cmp -> I.cmp (arg i 1) (arg i 0); I.j (cond cmp) lbl | Iinttest_imm((Isigned Ceq | Isigned Cne | Iunsigned Ceq | Iunsigned Cne) as cmp, 0) -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.j (cond cmp) lbl | Iinttest_imm(cmp, n) -> I.cmp (int n) (arg i 0); I.j (cond cmp) lbl | Ifloattest cmp -> - emit_float_test cmp i lbl + emit_float_test env cmp i lbl | Ioddtest -> I.test (int 1) (arg8 i 0); I.jne lbl @@ -789,15 +776,16 @@ let emit_instr fallthrough i = then (phys_reg 4 (*rdx*), phys_reg 0 (*rax*)) else (phys_reg 0 (*rax*), phys_reg 4 (*rdx*)) in - I.lea (mem64_rip NONE lbl) (reg tmp1); + I.lea (mem64_rip NONE lbl) (reg env tmp1); I.movsxd (mem64 DWORD 0 (arg64 i 0) ~scale:4 ~base:(reg64 tmp1)) - (reg tmp2); - I.add (reg tmp2) (reg tmp1); - I.jmp (reg tmp1); + (reg env tmp2); + I.add (reg env tmp2) (reg env tmp1); + I.jmp (reg env tmp1); begin match system with | S_mingw64 | S_cygwin -> D.section [".rdata"] (Some "dr") [] - | S_macosx | S_win64 -> () (* with LLVM/OS X and MASM, use the text segment *) + | S_macosx | S_win64 -> () + (* with LLVM/OS X and MASM, use the text segment *) | _ -> D.section [".rodata"] None [] end; D.align 4; @@ -806,14 +794,14 @@ let emit_instr fallthrough i = D.long (ConstSub (ConstLabel(emit_label jumptbl.(i)), ConstLabel lbl)) done; - emit_named_text_section !function_name + emit_named_text_section env.f.fun_name | Lentertrap -> () | Ladjust_trap_depth { delta_traps; } -> (* each trap occupies 16 bytes on the stack *) let delta = 16 * delta_traps in cfi_adjust_cfa_offset delta; - stack_offset := !stack_offset + delta + env.stack_offset <- env.stack_offset + delta | Lpushtrap { lbl_handler; } -> let load_label_addr s arg = if !Clflags.pic_code then @@ -827,22 +815,22 @@ let emit_instr fallthrough i = I.push (domain_field Domainstate.Domain_exception_pointer); cfi_adjust_cfa_offset 8; I.mov rsp (domain_field Domainstate.Domain_exception_pointer); - stack_offset := !stack_offset + 16; + env.stack_offset <- env.stack_offset + 16; | Lpoptrap -> I.pop (domain_field Domainstate.Domain_exception_pointer); cfi_adjust_cfa_offset (-8); I.add (int 8) rsp; cfi_adjust_cfa_offset (-8); - stack_offset := !stack_offset - 16 + env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular -> I.mov (int 0) (domain_field Domainstate.Domain_backtrace_pos); emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_reraise -> emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_notrace -> I.mov (domain_field Domainstate.Domain_exception_pointer) rsp; I.pop (domain_field Domainstate.Domain_exception_pointer); @@ -850,32 +838,21 @@ let emit_instr fallthrough i = I.jmp r11 end -let rec emit_all fallthrough i = +let rec emit_all env fallthrough i = match i.desc with | Lend -> () | _ -> - emit_instr fallthrough i; - emit_all (Linear.has_fallthrough i.desc) i.next + emit_instr env fallthrough i; + emit_all env (Linear.has_fallthrough i.desc) i.next let all_functions = ref [] (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - fastcode_flag := fundecl.fun_fast; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - bound_error_call := 0; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - frame_required := fundecl.fun_frame_required; + let env = mk_env fundecl in all_functions := fundecl :: !all_functions; - emit_named_text_section !function_name; + emit_named_text_section fundecl.fun_name; D.align 16; add_def_symbol fundecl.fun_name; if system = S_macosx @@ -888,11 +865,11 @@ let fundecl fundecl = D.label (emit_symbol fundecl.fun_name); emit_debug_info fundecl.fun_dbg; cfi_startproc (); - emit_all true fundecl.fun_body; - List.iter emit_call_gc !call_gc_sites; - emit_call_bound_errors (); - if !frame_required then begin - let n = frame_size() - 8 - (if fp then 8 else 0) in + emit_all env true fundecl.fun_body; + List.iter emit_call_gc env.call_gc_sites; + emit_call_bound_errors env; + if fundecl.fun_frame_required then begin + let n = (frame_size env) - 8 - (if fp then 8 else 0) in if n <> 0 then begin cfi_adjust_cfa_offset (-n); diff --git a/asmcomp/amd64/proc.ml b/asmcomp/amd64/proc.ml index b44dfeb0..ed176407 100644 --- a/asmcomp/amd64/proc.ml +++ b/asmcomp/amd64/proc.ml @@ -71,9 +71,9 @@ let win64 = Arch.win64 3. C callee-saved registers. This translates to the set { r10, r11 }. These registers hence cannot be used for OCaml parameter passing and must also be marked as - destroyed across [Ialloc] (otherwise a call to caml_call_gc@PLT might - clobber these two registers before the assembly stub saves them into - the GC regs block). + destroyed across [Ialloc] and [Ipoll] (otherwise a call to + caml_call_gc@PLT might clobber these two registers before the assembly + stub saves them into the GC regs block). *) let max_arguments_for_tailcalls = 10 @@ -294,7 +294,7 @@ let destroyed_at_c_call = 100;101;102;103;104;105;106;107; 108;109;110;111;112;113;114;115]) -let destroyed_at_alloc = +let destroyed_at_alloc_or_poll = if X86_proc.use_plt then destroyed_by_plt_stub else @@ -307,7 +307,7 @@ let destroyed_at_oper = function | Iop(Iintop(Idiv | Imod)) | Iop(Iintop_imm((Idiv | Imod), _)) -> [| rax; rdx |] | Iop(Istore(Single, _, _)) -> [| rxmm15 |] - | Iop(Ialloc _) -> destroyed_at_alloc + | Iop(Ialloc _ | Ipoll _) -> destroyed_at_alloc_or_poll | Iop(Iintop(Imulh | Icomp _) | Iintop_imm((Icomp _), _)) -> [| rax |] | Iswitch(_, _) -> [| rax; rdx |] @@ -339,7 +339,7 @@ let max_register_pressure = function if fp then [| 3; 0 |] else [| 4; 0 |] | Iintop(Idiv | Imod) | Iintop_imm((Idiv | Imod), _) -> if fp then [| 10; 16 |] else [| 11; 16 |] - | Ialloc _ -> + | Ialloc _ | Ipoll _ -> if fp then [| 11 - num_destroyed_by_plt_stub; 16 |] else [| 12 - num_destroyed_by_plt_stub; 16 |] | Iintop(Icomp _) | Iintop_imm((Icomp _), _) -> @@ -348,17 +348,6 @@ let max_register_pressure = function if fp then [| 12; 15 |] else [| 13; 15 |] | _ -> if fp then [| 12; 16 |] else [| 13; 16 |] -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false - | Ispecific(Ilea _|Isextend32|Izextend32) -> true - | Ispecific _ -> false - | _ -> true - (* Layout of the stack frame *) let frame_required fd = diff --git a/asmcomp/amd64/selection.ml b/asmcomp/amd64/selection.ml index 7df0d10d..68362335 100644 --- a/asmcomp/amd64/selection.ml +++ b/asmcomp/amd64/selection.ml @@ -282,4 +282,5 @@ method! insert_op_debug env op dbg rs rd = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = + (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/arm/arch.ml b/asmcomp/arm/arch.ml index 4b884da6..ee4ca76d 100644 --- a/asmcomp/arm/arch.ml +++ b/asmcomp/arm/arch.ml @@ -262,3 +262,15 @@ let is_immediate n = s := !s + 2 done; !s <= m + +(* Specific operations that are pure *) + +let operation_is_pure = function + | Ishiftcheckbound _ -> false + | _ -> true + +(* Specific operations that can raise *) + +let operation_can_raise = function + | Ishiftcheckbound _ -> true + | _ -> false diff --git a/asmcomp/arm/emit.mlp b/asmcomp/arm/emit.mlp index e44f7652..6b49c1ac 100644 --- a/asmcomp/arm/emit.mlp +++ b/asmcomp/arm/emit.mlp @@ -25,10 +25,7 @@ open Reg open Mach open Linear open Emitaux - -(* Tradeoff between code size and code speed *) - -let fastcode_flag = ref true +open Emitenv (* Output a label *) @@ -56,44 +53,34 @@ let emit_reg = function {loc = Reg r} -> emit_string (register_name r) | _ -> fatal_error "Emit_arm.emit_reg" -(* Layout of the stack frame *) - -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let contains_calls = ref false - -let frame_size () = +let frame_size env = let sz = - !stack_offset + - 4 * num_stack_slots.(0) + - 8 * num_stack_slots.(1) + - 8 * num_stack_slots.(2) + - (if !contains_calls then 4 else 0) + env.stack_offset + + 4 * env.f.fun_num_stack_slots.(0) + + 8 * env.f.fun_num_stack_slots.(1) + + 8 * env.f.fun_num_stack_slots.(2) + + (if env.f.fun_contains_calls then 4 else 0) in Misc.align sz 8 -let slot_offset loc cl = +let slot_offset env loc cl = match loc with Incoming n -> assert (n >= 0); - frame_size() + n + frame_size env + n | Local n -> if cl = 0 - then !stack_offset + n * 4 - else !stack_offset + num_stack_slots.(0) * 4 + n * 8 + then env.stack_offset + n * 4 + else env.stack_offset + env.f.fun_num_stack_slots.(0) * 4 + n * 8 | Outgoing n -> assert (n >= 0); n (* Output a stack reference *) -let emit_stack r = +let emit_stack env r = match r.loc with | Stack s -> - let ofs = slot_offset s (register_class r) in `[sp, #{emit_int ofs}]` + let ofs = slot_offset env s (register_class r) in `[sp, #{emit_int ofs}]` | _ -> fatal_error "Emit_arm.emit_stack" (* Output an addressing mode *) @@ -105,7 +92,7 @@ let emit_addressing addr r n = (* Record live pointers at call points *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label () in let live_offset = ref [] in Reg.Set.iter @@ -113,56 +100,38 @@ let record_frame_label live dbg = | {typ = Val; loc = Reg r} -> live_offset := ((r lsl 1) + 1) :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> ()) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in `{emit_label lbl}:` - -(* Record calls to the GC -- we've moved them out of the way *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame_lbl: label } (* Label of frame descriptor *) - -let call_gc_sites = ref ([] : gc_call list) +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in `{emit_label lbl}:` let emit_call_gc gc = `{emit_label gc.gc_lbl}: {emit_call "caml_call_gc"}\n`; `{emit_label gc.gc_frame_lbl}: b {emit_label gc.gc_return_lbl}\n` -(* Record calls to caml_ml_array_bound_error. - In debug mode, we maintain one call to caml_ml_array_bound_error - per bound check site. Otherwise, we can share a single call. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame_lbl: label } (* Label of frame descriptor *) - -let bound_error_sites = ref ([] : bound_error_call list) - -let bound_error_label dbg = - if !Clflags.debug || !bound_error_sites = [] then begin +let bound_error_label env dbg = + if !Clflags.debug || env.bound_error_sites = [] then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- { bd_lbl = lbl_bound_error; - bd_frame_lbl = lbl_frame } :: !bound_error_sites; + bd_frame = lbl_frame; + } :: env.bound_error_sites; lbl_bound_error end else begin - let bd = List.hd !bound_error_sites in bd.bd_lbl + let bd = List.hd env.bound_error_sites in bd.bd_lbl end let emit_call_bound_error bd = `{emit_label bd.bd_lbl}: {emit_call "caml_ml_array_bound_error"}\n`; - `{emit_label bd.bd_frame_lbl}:\n` + `{emit_label bd.bd_frame}:\n` (* Negate a comparison *) @@ -263,8 +232,8 @@ let emit_stack_adjustment n = (* Deallocate the stack frame before a return or tail call *) -let output_epilogue f = - let n = frame_size() in +let output_epilogue env f = + let n = frame_size env in if n > 0 then begin let ninstr = emit_stack_adjustment n in let ninstr = ninstr + f () in @@ -274,87 +243,68 @@ let output_epilogue f = end else f () -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 -(* Pending floating-point literals *) -let float_literals = ref ([] : (int64 * label) list) -(* Pending relative references to the global offset table *) -let gotrel_literals = ref ([] : (label * label) list) -(* Pending symbol literals *) -let symbol_literals = ref ([] : (string * label) list) -(* Total space (in words) occupied by pending literals *) -let size_literals = ref 0 - -(* Pending offset computations : {lbl; dst; src;} --> lbl: .word dst-(src+N) *) -type offset_computation = - { lbl : label; - dst : label; - src : label; - } -let offset_literals = ref ([] : offset_computation list) - (* Label a floating-point literal *) -let float_literal f = +let float_literal env fl = try - List.assoc f !float_literals + let x = List.find (fun x -> Int64.equal x.fl fl) env.float_literals in + x.lbl with Not_found -> let lbl = new_label() in - size_literals := !size_literals + 2; - float_literals := (f, lbl) :: !float_literals; + env.size_literals <- env.size_literals + 2; + env.float_literals <- { fl; lbl } :: env.float_literals; lbl (* Label a GOTREL literal *) -let gotrel_literal l = - let lbl = new_label() in - size_literals := !size_literals + 1; - gotrel_literals := (l, lbl) :: !gotrel_literals; - lbl +let gotrel_literal env lbl_pic = + let lbl_got = new_label() in + env.size_literals <- env.size_literals + 1; + env.gotrel_literals <- { lbl_got; lbl_pic } :: env.gotrel_literals; + lbl_got (* Label a symbol literal *) -let symbol_literal s = +let symbol_literal env sym = try - List.assoc s !symbol_literals + let sl = List.find (fun x -> String.equal x.sym sym) env.symbol_literals in + sl.lbl with Not_found -> let lbl = new_label() in - size_literals := !size_literals + 1; - symbol_literals := (s, lbl) :: !symbol_literals; + env.size_literals <- env.size_literals + 1; + env.symbol_literals <- { sym; lbl } :: env.symbol_literals; lbl (* Add an offset computation *) -let offset_literal dst src = +let offset_literal env dst src = let lbl = new_label() in - size_literals := !size_literals + 1; - offset_literals := { lbl; dst; src; } :: !offset_literals; + env.size_literals <- env.size_literals + 1; + env.offset_literals <- { lbl; dst; src; } :: env.offset_literals; lbl (* Emit all pending literals *) -let emit_literals() = - if !float_literals <> [] then begin +let emit_literals env = + if env.float_literals <> [] then begin ` .align 3\n`; List.iter - (fun (f, lbl) -> - `{emit_label lbl}:`; emit_float64_split_directive ".long" f) - !float_literals; - float_literals := [] + (fun {fl; lbl} -> + `{emit_label lbl}:`; emit_float64_split_directive ".long" fl) + env.float_literals; + env.float_literals <- [] end; - if !symbol_literals <> [] then begin + if env.symbol_literals <> [] then begin let offset = if !thumb then 4 else 8 in let suffix = if !Clflags.pic_code then "(GOT)" else "" in ` .align 2\n`; List.iter - (fun (l, lbl) -> - `{emit_label lbl}: .word _GLOBAL_OFFSET_TABLE_-({emit_label l}+{emit_int offset})\n`) - !gotrel_literals; + (fun { lbl_got; lbl_pic } -> + `{emit_label lbl_pic}: .word _GLOBAL_OFFSET_TABLE_-({emit_label lbl_got}+{emit_int offset})\n`) + env.gotrel_literals; List.iter - (fun (s, lbl) -> - `{emit_label lbl}: .word {emit_symbol s}{emit_string suffix}\n`) - !symbol_literals; - gotrel_literals := []; - symbol_literals := [] + (fun { sym; lbl } -> + `{emit_label lbl}: .word {emit_symbol sym}{emit_string suffix}\n`) + env.symbol_literals; + env.gotrel_literals <- []; + env.symbol_literals <- [] end; - if !offset_literals <> [] then begin + if env.offset_literals <> [] then begin (* Additions using the pc register read a value 4 or 8 bytes greater than the instruction's address, depending on the Thumb setting. However in Thumb mode we must follow interworking conventions and ensure that the @@ -365,18 +315,18 @@ let emit_literals() = List.iter (fun { lbl; dst; src; } -> `{emit_label lbl}: .word {emit_label dst}-({emit_label src}+{emit_int offset})\n`) - !offset_literals; - offset_literals := [] + env.offset_literals; + env.offset_literals <- [] end; - size_literals := 0 + env.size_literals <- 0 (* Emit code to load the address of a symbol *) -let emit_load_symbol_addr dst s = +let emit_load_symbol_addr env dst s = if !Clflags.pic_code then begin let lbl_pic = new_label() in - let lbl_got = gotrel_literal lbl_pic in - let lbl_sym = symbol_literal s in + let lbl_got = gotrel_literal env lbl_pic in + let lbl_sym = symbol_literal env s in (* Both r3 and r12 are marked as clobbered in PIC mode (cf. proc.ml), so use r12 as temporary scratch register unless the destination is r12, then we use r3 instead. *) @@ -388,12 +338,12 @@ let emit_load_symbol_addr dst s = `{emit_label lbl_pic}: add {emit_reg tmp}, pc, {emit_reg tmp}\n`; ` ldr {emit_reg dst}, [{emit_reg tmp}, {emit_reg dst}] @ {emit_symbol s}\n`; 4 - end else if !arch > ARMv6 && not !Clflags.dlcode && !fastcode_flag then begin + end else if !arch > ARMv6 && not !Clflags.dlcode && env.f.fun_fast then begin ` movw {emit_reg dst}, #:lower16:{emit_symbol s}\n`; ` movt {emit_reg dst}, #:upper16:{emit_symbol s}\n`; 2 end else begin - let lbl = symbol_literal s in + let lbl = symbol_literal env s in ` ldr {emit_reg dst}, {emit_label lbl} @ {emit_symbol s}\n`; 1 end @@ -428,10 +378,10 @@ let emit_set_condition cmp rd = end (* Emit code to load the address of a label in the lr register *) -let emit_load_handler_address handler = +let emit_load_handler_address env handler = (* PIC code *) let lbl_src = new_label() in - let lbl_offset = offset_literal handler lbl_src in + let lbl_offset = offset_literal env handler lbl_src in ` ldr lr, {emit_label lbl_offset}\n`; `{emit_label lbl_src}:\n`; ` add lr, pc, lr\n`; @@ -449,17 +399,17 @@ let emit_named_text_section func_name = (* Output the assembly code for an instruction *) -let emit_instr i = +let emit_instr env i = emit_debug_info i.dbg; match i.desc with | Lend -> 0 | Lprologue -> - assert (!prologue_required); - let n = frame_size() in + assert (env.f.fun_prologue_required); + let n = frame_size env in let num_instrs = if n > 0 then begin let num_instrs = emit_stack_adjustment (-n) in - if !contains_calls then begin + if env.f.fun_contains_calls then begin cfi_offset ~reg:14 (* lr *) ~offset:(-4); ` str lr, [sp, #{emit_int(n - 4)}]\n`; num_instrs + 1 @@ -470,7 +420,7 @@ let emit_instr i = 0 end in - `{emit_label !tailrec_entry_point}:\n`; + `{emit_label env.f.fun_tailrec_entry_point_label}:\n`; num_instrs | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in @@ -481,13 +431,13 @@ let emit_instr i = | {loc = Reg _}, {loc = Reg _} -> ` mov {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = Float}, _ -> - ` fstd {emit_reg src}, {emit_stack dst}\n` + ` fstd {emit_reg src}, {emit_stack env dst}\n` | {loc = Reg _}, _ -> - ` str {emit_reg src}, {emit_stack dst}\n` + ` str {emit_reg src}, {emit_stack env dst}\n` | {typ = Float}, _ -> - ` fldd {emit_reg dst}, {emit_stack src}\n` + ` fldd {emit_reg dst}, {emit_stack env src}\n` | _ -> - ` ldr {emit_reg dst}, {emit_stack src}\n` + ` ldr {emit_reg dst}, {emit_stack env src}\n` end; 1 end | Lop(Iconst_int n) -> @@ -500,13 +450,13 @@ let emit_instr i = and ninstr_high = emit_intconst i.res.(1) high_bits in ninstr_low + ninstr_high end else begin - let lbl = float_literal f in + let lbl = float_literal env f in ` ldr {emit_reg i.res.(0)}, {emit_label lbl}\n`; ` ldr {emit_reg i.res.(1)}, {emit_label lbl} + 4\n`; 2 end | Lop(Iconst_float f) when !fpu = VFPv2 -> - let lbl = float_literal f in + let lbl = float_literal env f in ` fldd {emit_reg i.res.(0)}, {emit_label lbl}\n`; 1 | Lop(Iconst_float f) -> @@ -528,37 +478,37 @@ let emit_instr i = end in begin match encode f with None -> - let lbl = float_literal f in + let lbl = float_literal env f in ` fldd {emit_reg i.res.(0)}, {emit_label lbl}\n` | Some imm8 -> ` fconstd {emit_reg i.res.(0)}, #{emit_int imm8}\n` end; 1 | Lop(Iconst_symbol s) -> - emit_load_symbol_addr i.res.(0) s + emit_load_symbol_addr env i.res.(0) s | Lop(Icall_ind) -> if !arch >= ARMv5 then begin ` blx {emit_reg i.arg.(0)}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n`; 1 + `{record_frame env i.live (Dbg_other i.dbg)}\n`; 1 end else begin ` mov lr, pc\n`; ` bx {emit_reg i.arg.(0)}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n`; 2 + `{record_frame env i.live (Dbg_other i.dbg)}\n`; 2 end | Lop(Icall_imm { func; }) -> ` {emit_call func}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n`; 1 + `{record_frame env i.live (Dbg_other i.dbg)}\n`; 1 | Lop(Itailcall_ind) -> - output_epilogue begin fun () -> - if !contains_calls then + output_epilogue env begin fun () -> + if env.f.fun_contains_calls then ` ldr lr, [sp, #{emit_int (-4)}]\n`; ` bx {emit_reg i.arg.(0)}\n`; 2 end | Lop(Itailcall_imm { func; }) -> - if func = !function_name then begin - ` b {emit_label !tailrec_entry_point}\n`; 1 + if func = env.f.fun_name then begin + ` b {emit_label env.f.fun_tailrec_entry_point_label}\n`; 1 end else begin - output_epilogue begin fun () -> - if !contains_calls then + output_epilogue env begin fun () -> + if env.f.fun_contains_calls then ` ldr lr, [sp, #{emit_int (-4)}]\n`; ` {emit_jump func}\n`; 2 end @@ -566,19 +516,19 @@ let emit_instr i = | Lop(Iextcall { func; alloc = false; }) -> ` {emit_call func}\n`; 1 | Lop(Iextcall { func; alloc = true; }) -> - let ninstr = emit_load_symbol_addr (phys_reg 7 (* r7 *)) func in + let ninstr = emit_load_symbol_addr env (phys_reg 7 (* r7 *)) func in ` {emit_call "caml_c_call"}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n`; + `{record_frame env i.live (Dbg_other i.dbg)}\n`; 1 + ninstr | Lop(Istackoffset n) -> assert (n mod 8 = 0); let ninstr = emit_stack_adjustment (-n) in - stack_offset := !stack_offset + n; + env.stack_offset <- env.stack_offset + n; ninstr - | Lop(Iload(Single, addr)) when !fpu >= VFPv2 -> + | Lop(Iload(Single, addr, _mut)) when !fpu >= VFPv2 -> ` flds s14, {emit_addressing addr i.arg 0}\n`; ` fcvtds {emit_reg i.res.(0)}, s14\n`; 2 - | Lop(Iload((Double | Double_u), addr)) when !fpu = Soft -> + | Lop(Iload((Double | Double_u), addr, _mut)) when !fpu = Soft -> (* Use LDM or LDRD if possible *) begin match i.res.(0), i.res.(1), addr with {loc = Reg rt}, {loc = Reg rt2}, Iindexed 0 @@ -597,7 +547,7 @@ let emit_instr i = ` ldr {emit_reg i.res.(0)}, {emit_addressing addr i.arg 0}\n` end; 2 end - | Lop(Iload(size, addr)) -> + | Lop(Iload(size, addr, _mut)) -> let r = i.res.(0) in let instr = match size with @@ -640,9 +590,9 @@ let emit_instr i = ` {emit_string instr} {emit_reg r}, {emit_addressing addr i.arg 1}\n`; 1 | Lop(Ialloc { bytes = n; dbginfo }) -> let lbl_frame = - record_frame_label i.live (Dbg_alloc dbginfo) + record_frame_label env i.live (Dbg_alloc dbginfo) in - if !fastcode_flag then begin + if env.f.fun_fast then begin let ninstr = decompose_intconst (Int32.of_int n) (fun i -> @@ -655,10 +605,10 @@ let emit_instr i = let lbl_after_alloc = new_label() in `{emit_label lbl_after_alloc}:`; ` add {emit_reg i.res.(0)}, alloc_ptr, #4\n`; - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame } :: !call_gc_sites; + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; 4 + ninstr end else begin let ninstr = @@ -672,6 +622,11 @@ let emit_instr i = `{emit_label lbl_frame}: add {emit_reg i.res.(0)}, alloc_ptr, #4\n`; 1 + ninstr end + | Lop(Ipoll { return_label }) -> + begin match return_label with + None -> 0 + | Some lbl -> ` b {emit_label lbl}\n`; 1 + end | Lop(Iintop(Icomp cmp)) -> ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; 1 + emit_set_condition cmp i.res.(0) @@ -679,15 +634,15 @@ let emit_instr i = ` cmp {emit_reg i.arg.(0)}, #{emit_int n}\n`; 1 + emit_set_condition cmp i.res.(0) | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` bls {emit_label lbl}\n`; 2 | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` cmp {emit_reg i.arg.(0)}, #{emit_int n}\n`; ` bls {emit_label lbl}\n`; 2 | Lop(Ispecific(Ishiftcheckbound(shiftop, n))) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in let op = name_for_shift_operation shiftop in ` cmp {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}, {emit_string op} #{emit_int n}\n`; ` bcs {emit_label lbl}\n`; 2 @@ -721,6 +676,8 @@ let emit_instr i = | Lop(Iintoffloat) -> ` ftosizd s14, {emit_reg i.arg.(0)}\n`; ` fmrs {emit_reg i.res.(0)}, s14\n`; 2 + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc); 0 | Lop(Iaddf | Isubf | Imulf | Idivf | Ispecific Inegmulf as op) -> let instr = (match op with Iaddf -> "faddd" @@ -770,12 +727,11 @@ let emit_instr i = | _ -> assert false end - | Lop (Iname_for_debugger _) -> 0 | Lreloadretaddr -> - let n = frame_size() in + let n = frame_size env in ` ldr lr, [sp, #{emit_int(n-4)}]\n`; 1 | Lreturn -> - output_epilogue begin fun () -> + output_epilogue env begin fun () -> ` bx lr\n`; 1 end | Llabel lbl -> @@ -884,17 +840,17 @@ let emit_instr i = (* each trap occupies 8 bytes on the stack *) let delta = 8 * delta_traps in cfi_adjust_cfa_offset delta; - stack_offset := !stack_offset + delta; 0 + env.stack_offset <- env.stack_offset + delta; 0 | Lpushtrap { lbl_handler; } -> - let s = emit_load_handler_address lbl_handler in - stack_offset := !stack_offset + 8; + let s = emit_load_handler_address env lbl_handler in + env.stack_offset <- env.stack_offset + 8; ` push \{trap_ptr, lr}\n`; cfi_adjust_cfa_offset 8; ` mov trap_ptr, sp\n`; s + 2 | Lpoptrap -> ` pop \{trap_ptr, lr}\n`; cfi_adjust_cfa_offset (-8); - stack_offset := !stack_offset - 8; 1 + env.stack_offset <- env.stack_offset - 8; 1 | Lraise k -> begin match k with | Lambda.Raise_regular -> @@ -902,10 +858,10 @@ let emit_instr i = ` mov r12, #0\n`; ` str r12, [domain_state_ptr, {emit_int offset}]\n`; ` {emit_call "caml_raise_exn"}\n`; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n`; 3 + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n`; 3 | Lambda.Raise_reraise -> ` {emit_call "caml_raise_exn"}\n`; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n`; 1 + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n`; 1 | Lambda.Raise_notrace -> ` mov sp, trap_ptr\n`; ` pop \{trap_ptr, pc}\n`; 2 @@ -925,51 +881,38 @@ let max_instruction_size i = (* Emission of an instruction sequence *) -let rec emit_all ninstr fallthrough i = +let rec emit_all env ninstr fallthrough i = (* ninstr = number of 32-bit code words emitted since last constant island *) (* fallthrough is true if previous instruction can fall through *) if i.desc = Lend then () else begin (* Make sure literals not yet emitted remain addressable, or emit them in a new constant island. *) (* fldd can address up to +/-1KB, ldr can address up to +/-4KB *) - let limit = (if !fpu >= VFPv2 && !float_literals <> [] + let limit = (if !fpu >= VFPv2 && env.float_literals <> [] then 127 else 511) in - let limit = limit - !size_literals - max_instruction_size i in + let limit = limit - env.size_literals - max_instruction_size i in let ninstr' = if ninstr >= limit - 64 && not fallthrough then begin - emit_literals(); + emit_literals env; 0 - end else if !size_literals != 0 && ninstr >= limit then begin + end else if env.size_literals != 0 && ninstr >= limit then begin let lbl = new_label() in ` b {emit_label lbl}\n`; - emit_literals(); + emit_literals env; `{emit_label lbl}:\n`; 0 end else ninstr in - let n = emit_instr i in - emit_all (ninstr' + n) (has_fallthrough i.desc) i.next + let n = emit_instr env i in + emit_all env (ninstr' + n) (has_fallthrough i.desc) i.next end (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - fastcode_flag := fundecl.fun_fast; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - float_literals := []; - gotrel_literals := []; - symbol_literals := []; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - contains_calls := fundecl.fun_contains_calls; - prologue_required := fundecl.fun_prologue_required; - emit_named_text_section !function_name; + let env = mk_env fundecl in + emit_named_text_section fundecl.fun_name; ` .align 2\n`; ` .globl {emit_symbol fundecl.fun_name}\n`; if !arch > ARMv6 && !thumb then @@ -980,10 +923,10 @@ let fundecl fundecl = `{emit_symbol fundecl.fun_name}:\n`; emit_debug_info fundecl.fun_dbg; cfi_startproc(); - emit_all 0 true fundecl.fun_body; - emit_literals(); - List.iter emit_call_gc !call_gc_sites; - List.iter emit_call_bound_error !bound_error_sites; + emit_all env 0 true fundecl.fun_body; + emit_literals env; + List.iter emit_call_gc env.call_gc_sites; + List.iter emit_call_bound_error env.bound_error_sites; cfi_endproc(); ` .type {emit_symbol fundecl.fun_name}, %function\n`; ` .size {emit_symbol fundecl.fun_name}, .-{emit_symbol fundecl.fun_name}\n` diff --git a/asmcomp/arm/proc.ml b/asmcomp/arm/proc.ml index 1da4386b..11313fce 100644 --- a/asmcomp/arm/proc.ml +++ b/asmcomp/arm/proc.ml @@ -301,7 +301,8 @@ let destroyed_at_oper = function | Iop(Iintop (Icomp _) | Iintop_imm(Icomp _, _)) when !arch >= ARMv8 && !thumb -> [| phys_reg 3 |] (* r3 destroyed *) - | Iop(Iintoffloat | Ifloatofint | Iload(Single, _) | Istore(Single, _, _)) -> + | Iop(Iintoffloat | Ifloatofint + | Iload(Single, _, _) | Istore(Single, _, _)) -> [| phys_reg 107 |] (* d7 (s14-s15) destroyed *) | _ -> [||] @@ -325,20 +326,10 @@ let max_register_pressure = function | Ialloc _ -> if abi = EABI then [| 7; 0; 0 |] else [| 7; 8; 8 |] | Iconst_symbol _ when !Clflags.pic_code -> [| 7; 16; 32 |] | Iintoffloat | Ifloatofint - | Iload(Single, _) | Istore(Single, _, _) -> [| 9; 15; 31 |] + | Iload(Single, _, _) | Istore(Single, _, _) -> [| 9; 15; 31 |] | Iintop Imulh when !arch < ARMv6 -> [| 8; 16; 32 |] | _ -> [| 9; 16; 32 |] -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) - | Ispecific(Ishiftcheckbound _) -> false - | _ -> true - (* Layout of the stack *) let frame_required fd = diff --git a/asmcomp/arm/scheduling.ml b/asmcomp/arm/scheduling.ml index 9d847d4c..e7fd744a 100644 --- a/asmcomp/arm/scheduling.ml +++ b/asmcomp/arm/scheduling.ml @@ -29,7 +29,7 @@ method oper_latency = function (* Loads have a latency of two cycles in general *) Iconst_symbol _ | Iconst_float _ - | Iload(_, _) + | Iload(_, _, _) | Ireload | Ifloatofint (* mcr/mrc count as memory access *) | Iintoffloat -> 2 diff --git a/asmcomp/arm/selection.ml b/asmcomp/arm/selection.ml index 7dee0dad..c88ae354 100644 --- a/asmcomp/arm/selection.ml +++ b/asmcomp/arm/selection.ml @@ -328,4 +328,5 @@ method! insert_op_debug env op dbg rs rd = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = + (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/arm64/arch.ml b/asmcomp/arm64/arch.ml index 8d8561bc..b1a7c4d1 100644 --- a/asmcomp/arm64/arch.ml +++ b/asmcomp/arm64/arch.ml @@ -42,6 +42,7 @@ type cmm_label = int (* Do not introduce a dependency to Cmm *) type specific_operation = + | Ifar_poll of { return_label: cmm_label option } | Ifar_alloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo } | Ifar_intop_checkbound | Ifar_intop_imm_checkbound of { bound : int; } @@ -58,6 +59,7 @@ type specific_operation = | Isqrtf (* floating-point square root *) | Ibswap of int (* endianness conversion *) | Imove32 (* 32-bit integer move *) + | Isignext of int (* sign extension *) and arith_operation = Ishiftadd @@ -104,6 +106,8 @@ let print_addressing printreg addr ppf arg = let print_specific_operation printreg op ppf arg = match op with + | Ifar_poll _ -> + fprintf ppf "(far) poll" | Ifar_alloc { bytes; } -> fprintf ppf "(far) alloc %i" bytes | Ifar_intop_checkbound -> @@ -169,3 +173,94 @@ let print_specific_operation printreg op ppf arg = | Imove32 -> fprintf ppf "move32 %a" printreg arg.(0) + | Isignext n -> + fprintf ppf "signext%d %a" + n printreg arg.(0) + +(* Recognition of logical immediate arguments *) + +(* An automaton to recognize ( 0+1+0* | 1+0+1* ) + + 0 1 0 + / \ / \ / \ + \ / \ / \ / + -0--> [1] --1--> [2] --0--> [3] + / + [0] + \ + -1--> [4] --0--> [5] --1--> [6] + / \ / \ / \ + \ / \ / \ / + 1 0 1 + +The accepting states are 2, 3, 5 and 6. *) + +let auto_table = [| (* accepting?, next on 0, next on 1 *) + (* state 0 *) (false, 1, 4); + (* state 1 *) (false, 1, 2); + (* state 2 *) (true, 3, 2); + (* state 3 *) (true, 3, 7); + (* state 4 *) (false, 5, 4); + (* state 5 *) (true, 5, 6); + (* state 6 *) (true, 7, 6); + (* state 7 *) (false, 7, 7) (* error state *) +|] + +let rec run_automata nbits state input = + let (acc, next0, next1) = auto_table.(state) in + if nbits <= 0 + then acc + else run_automata (nbits - 1) + (if Nativeint.logand input 1n = 0n then next0 else next1) + (Nativeint.shift_right_logical input 1) + +(* The following function determines a length [e] + such that [x] is a repetition [BB...B] of a bit pattern [B] of length [e]. + [e] ranges over 64, 32, 16, 8, 4, 2. The smaller [e] the better. *) + +let logical_imm_length x = + (* [test n] checks that the low [2n] bits of [x] are of the + form [BB], that is, two occurrences of the same [n] bits *) + let test n = + let mask = Nativeint.(sub (shift_left 1n n) 1n) in + let low_n_bits = Nativeint.(logand x mask) in + let next_n_bits = Nativeint.(logand (shift_right_logical x n) mask) in + low_n_bits = next_n_bits in + (* If [test n] fails, we know that the length [e] is + at least [2n]. Hence we test with decreasing values of [n]: + 32, 16, 8, 4, 2. *) + if not (test 32) then 64 + else if not (test 16) then 32 + else if not (test 8) then 16 + else if not (test 4) then 8 + else if not (test 2) then 4 + else 2 + +(* A valid logical immediate is +- neither [0] nor [-1]; +- composed of a repetition [BBBBB] of a bit-pattern [B] of length [e] +- the low [e] bits of the number, that is, [B], match [0+1+0*] or [1+0+1*]. +*) + +let is_logical_immediate x = + x <> 0n && x <> -1n && run_automata (logical_imm_length x) 0 x + +(* Specific operations that are pure *) + +let operation_is_pure = function + | Ifar_alloc _ + | Ifar_intop_checkbound + | Ifar_intop_imm_checkbound _ + | Ishiftcheckbound _ + | Ifar_shiftcheckbound _ -> false + | _ -> true + +(* Specific operations that can raise *) + +let operation_can_raise = function + | Ifar_alloc _ + | Ifar_intop_checkbound + | Ifar_intop_imm_checkbound _ + | Ishiftcheckbound _ + | Ifar_shiftcheckbound _ -> true + | _ -> false diff --git a/asmcomp/arm64/emit.mlp b/asmcomp/arm64/emit.mlp index 85a951c2..d63e383a 100644 --- a/asmcomp/arm64/emit.mlp +++ b/asmcomp/arm64/emit.mlp @@ -26,19 +26,15 @@ open Reg open Mach open Linear open Emitaux - -(* Tradeoff between code size and code speed *) - -let fastcode_flag = ref true +open Emitenv (* Names for special regs *) -let reg_domain_state_ptr = phys_reg 22 -let reg_trap_ptr = phys_reg 23 -let reg_alloc_ptr = phys_reg 24 -let reg_alloc_limit = phys_reg 25 -let reg_tmp1 = phys_reg 26 -let reg_x8 = phys_reg 8 +let reg_domain_state_ptr = phys_reg 25 (* x28 *) +let reg_trap_ptr = phys_reg 23 (* x26 *) +let reg_alloc_ptr = phys_reg 24 (* x27 *) +let reg_tmp1 = phys_reg 26 (* x16 *) +let reg_x8 = phys_reg 8 (* x8 *) (* Output a label *) @@ -85,47 +81,36 @@ let emit_wreg = function {loc = Reg r} -> emit_string int_reg_name_w.(r) | _ -> fatal_error "Emit.emit_wreg" -(* Layout of the stack frame *) - -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false +let initial_stack_offset f = + 8 * f.fun_num_stack_slots.(0) + + 8 * f.fun_num_stack_slots.(1) + + (if f.fun_contains_calls then 8 else 0) -let contains_calls = ref false - -let initial_stack_offset () = - 8 * num_stack_slots.(0) + - 8 * num_stack_slots.(1) + - (if !contains_calls then 8 else 0) - -let frame_size () = +let frame_size env = let sz = - !stack_offset + - initial_stack_offset () + env.stack_offset + initial_stack_offset env.f in Misc.align sz 16 -let slot_offset loc cl = +let slot_offset env loc cl = match loc with Incoming n -> assert (n >= 0); - frame_size() + n + frame_size env + n | Local n -> - !stack_offset + + env.stack_offset + (if cl = 0 then n * 8 - else num_stack_slots.(0) * 8 + n * 8) + else env.f.fun_num_stack_slots.(0) * 8 + n * 8) | Outgoing n -> assert (n >= 0); n (* Output a stack reference *) -let emit_stack r = +let emit_stack env r = match r.loc with | Stack s -> - let ofs = slot_offset s (register_class r) in `[sp, #{emit_int ofs}]` + let ofs = slot_offset env s (register_class r) in `[sp, #{emit_int ofs}]` | _ -> fatal_error "Emit.emit_stack" (* Output an addressing mode *) @@ -146,7 +131,7 @@ let emit_addressing addr r = (* Record live pointers at call points *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label () in let live_offset = ref [] in Reg.Set.iter @@ -154,56 +139,38 @@ let record_frame_label live dbg = | {typ = Val; loc = Reg r} -> live_offset := ((r lsl 1) + 1) :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> ()) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in `{emit_label lbl}:` - -(* Record calls to the GC -- we've moved them out of the way *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame_lbl: label } (* Label of frame descriptor *) - -let call_gc_sites = ref ([] : gc_call list) +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in `{emit_label lbl}:` let emit_call_gc gc = `{emit_label gc.gc_lbl}: bl {emit_symbol "caml_call_gc"}\n`; `{emit_label gc.gc_frame_lbl}: b {emit_label gc.gc_return_lbl}\n` -(* Record calls to caml_ml_array_bound_error. - In debug mode, we maintain one call to caml_ml_array_bound_error - per bound check site. Otherwise, we can share a single call. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame_lbl: label } (* Label of frame descriptor *) - -let bound_error_sites = ref ([] : bound_error_call list) - -let bound_error_label dbg = - if !Clflags.debug || !bound_error_sites = [] then begin +let bound_error_label env dbg = + if !Clflags.debug || env.bound_error_sites = [] then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- { bd_lbl = lbl_bound_error; - bd_frame_lbl = lbl_frame } :: !bound_error_sites; + bd_frame = lbl_frame; + } :: env.bound_error_sites; lbl_bound_error end else begin - let bd = List.hd !bound_error_sites in bd.bd_lbl + let bd = List.hd env.bound_error_sites in bd.bd_lbl end let emit_call_bound_error bd = `{emit_label bd.bd_lbl}: bl {emit_symbol "caml_ml_array_bound_error"}\n`; - `{emit_label bd.bd_frame_lbl}:\n` + `{emit_label bd.bd_frame}:\n` (* Names of various instructions *) @@ -226,63 +193,55 @@ let name_for_int_operation = function | Iasr -> "asr" | _ -> assert false +(* Decompose an integer constant into four 16-bit shifted fragments. + Omit the fragments that are equal to "default" (16 zeros or 16 ones). *) + +let decompose_int default n = + let rec decomp n pos = + if pos >= 64 then [] else begin + let frag = Nativeint.logand n 0xFFFFn + and rem = Nativeint.shift_right_logical n 16 in + if frag = default + then decomp rem (pos + 16) + else (frag, pos) :: decomp rem (pos + 16) + end + in decomp n 0 + (* Load an integer constant into a register *) +let emit_movk dst (f, p) = + ` movk {emit_reg dst}, #{emit_nativeint f}, lsl #{emit_int p}\n` + let emit_intconst dst n = - let rec emit_pos first shift = - if shift < 0 then begin - if first then ` mov {emit_reg dst}, xzr\n` - end else begin - let s = Nativeint.(logand (shift_right_logical n shift) 0xFFFFn) in - if s = 0n then emit_pos first (shift - 16) else begin - if first then - ` movz {emit_reg dst}, #{emit_nativeint s}, lsl #{emit_int shift}\n` - else - ` movk {emit_reg dst}, #{emit_nativeint s}, lsl #{emit_int shift}\n`; - emit_pos false (shift - 16) - end - end - and emit_neg first shift = - if shift < 0 then begin - if first then ` movn {emit_reg dst}, #0\n` + if is_logical_immediate n then + ` orr {emit_reg dst}, xzr, #{emit_nativeint n}\n` + else begin + let dz = decompose_int 0x0000n n + and dn = decompose_int 0xFFFFn n in + if List.length dz <= List.length dn then begin + match dz with + | [] -> + ` mov {emit_reg dst}, xzr\n` + | (f, p) :: l -> + ` movz {emit_reg dst}, #{emit_nativeint f}, lsl #{emit_int p}\n`; + List.iter (emit_movk dst) l end else begin - let s = Nativeint.(logand (shift_right_logical n shift) 0xFFFFn) in - if s = 0xFFFFn then emit_neg first (shift - 16) else begin - if first then - ` movn {emit_reg dst}, #{emit_nativeint (Nativeint.logxor s 0xFFFFn)}, lsl #{emit_int shift}\n` - else - ` movk {emit_reg dst}, #{emit_nativeint s}, lsl #{emit_int shift}\n`; - emit_neg false (shift - 16) - end + match dn with + | [] -> + ` movn {emit_reg dst}, #0\n` + | (f, p) :: l -> + let nf = Nativeint.logxor f 0xFFFFn in + ` movn {emit_reg dst}, #{emit_nativeint nf}, lsl #{emit_int p}\n`; + List.iter (emit_movk dst) l end - in - if n < 0n then emit_neg true 48 else emit_pos true 48 + end let num_instructions_for_intconst n = - let num_instructions = ref 0 in - let rec count_pos first shift = - if shift < 0 then begin - if first then incr num_instructions - end else begin - let s = Nativeint.(logand (shift_right_logical n shift) 0xFFFFn) in - if s = 0n then count_pos first (shift - 16) else begin - incr num_instructions; - count_pos false (shift - 16) - end - end - and count_neg first shift = - if shift < 0 then begin - if first then incr num_instructions - end else begin - let s = Nativeint.(logand (shift_right_logical n shift) 0xFFFFn) in - if s = 0xFFFFn then count_neg first (shift - 16) else begin - incr num_instructions; - count_neg false (shift - 16) - end - end - in - if n < 0n then count_neg true 48 else count_pos true 48; - !num_instructions + if is_logical_immediate n then 1 else begin + let dz = decompose_int 0x0000n n + and dn = decompose_int 0xFFFFn n in + max 1 (min (List.length dz) (List.length dn)) + end (* Recognize float constants appropriate for FMOV dst, #fpimm instruction: "a normalized binary floating point encoding with 1 sign bit, 4 @@ -307,9 +266,9 @@ let emit_stack_adjustment n = (* Deallocate the stack frame and reload the return address before a return or tail call *) -let output_epilogue f = - let n = frame_size() in - if !contains_calls then +let output_epilogue env f = + let n = frame_size env in + if env.f.fun_contains_calls then ` ldr x30, [sp, #{emit_int (n-8)}]\n`; if n > 0 then emit_stack_adjustment n; @@ -348,33 +307,27 @@ let emit_cmpimm rs n = then ` cmp {emit_reg rs}, #{emit_int n}\n` else ` cmn {emit_reg rs}, #{emit_int (-n)}\n` -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 -(* Pending floating-point literals *) -let float_literals = ref ([] : (int64 * label) list) - (* Label a floating-point literal *) -let float_literal f = +let float_literal env fl = try - List.assoc f !float_literals + let x = List.find (fun x -> Int64.equal x.fl fl) env.float_literals in + x.lbl with Not_found -> let lbl = new_label() in - float_literals := (f, lbl) :: !float_literals; + env.float_literals <- { fl; lbl } :: env.float_literals; lbl (* Emit all pending literals *) -let emit_literals() = - if !float_literals <> [] then begin +let emit_literals env = + if env.float_literals <> [] then begin if macosx then ` .section __TEXT,__literal8,8byte_literals\n`; ` .align 3\n`; List.iter - (fun (f, lbl) -> - `{emit_label lbl}:`; emit_float64_directive ".quad" f) - !float_literals; - float_literals := [] + (fun { fl; lbl } -> + `{emit_label lbl}:`; emit_float64_directive ".quad" fl) + env.float_literals; + env.float_literals <- [] end (* Emit code to load the address of a symbol *) @@ -395,11 +348,13 @@ let emit_load_symbol_addr dst s = call GC and bounds check points emitted out-of-line from the function body. See branch_relaxation.mli. *) -let num_call_gc_and_check_bound_points instr = +let num_call_gc_and_check_bound_points env = let rec loop instr ((call_gc, check_bound) as totals) = match instr.desc with | Lend -> totals - | Lop (Ialloc _) when !fastcode_flag -> + | Lop (Ialloc _) when env.f.fun_fast -> + loop instr.next (call_gc + 1, check_bound) + | Lop (Ipoll _) -> loop instr.next (call_gc + 1, check_bound) | Lop (Iintop Icheckbound) | Lop (Iintop_imm (Icheckbound, _)) @@ -413,12 +368,13 @@ let num_call_gc_and_check_bound_points instr = (* The following four should never be seen, since this function is run before branch relaxation. *) | Lop (Ispecific (Ifar_alloc _)) + | Lop (Ispecific (Ifar_poll _)) | Lop (Ispecific Ifar_intop_checkbound) | Lop (Ispecific (Ifar_intop_imm_checkbound _)) | Lop (Ispecific (Ifar_shiftcheckbound _)) -> assert false | _ -> loop instr.next totals in - loop instr (0, 0) + loop env.f.fun_body (0, 0) let max_out_of_line_code_offset ~num_call_gc ~num_check_bound = if num_call_gc < 1 && num_check_bound < 1 then 0 @@ -459,6 +415,7 @@ module BR = Branch_relaxation.Make (struct let classify_instr = function | Lop (Ialloc _) + | Lop (Ipoll _) | Lop (Iintop Icheckbound) | Lop (Iintop_imm (Icheckbound, _)) | Lop (Ispecific (Ishiftcheckbound _)) -> Some Bcc @@ -478,16 +435,16 @@ module BR = Branch_relaxation.Make (struct let offset_pc_at_branch = 0 - let prologue_size () = - (if initial_stack_offset () > 0 then 2 else 0) - + (if !contains_calls then 1 else 0) + let prologue_size f = + (if initial_stack_offset f > 0 then 2 else 0) + + (if f.fun_contains_calls then 1 else 0) - let epilogue_size () = - if !contains_calls then 3 else 2 + let epilogue_size f = + if f.fun_contains_calls then 3 else 2 - let instr_size = function + let instr_size f = function | Lend -> 0 - | Lprologue -> prologue_size () + | Lprologue -> prologue_size f | Lop (Imove | Ispill | Ireload) -> 1 | Lop (Iconst_int n) -> num_instructions_for_intconst n @@ -495,19 +452,19 @@ module BR = Branch_relaxation.Make (struct | Lop (Iconst_symbol _) -> 2 | Lop (Icall_ind) -> 1 | Lop (Icall_imm _) -> 1 - | Lop (Itailcall_ind) -> epilogue_size () + | Lop (Itailcall_ind) -> epilogue_size f | Lop (Itailcall_imm { func; _ }) -> - if func = !function_name then 1 else epilogue_size () + if func = f.fun_name then 1 else epilogue_size f | Lop (Iextcall { alloc = false; }) -> 1 | Lop (Iextcall { alloc = true; }) -> 3 | Lop (Istackoffset _) -> 2 - | Lop (Iload (size, addr)) | Lop (Istore (size, addr, _)) -> + | Lop (Iload (size, addr, _)) | Lop (Istore (size, addr, _)) -> let based = match addr with Iindexed _ -> 0 | Ibased _ -> 1 in based + begin match size with Single -> 2 | _ -> 1 end - | Lop (Ialloc {bytes = num_bytes}) when !fastcode_flag -> - if num_bytes <= 0xFFF then 4 else 5 - | Lop (Ispecific (Ifar_alloc {bytes = num_bytes})) when !fastcode_flag -> - if num_bytes <= 0xFFF then 5 else 6 + | Lop (Ialloc _) when f.fun_fast -> 5 + | Lop (Ispecific (Ifar_alloc _)) when f.fun_fast -> 6 + | Lop (Ipoll _) -> 3 + | Lop (Ispecific (Ifar_poll _)) -> 4 | Lop (Ialloc { bytes = num_bytes; _ }) | Lop (Ispecific (Ifar_alloc { bytes = num_bytes; _ })) -> begin match num_bytes with @@ -528,15 +485,16 @@ module BR = Branch_relaxation.Make (struct | Lop (Iintop_imm _) -> 1 | Lop (Ifloatofint | Iintoffloat | Iabsf | Inegf | Ispecific Isqrtf) -> 1 | Lop (Iaddf | Isubf | Imulf | Idivf | Ispecific Inegmulf) -> 1 + | Lop (Iopaque) -> 0 | Lop (Ispecific (Imuladdf | Inegmuladdf | Imulsubf | Inegmulsubf)) -> 1 | Lop (Ispecific (Ishiftarith _)) -> 1 | Lop (Ispecific (Imuladd | Imulsub)) -> 1 | Lop (Ispecific (Ibswap 16)) -> 2 | Lop (Ispecific (Ibswap _)) -> 1 | Lop (Ispecific Imove32) -> 1 - | Lop (Iname_for_debugger _) -> 0 + | Lop (Ispecific (Isignext _)) -> 1 | Lreloadretaddr -> 0 - | Lreturn -> epilogue_size () + | Lreturn -> epilogue_size f | Llabel _ -> 0 | Lbranch _ -> 1 | Lcondbranch (tst, _) -> @@ -565,6 +523,9 @@ module BR = Branch_relaxation.Make (struct | Lambda.Raise_notrace -> 4 end + let relax_poll ~return_label = + Lop (Ispecific (Ifar_poll { return_label })) + let relax_allocation ~num_bytes ~dbginfo = Lop (Ispecific (Ifar_alloc { bytes = num_bytes; dbginfo })) @@ -582,19 +543,21 @@ end) (* Output the assembly code for allocation. *) -let assembly_code_for_allocation i ~n ~far ~dbginfo = +let assembly_code_for_allocation env i ~n ~far ~dbginfo = let lbl_frame = - record_frame_label i.live (Dbg_alloc dbginfo) + record_frame_label env i.live (Dbg_alloc dbginfo) in - if !fastcode_flag then begin + if env.f.fun_fast then begin let lbl_after_alloc = new_label() in let lbl_call_gc = new_label() in (* n is at most Max_young_whsize * 8, i.e. currently 0x808, so it is reasonable to assume n < 0x1_000. This makes the generated code simpler. *) assert (16 <= n && n < 0x1_000 && n land 0x7 = 0); + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, #{emit_int offset}]\n`; ` sub {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, #{emit_int n}\n`; - ` cmp {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_limit}\n`; + ` cmp {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp1}\n`; if not far then begin ` b.lo {emit_label lbl_call_gc}\n` end else begin @@ -605,10 +568,10 @@ let assembly_code_for_allocation i ~n ~far ~dbginfo = end; `{emit_label lbl_after_alloc}:`; ` add {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, #8\n`; - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame } :: !call_gc_sites + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites end else begin begin match n with | 16 -> ` bl {emit_symbol "caml_alloc1"}\n` @@ -620,6 +583,40 @@ let assembly_code_for_allocation i ~n ~far ~dbginfo = `{emit_label lbl_frame}: add {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, #8\n` end +let assembly_code_for_poll env i ~far ~return_label = + let lbl_frame = record_frame_label env i.live (Dbg_alloc []) in + let lbl_call_gc = new_label() in + let lbl_after_poll = match return_label with + | None -> new_label() + | Some lbl -> lbl in + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` ldr {emit_reg reg_tmp1}, [{emit_reg reg_domain_state_ptr}, #{emit_int offset}]\n`; + ` cmp {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp1}\n`; + if not far then begin + match return_label with + | None -> + ` b.ls {emit_label lbl_call_gc}\n`; + `{emit_label lbl_after_poll}:\n` + | Some return_label -> + ` b.hi {emit_label return_label}\n`; + ` b {emit_label lbl_call_gc}\n`; + end else begin + match return_label with + | None -> + ` b.hi {emit_label lbl_after_poll}\n`; + ` b {emit_label lbl_call_gc}\n`; + `{emit_label lbl_after_poll}:\n` + | Some return_label -> + let lbl = new_label () in + ` b.ls {emit_label lbl}\n`; + ` b {emit_label return_label}\n`; + `{emit_label lbl}: b {emit_label lbl_call_gc}\n` + end; + env.call_gc_sites <- + { gc_lbl = lbl_call_gc; + gc_return_lbl = lbl_after_poll; + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites + (* Output .text section directive, or named .text.caml. if enabled. *) let emit_named_text_section func_name = @@ -642,16 +639,16 @@ let emit_load_literal dst lbl = (* Output the assembly code for an instruction *) -let emit_instr i = +let emit_instr env i = emit_debug_info i.dbg; match i.desc with | Lend -> () | Lprologue -> - assert (!prologue_required); - let n = frame_size() in + assert (env.f.fun_prologue_required); + let n = frame_size env in if n > 0 then emit_stack_adjustment (-n); - if !contains_calls then begin + if env.f.fun_contains_calls then begin cfi_offset ~reg:30 (* return address *) ~offset:(-8); ` str x30, [sp, #{emit_int (n-8)}]\n` end @@ -664,9 +661,9 @@ let emit_instr i = | {loc = Reg _}, {loc = Reg _} -> ` mov {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _}, {loc = Stack _} -> - ` str {emit_reg src}, {emit_stack dst}\n` + ` str {emit_reg src}, {emit_stack env dst}\n` | {loc = Stack _}, {loc = Reg _} -> - ` ldr {emit_reg dst}, {emit_stack src}\n` + ` ldr {emit_reg dst}, {emit_stack env src}\n` | _ -> assert false end @@ -677,9 +674,9 @@ let emit_instr i = | {loc = Reg _}, {loc = Reg _} -> ` mov {emit_wreg dst}, {emit_wreg src}\n` | {loc = Reg _}, {loc = Stack _} -> - ` str {emit_wreg src}, {emit_stack dst}\n` + ` str {emit_wreg src}, {emit_stack env dst}\n` | {loc = Stack _}, {loc = Reg _} -> - ` ldr {emit_wreg dst}, {emit_stack src}\n` + ` ldr {emit_wreg dst}, {emit_stack env src}\n` | _ -> assert false end @@ -691,35 +688,35 @@ let emit_instr i = else if is_immediate_float f then ` fmov {emit_reg i.res.(0)}, #{emit_printf "%.7f" (Int64.float_of_bits f)}\n` else begin - let lbl = float_literal f in + let lbl = float_literal env f in emit_load_literal i.res.(0) lbl end | Lop(Iconst_symbol s) -> emit_load_symbol_addr i.res.(0) s | Lop(Icall_ind) -> ` blr {emit_reg i.arg.(0)}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Icall_imm { func; }) -> ` bl {emit_symbol func}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Itailcall_ind) -> - output_epilogue (fun () -> ` br {emit_reg i.arg.(0)}\n`) + output_epilogue env (fun () -> ` br {emit_reg i.arg.(0)}\n`) | Lop(Itailcall_imm { func; }) -> - if func = !function_name then - ` b {emit_label !tailrec_entry_point}\n` + if func = env.f.fun_name then + ` b {emit_label env.f.fun_tailrec_entry_point_label}\n` else - output_epilogue (fun () -> ` b {emit_symbol func}\n`) + output_epilogue env (fun () -> ` b {emit_symbol func}\n`) | Lop(Iextcall { func; alloc = false; }) -> ` bl {emit_symbol func}\n` | Lop(Iextcall { func; alloc = true; }) -> emit_load_symbol_addr reg_x8 func; ` bl {emit_symbol "caml_c_call"}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Istackoffset n) -> assert (n mod 16 = 0); emit_stack_adjustment (-n); - stack_offset := !stack_offset + n - | Lop(Iload(size, addr)) -> + env.stack_offset <- env.stack_offset + n + | Lop(Iload(size, addr, _mut)) -> let dst = i.res.(0) in let base = match addr with @@ -770,9 +767,13 @@ let emit_instr i = ` str {emit_reg src}, {emit_addressing addr base}\n` end | Lop(Ialloc { bytes = n; dbginfo }) -> - assembly_code_for_allocation i ~n ~far:false ~dbginfo + assembly_code_for_allocation env i ~n ~far:false ~dbginfo | Lop(Ispecific (Ifar_alloc { bytes = n; dbginfo })) -> - assembly_code_for_allocation i ~n ~far:true ~dbginfo + assembly_code_for_allocation env i ~n ~far:true ~dbginfo + | Lop(Ipoll { return_label }) -> + assembly_code_for_poll env i ~far:false ~return_label + | Lop(Ispecific (Ifar_poll { return_label })) -> + assembly_code_for_poll env i ~far:true ~return_label | Lop(Iintop_imm(Iadd, n)) -> emit_addimm i.res.(0) i.arg.(0) n | Lop(Iintop_imm(Isub, n)) -> @@ -784,34 +785,34 @@ let emit_instr i = emit_cmpimm i.arg.(0) n; ` cset {emit_reg i.res.(0)}, {emit_string (name_for_comparison cmp)}\n` | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` b.ls {emit_label lbl}\n` | Lop(Ispecific Ifar_intop_checkbound) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in let lbl2 = new_label () in ` cmp {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` b.hi {emit_label lbl2}\n`; ` b {emit_label lbl}\n`; `{emit_label lbl2}:\n`; | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in emit_cmpimm i.arg.(0) n; ` b.ls {emit_label lbl}\n` | Lop(Ispecific( Ifar_intop_imm_checkbound { bound; })) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in let lbl2 = new_label () in ` cmp {emit_reg i.arg.(0)}, #{emit_int bound}\n`; ` b.hi {emit_label lbl2}\n`; ` b {emit_label lbl}\n`; `{emit_label lbl2}:\n`; | Lop(Ispecific(Ishiftcheckbound { shift; })) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` cmp {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}, lsr #{emit_int shift}\n`; ` b.cs {emit_label lbl}\n` | Lop(Ispecific(Ifar_shiftcheckbound { shift; })) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in let lbl2 = new_label () in ` cmp {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}, lsr #{emit_int shift}\n`; ` b.lo {emit_label lbl2}\n`; @@ -854,6 +855,8 @@ let emit_instr i = | Inegmulsubf -> "fnmsub" | _ -> assert false) in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}, {emit_reg i.arg.(0)}\n` + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific(Ishiftarith(op, shift))) -> let instr = (match op with Ishiftadd -> "add" @@ -880,11 +883,12 @@ let emit_instr i = | _ -> assert false end - | Lop (Iname_for_debugger _) -> () + | Lop(Ispecific(Isignext size)) -> + ` sbfm {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, #0, #{emit_int (size - 1)}\n` | Lreloadretaddr -> () | Lreturn -> - output_epilogue (fun () -> ` ret\n`) + output_epilogue env (fun () -> ` ret\n`) | Llabel lbl -> `{emit_label lbl}:\n` | Lbranch lbl -> @@ -964,10 +968,10 @@ let emit_instr i = (* each trap occupies 16 bytes on the stack *) let delta = 16 * delta_traps in cfi_adjust_cfa_offset delta; - stack_offset := !stack_offset + delta + env.stack_offset <- env.stack_offset + delta | Lpushtrap { lbl_handler; } -> ` adr {emit_reg reg_tmp1}, {emit_label lbl_handler}\n`; - stack_offset := !stack_offset + 16; + env.stack_offset <- env.stack_offset + 16; ` str {emit_reg reg_trap_ptr}, [sp, -16]!\n`; ` str {emit_reg reg_tmp1}, [sp, #8]\n`; cfi_adjust_cfa_offset 16; @@ -975,17 +979,17 @@ let emit_instr i = | Lpoptrap -> ` ldr {emit_reg reg_trap_ptr}, [sp], 16\n`; cfi_adjust_cfa_offset (-16); - stack_offset := !stack_offset - 16 + env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular -> let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in ` str xzr, [{emit_reg reg_domain_state_ptr}, {emit_int offset}]\n`; ` bl {emit_symbol "caml_raise_exn"}\n`; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n` + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_reraise -> ` bl {emit_symbol "caml_raise_exn"}\n`; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n` + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_notrace -> ` mov sp, {emit_reg reg_trap_ptr}\n`; ` ldr {emit_reg reg_tmp1}, [sp, #8]\n`; @@ -995,25 +999,14 @@ let emit_instr i = (* Emission of an instruction sequence *) -let rec emit_all i = - if i.desc = Lend then () else (emit_instr i; emit_all i.next) +let rec emit_all env i = + if i.desc = Lend then () else (emit_instr env i; emit_all env i.next) (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - fastcode_flag := fundecl.fun_fast; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - float_literals := []; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - contains_calls := fundecl.fun_contains_calls; - emit_named_text_section !function_name; + let env = mk_env fundecl in + emit_named_text_section fundecl.fun_name; ` .align 3\n`; ` .globl {emit_symbol fundecl.fun_name}\n`; emit_symbol_type emit_symbol fundecl.fun_name "function"; @@ -1021,22 +1014,22 @@ let fundecl fundecl = emit_debug_info fundecl.fun_dbg; cfi_startproc(); let num_call_gc, num_check_bound = - num_call_gc_and_check_bound_points fundecl.fun_body + num_call_gc_and_check_bound_points env in let max_out_of_line_code_offset = max_out_of_line_code_offset ~num_call_gc ~num_check_bound in - BR.relax fundecl.fun_body ~max_out_of_line_code_offset; - emit_all fundecl.fun_body; - List.iter emit_call_gc !call_gc_sites; - List.iter emit_call_bound_error !bound_error_sites; - assert (List.length !call_gc_sites = num_call_gc); - assert (List.length !bound_error_sites = num_check_bound); + BR.relax fundecl ~max_out_of_line_code_offset; + emit_all env fundecl.fun_body; + List.iter emit_call_gc env.call_gc_sites; + List.iter emit_call_bound_error env.bound_error_sites; + assert (List.length env.call_gc_sites = num_call_gc); + assert (List.length env.bound_error_sites = num_check_bound); cfi_endproc(); emit_symbol_type emit_symbol fundecl.fun_name "function"; emit_symbol_size fundecl.fun_name; - emit_literals() + emit_literals env (* Emission of data *) diff --git a/asmcomp/arm64/proc.ml b/asmcomp/arm64/proc.ml index 7635181a..7a6f10a6 100644 --- a/asmcomp/arm64/proc.ml +++ b/asmcomp/arm64/proc.ml @@ -33,11 +33,10 @@ let word_addressed = false x0 - x15 general purpose (caller-save) x16, x17 temporaries (used by call veeners) x18 platform register (reserved) - x19 - x24 general purpose (callee-save) - x25 domain state pointer + x19 - x25 general purpose (callee-save) x26 trap pointer x27 alloc pointer - x28 alloc limit + x28 domain state pointer x29 frame pointer x30 return address sp / xzr stack pointer / zero register @@ -48,10 +47,11 @@ let word_addressed = false *) let int_reg_name = - [| "x0"; "x1"; "x2"; "x3"; "x4"; "x5"; "x6"; "x7"; - "x8"; "x9"; "x10"; "x11"; "x12"; "x13"; "x14"; "x15"; - "x19"; "x20"; "x21"; "x22"; "x23"; "x24"; - "x25"; "x26"; "x27"; "x28"; "x16"; "x17" |] + [| "x0"; "x1"; "x2"; "x3"; "x4"; "x5"; "x6"; "x7"; (* 0 - 7 *) + "x8"; "x9"; "x10"; "x11"; "x12"; "x13"; "x14"; "x15"; (* 8 - 15 *) + "x19"; "x20"; "x21"; "x22"; "x23"; "x24"; "x25"; (* 16 - 22 *) + "x26"; "x27"; "x28"; (* 23 - 25 *) + "x16"; "x17" |] (* 26 - 27 *) let float_reg_name = [| "d0"; "d1"; "d2"; "d3"; "d4"; "d5"; "d6"; "d7"; @@ -67,7 +67,7 @@ let register_class r = | Float -> 1 let num_available_registers = - [| 22; 32 |] (* first 22 int regs allocatable; all float regs allocatable *) + [| 23; 32 |] (* first 23 int regs allocatable; all float regs allocatable *) let first_available_register = [| 0; 100 |] @@ -256,9 +256,10 @@ let destroyed_at_oper = function all_phys_regs | Iop(Iextcall { alloc = false; }) -> destroyed_at_c_call - | Iop(Ialloc _) -> + | Iop(Ialloc _) | Iop(Ipoll _) -> [| reg_x8 |] - | Iop(Iintoffloat | Ifloatofint | Iload(Single, _) | Istore(Single, _, _)) -> + | Iop( Iintoffloat | Ifloatofint + | Iload(Single, _, _) | Istore(Single, _, _)) -> [| reg_d7 |] (* d7 / s7 destroyed *) | _ -> [||] @@ -269,26 +270,16 @@ let destroyed_at_reloadretaddr = [| |] (* Maximal register pressure *) let safe_register_pressure = function - | Iextcall _ -> 8 - | Ialloc _ -> 24 - | _ -> 25 + | Iextcall _ -> 7 + | Ialloc _ | Ipoll _ -> 22 + | _ -> 23 let max_register_pressure = function - | Iextcall _ -> [| 10; 8 |] - | Ialloc _ -> [| 24; 32 |] + | Iextcall _ -> [| 7; 8 |] (* 7 integer callee-saves, 8 FP callee-saves *) + | Ialloc _ | Ipoll _ -> [| 22; 32 |] | Iintoffloat | Ifloatofint - | Iload(Single, _) | Istore(Single, _, _) -> [| 25; 31 |] - | _ -> [| 25; 32 |] - -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) - | Ispecific(Ishiftcheckbound _) -> false - | _ -> true + | Iload(Single, _, _) | Istore(Single, _, _) -> [| 23; 31 |] + | _ -> [| 23; 32 |] (* Layout of the stack *) let frame_required fd = diff --git a/asmcomp/arm64/selection.ml b/asmcomp/arm64/selection.ml index d9351075..90ad78ae 100644 --- a/asmcomp/arm64/selection.ml +++ b/asmcomp/arm64/selection.ml @@ -34,47 +34,8 @@ let is_offset chunk n = | Word_int | Word_val | Double | Double_u -> n land 7 = 0 && n lsr 3 < 0x1000) -(* An automaton to recognize ( 0+1+0* | 1+0+1* ) - - 0 1 0 - / \ / \ / \ - \ / \ / \ / - -0--> [1] --1--> [2] --0--> [3] - / - [0] - \ - -1--> [4] --0--> [5] --1--> [6] - / \ / \ / \ - \ / \ / \ / - 1 0 1 - -The accepting states are 2, 3, 5 and 6. *) - -let auto_table = [| (* accepting?, next on 0, next on 1 *) - (* state 0 *) (false, 1, 4); - (* state 1 *) (false, 1, 2); - (* state 2 *) (true, 3, 2); - (* state 3 *) (true, 3, 7); - (* state 4 *) (false, 5, 4); - (* state 5 *) (true, 5, 6); - (* state 6 *) (true, 7, 6); - (* state 7 *) (false, 7, 7) (* error state *) -|] - -let rec run_automata nbits state input = - let (acc, next0, next1) = auto_table.(state) in - if nbits <= 0 - then acc - else run_automata (nbits - 1) - (if input land 1 = 0 then next0 else next1) - (input asr 1) - -(* We are very conservative wrt what ARM64 supports: we don't support - repetitions of a 000111000 or 1110000111 pattern, just a single - pattern of this kind. *) - let is_logical_immediate n = - n <> 0 && n <> -1 && run_automata 64 0 n + Arch.is_logical_immediate (Nativeint.of_int n) (* Signed immediates are simpler *) @@ -199,6 +160,14 @@ method! select_operation op args dbg = | _ -> super#select_operation op args dbg end + (* Recognize sign extension *) + | Casr -> + begin match args with + [Cop(Clsl, [k; Cconst_int (n, _)], _); Cconst_int (n', _)] + when n' = n && 0 < n && n < 64 -> + (Ispecific (Isignext (64 - n)), [k]) + | _ -> super#select_operation op args dbg + end (* Recognize floating-point negate and multiply *) | Cnegf -> begin match args with @@ -243,4 +212,5 @@ method! insert_move_extcall_arg env ty_arg src dst = else self#insert_moves env src dst end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = (new selector)#emit_fundecl + ~future_funcnames f diff --git a/asmcomp/asmgen.ml b/asmcomp/asmgen.ml index 3bb3a600..269711bc 100644 --- a/asmcomp/asmgen.ml +++ b/asmcomp/asmgen.ml @@ -26,9 +26,20 @@ open Cmm type error = | Assembler_error of string | Mismatched_for_pack of string option + | Asm_generation of string * Emitaux.error exception Error of error +let cmm_invariants ppf fd_cmm = + let print_fundecl = + if !Clflags.dump_cmm then Printcmm.fundecl + else fun ppf fdecl -> Format.fprintf ppf "%s" fdecl.fun_name + in + if !Clflags.cmm_invariants && Cmm_invariants.run ppf fd_cmm then + Misc.fatal_errorf "Cmm invariants failed on following fundecl:@.%a@." + print_fundecl fd_cmm; + fd_cmm + let liveness phrase = Liveness.fundecl phrase; phrase let dump_if ppf flag message phrase = @@ -86,9 +97,13 @@ let if_emit_do f x = if should_emit () then f x else () let emit_begin_assembly = if_emit_do Emit.begin_assembly let emit_end_assembly = if_emit_do Emit.end_assembly let emit_data = if_emit_do Emit.data -let emit_fundecl = - if_emit_do - (Profile.record ~accumulate:true "emit" Emit.fundecl) +let emit_fundecl fd = + if should_emit() then begin + try + Profile.record ~accumulate:true "emit" Emit.fundecl fd + with Emitaux.Error e -> + raise (Error (Asm_generation(fd.Linear.fun_name, e))) + end let rec regalloc ~ppf_dump round fd = if round > 50 then @@ -118,11 +133,15 @@ let rec regalloc ~ppf_dump round fd = let (++) x f = f x -let compile_fundecl ~ppf_dump fd_cmm = +let compile_fundecl ~ppf_dump ~funcnames fd_cmm = Proc.init (); Reg.reset(); fd_cmm - ++ Profile.record ~accumulate:true "selection" Selection.fundecl + ++ Profile.record ~accumulate:true "cmm_invariants" (cmm_invariants ppf_dump) + ++ Profile.record ~accumulate:true "selection" + (Selection.fundecl ~future_funcnames:funcnames) + ++ Profile.record ~accumulate:true "polling" + (Polling.instrument_fundecl ~future_funcnames:funcnames) ++ pass_dump_if ppf_dump dump_selection "After instruction selection" ++ Profile.record ~accumulate:true "comballoc" Comballoc.fundecl ++ pass_dump_if ppf_dump dump_combine "After allocation combining" @@ -138,7 +157,6 @@ let compile_fundecl ~ppf_dump fd_cmm = ++ pass_dump_if ppf_dump dump_split "After live range splitting" ++ Profile.record ~accumulate:true "liveness" liveness ++ Profile.record ~accumulate:true "regalloc" (regalloc ~ppf_dump 1) - ++ Profile.record ~accumulate:true "available_regs" Available_regs.fundecl ++ Profile.record ~accumulate:true "linearize" Linearize.fundecl ++ pass_dump_linear_if ppf_dump dump_linear "Linearized code" ++ Profile.record ~accumulate:true "scheduling" Scheduling.fundecl @@ -146,17 +164,38 @@ let compile_fundecl ~ppf_dump fd_cmm = ++ save_linear ++ emit_fundecl +module String = Misc.Stdlib.String + let compile_data dl = dl ++ save_data ++ emit_data -let compile_phrase ~ppf_dump p = - if !dump_cmm then fprintf ppf_dump "%a@." Printcmm.phrase p; - match p with - | Cfunction fd -> compile_fundecl ~ppf_dump fd - | Cdata dl -> compile_data dl +let compile_phrases ~ppf_dump ps = + let funcnames = + List.fold_left (fun s p -> + match p with + | Cfunction fd -> String.Set.add fd.fun_name s + | Cdata _ -> s) + String.Set.empty ps + in + let rec compile ~funcnames ps = + match ps with + | [] -> () + | p :: ps -> + if !dump_cmm then fprintf ppf_dump "%a@." Printcmm.phrase p; + match p with + | Cfunction fd -> + compile_fundecl ~ppf_dump ~funcnames fd; + compile ~funcnames:(String.Set.remove fd.fun_name funcnames) ps + | Cdata dl -> + compile_data dl; + compile ~funcnames ps + in + compile ~funcnames ps +let compile_phrase ~ppf_dump p = + compile_phrases ~ppf_dump [p] (* For the native toplevel: generates generic functions unless they are already available in the process *) @@ -201,7 +240,7 @@ let end_gen_implementation ?toplevel ~ppf_dump emit_begin_assembly (); clambda ++ Profile.record "cmm" Cmmgen.compunit - ++ Profile.record "compile_phrases" (List.iter (compile_phrase ~ppf_dump)) + ++ Profile.record "compile_phrases" (compile_phrases ~ppf_dump) ++ (fun () -> ()); (match toplevel with None -> () | Some f -> compile_genfuns ~ppf_dump f); (* We add explicit references to external primitive symbols. This @@ -219,7 +258,6 @@ let end_gen_implementation ?toplevel ~ppf_dump type middle_end = backend:(module Backend_intf.S) - -> filename:string -> prefixname:string -> ppf_dump:Format.formatter -> Lambda.program @@ -230,7 +268,7 @@ let asm_filename output_prefix = then output_prefix ^ ext_asm else Filename.temp_file "camlasm" ext_asm -let compile_implementation ?toplevel ~backend ~filename ~prefixname ~middle_end +let compile_implementation ?toplevel ~backend ~prefixname ~middle_end ~ppf_dump (program : Lambda.program) = compile_unit ~output_prefix:prefixname ~asm_filename:(asm_filename prefixname) ~keep_asm:!keep_asm_file @@ -238,7 +276,7 @@ let compile_implementation ?toplevel ~backend ~filename ~prefixname ~middle_end (fun () -> Ident.Set.iter Compilenv.require_global program.required_globals; let clambda_with_constants = - middle_end ~backend ~filename ~prefixname ~ppf_dump program + middle_end ~backend ~prefixname ~ppf_dump program in end_gen_implementation ?toplevel ~ppf_dump clambda_with_constants) @@ -279,6 +317,10 @@ let report_error ppf = function fprintf ppf "This input file cannot be compiled %s: it was generated %s." (msg !Clflags.for_package) (msg saved) + | Asm_generation(fn, err) -> + fprintf ppf + "Error producing assembly code for function %s: %a" + fn Emitaux.report_error err let () = Location.register_error_of_exn diff --git a/asmcomp/asmgen.mli b/asmcomp/asmgen.mli index f86bd673..e7e280c9 100644 --- a/asmcomp/asmgen.mli +++ b/asmcomp/asmgen.mli @@ -18,7 +18,6 @@ (** The type of converters from Lambda to Clambda. *) type middle_end = backend:(module Backend_intf.S) - -> filename:string -> prefixname:string -> ppf_dump:Format.formatter -> Lambda.program @@ -28,7 +27,6 @@ type middle_end = val compile_implementation : ?toplevel:(string -> bool) -> backend:(module Backend_intf.S) - -> filename:string -> prefixname:string -> middle_end:middle_end -> ppf_dump:Format.formatter @@ -44,6 +42,7 @@ val compile_phrase : type error = | Assembler_error of string | Mismatched_for_pack of string option + | Asm_generation of string * Emitaux.error exception Error of error val report_error: Format.formatter -> error -> unit diff --git a/asmcomp/asmlink.ml b/asmcomp/asmlink.ml index 697eeb3c..d9b5753d 100644 --- a/asmcomp/asmlink.ml +++ b/asmcomp/asmlink.ml @@ -124,19 +124,6 @@ let runtime_lib () = with Not_found -> raise(Error(File_not_found libname)) -let object_file_name name = - let file_name = - try - Load_path.find name - with Not_found -> - fatal_errorf "Asmlink.object_file_name: %s not found" name in - if Filename.check_suffix file_name ".cmx" then - Filename.chop_suffix file_name ".cmx" ^ ext_obj - else if Filename.check_suffix file_name ".cmxa" then - Filename.chop_suffix file_name ".cmxa" ^ ext_lib - else - fatal_error "Asmlink.object_file_name: bad ext" - (* First pass: determine which units are needed *) let missing_globals = (Hashtbl.create 17 : (string, string list ref) Hashtbl.t) @@ -164,6 +151,17 @@ type file = | Unit of string * unit_infos * Digest.t | Library of string * library_infos +let object_file_name_of_file = function + | Unit (fname, _, _) -> Some (Filename.chop_suffix fname ".cmx" ^ ext_obj) + | Library (fname, infos) -> + let obj_file = Filename.chop_suffix fname ".cmxa" ^ ext_lib in + (* MSVC doesn't support empty .lib files, and macOS struggles to make + them (#6550), so there shouldn't be one if the .cmxa contains no + units. The file_exists check is added to be ultra-defensive for the + case where a user has manually added things to the .a/.lib file *) + if infos.lib_units = [] && not (Sys.file_exists obj_file) then None else + Some obj_file + let read_file obj_name = let file_name = try @@ -186,42 +184,30 @@ let read_file obj_name = end else raise(Error(Not_an_object_file file_name)) -let scan_file obj_name (tolink, objfiles) = match read_file obj_name with +let scan_file file tolink = match file with | Unit (file_name,info,crc) -> (* This is a .cmx file. It must be linked in any case. *) remove_required info.ui_name; List.iter (add_required file_name) info.ui_imports_cmx; - ((info, file_name, crc) :: tolink, obj_name :: objfiles) + (info, file_name, crc) :: tolink | Library (file_name,infos) -> (* This is an archive file. Each unit contained in it will be linked in only if needed. *) add_ccobjs (Filename.dirname file_name) infos; - let tolink = - List.fold_right - (fun (info, crc) reqd -> - if info.ui_force_link - || !Clflags.link_everything - || is_required info.ui_name - then begin - remove_required info.ui_name; - List.iter (add_required (Printf.sprintf "%s(%s)" - file_name info.ui_name)) - info.ui_imports_cmx; - (info, file_name, crc) :: reqd - end else - reqd) - infos.lib_units tolink - and objfiles = - if infos.lib_units = [] - && not (Sys.file_exists (object_file_name obj_name)) then - (* MSVC doesn't support empty .lib files, and macOS struggles to make - them (#6550), so there shouldn't be one if the .cmxa contains no - units. The file_exists check is added to be ultra-defensive for the - case where a user has manually added things to the .a/.lib file *) - objfiles - else - obj_name :: objfiles - in (tolink, objfiles) + List.fold_right + (fun (info, crc) reqd -> + if info.ui_force_link + || !Clflags.link_everything + || is_required info.ui_name + then begin + remove_required info.ui_name; + List.iter (add_required (Printf.sprintf "%s(%s)" + file_name info.ui_name)) + info.ui_imports_cmx; + (info, file_name, crc) :: reqd + end else + reqd) + infos.lib_units tolink (* Second pass: generate the startup file and link it with everything else *) @@ -295,17 +281,16 @@ let call_linker_shared file_list output_name = let link_shared ~ppf_dump objfiles output_name = Profile.record_call output_name (fun () -> - let units_tolink, objfiles = - List.fold_right scan_file objfiles ([], []) - in + let obj_infos = List.map read_file objfiles in + let units_tolink = List.fold_right scan_file obj_infos [] in List.iter (fun (info, file_name, crc) -> check_consistency file_name info crc) units_tolink; Clflags.ccobjs := !Clflags.ccobjs @ !lib_ccobjs; Clflags.all_ccopts := !lib_ccopts @ !Clflags.all_ccopts; - let objfiles = List.rev_map object_file_name objfiles @ + let objfiles = + List.rev (List.filter_map object_file_name_of_file obj_infos) @ (List.rev !Clflags.ccobjs) in - let startup = if !Clflags.keep_startup_file || !Emitaux.binary_backend_available then output_name ^ ".startup" ^ ext_asm @@ -355,9 +340,8 @@ let link ~ppf_dump objfiles output_name = if !Clflags.nopervasives then objfiles else if !Clflags.output_c_object then stdlib :: objfiles else stdlib :: (objfiles @ [stdexit]) in - let units_tolink, objfiles = - List.fold_right scan_file objfiles ([], []) - in + let obj_infos = List.map read_file objfiles in + let units_tolink = List.fold_right scan_file obj_infos [] in Array.iter remove_required Runtimedef.builtin_exceptions; begin match extract_missing_globals() with [] -> () @@ -381,7 +365,7 @@ let link ~ppf_dump objfiles output_name = (fun () -> make_startup_file ~ppf_dump units_tolink ~crc_interfaces); Misc.try_finally (fun () -> - call_linker (List.map object_file_name objfiles) + call_linker (List.filter_map object_file_name_of_file obj_infos) startup_obj output_name) ~always:(fun () -> remove_file startup_obj) ) diff --git a/asmcomp/asmpackager.ml b/asmcomp/asmpackager.ml index 604fac5e..c7baa706 100644 --- a/asmcomp/asmpackager.ml +++ b/asmcomp/asmpackager.ml @@ -132,7 +132,6 @@ let make_package_object ~ppf_dump members targetobj targetname coercion program, Closure_middle_end.lambda_to_clambda in Asmgen.compile_implementation ~backend - ~filename:targetname ~prefixname ~middle_end ~ppf_dump diff --git a/asmcomp/branch_relaxation.ml b/asmcomp/branch_relaxation.ml index c91fb32b..38c4e3a8 100644 --- a/asmcomp/branch_relaxation.ml +++ b/asmcomp/branch_relaxation.ml @@ -18,15 +18,15 @@ open Mach open Linear module Make (T : Branch_relaxation_intf.S) = struct - let label_map code = + let label_map f = let map = Hashtbl.create 37 in let rec fill_map pc instr = match instr.desc with | Lend -> (pc, map) | Llabel lbl -> Hashtbl.add map lbl pc; fill_map pc instr.next - | op -> fill_map (pc + T.instr_size op) instr.next + | op -> fill_map (pc + T.instr_size f op) instr.next in - fill_map 0 code + fill_map 0 f.fun_body let branch_overflows map pc_branch lbl_dest max_branch_offset = let pc_dest = Hashtbl.find map lbl_dest in @@ -51,6 +51,7 @@ module Make (T : Branch_relaxation_intf.S) = struct in match instr.desc with | Lop (Ialloc _) + | Lop (Ipoll { return_label = None }) | Lop (Iintop (Icheckbound)) | Lop (Iintop_imm (Icheckbound, _)) | Lop (Ispecific _) -> @@ -64,10 +65,15 @@ module Make (T : Branch_relaxation_intf.S) = struct opt_branch_overflows map pc lbl0 max_branch_offset || opt_branch_overflows map pc lbl1 max_branch_offset || opt_branch_overflows map pc lbl2 max_branch_offset + | Lop (Ipoll { return_label = Some lbl }) -> + (* A poll-and-branch instruction can branch to the label lbl, + but also to an out-of-line code block. *) + code_size + max_out_of_line_code_offset - pc >= max_branch_offset + || branch_overflows map pc lbl max_branch_offset | _ -> Misc.fatal_error "Unsupported instruction for branch relaxation" - let fixup_branches ~code_size ~max_out_of_line_code_offset map code = + let fixup_branches ~code_size ~max_out_of_line_code_offset map f = let expand_optbranch lbl n arg next = match lbl with | None -> next @@ -83,22 +89,25 @@ module Make (T : Branch_relaxation_intf.S) = struct instr_overflows ~code_size ~max_out_of_line_code_offset instr map pc in if not overflows then - fixup did_fix (pc + T.instr_size instr.desc) instr.next + fixup did_fix (pc + T.instr_size f instr.desc) instr.next else match instr.desc with + | Lop (Ipoll { return_label }) -> + instr.desc <- T.relax_poll ~return_label; + fixup true (pc + T.instr_size f instr.desc) instr.next | Lop (Ialloc { bytes = num_bytes; dbginfo }) -> instr.desc <- T.relax_allocation ~num_bytes ~dbginfo; - fixup true (pc + T.instr_size instr.desc) instr.next + fixup true (pc + T.instr_size f instr.desc) instr.next | Lop (Iintop (Icheckbound)) -> instr.desc <- T.relax_intop_checkbound (); - fixup true (pc + T.instr_size instr.desc) instr.next + fixup true (pc + T.instr_size f instr.desc) instr.next | Lop (Iintop_imm (Icheckbound, bound)) -> instr.desc <- T.relax_intop_imm_checkbound ~bound; - fixup true (pc + T.instr_size instr.desc) instr.next + fixup true (pc + T.instr_size f instr.desc) instr.next | Lop (Ispecific specific) -> instr.desc <- T.relax_specific_op specific; - fixup true (pc + T.instr_size instr.desc) instr.next + fixup true (pc + T.instr_size f instr.desc) instr.next | Lcondbranch (test, lbl) -> let lbl2 = Cmm.new_label() in let cont = @@ -107,7 +116,7 @@ module Make (T : Branch_relaxation_intf.S) = struct in instr.desc <- Lcondbranch (invert_test test, lbl2); instr.next <- cont; - fixup true (pc + T.instr_size instr.desc) instr.next + fixup true (pc + T.instr_size f instr.desc) instr.next | Lcondbranch3 (lbl0, lbl1, lbl2) -> let cont = expand_optbranch lbl0 0 instr.arg @@ -123,20 +132,20 @@ module Make (T : Branch_relaxation_intf.S) = struct We can *never* get here. *) assert false in - fixup false 0 code + fixup false 0 f.fun_body (* Iterate branch expansion till all conditional branches are OK *) - let rec relax code ~max_out_of_line_code_offset = + let rec relax f ~max_out_of_line_code_offset = let min_of_max_branch_offsets = List.fold_left (fun min_of_max_branch_offsets branch -> - min min_of_max_branch_offsets + Int.min min_of_max_branch_offsets (T.Cond_branch.max_displacement branch)) max_int T.Cond_branch.all in - let (code_size, map) = label_map code in + let (code_size, map) = label_map f in if code_size >= min_of_max_branch_offsets - && fixup_branches ~code_size ~max_out_of_line_code_offset map code - then relax code ~max_out_of_line_code_offset + && fixup_branches ~code_size ~max_out_of_line_code_offset map f + then relax f ~max_out_of_line_code_offset else () end diff --git a/asmcomp/branch_relaxation.mli b/asmcomp/branch_relaxation.mli index 7d540198..1750e368 100644 --- a/asmcomp/branch_relaxation.mli +++ b/asmcomp/branch_relaxation.mli @@ -18,7 +18,7 @@ module Make (T : Branch_relaxation_intf.S) : sig val relax - : Linear.instruction + : Linear.fundecl (* [max_offset_of_out_of_line_code] specifies the furthest distance, measured from the first address immediately after the last instruction of the function, that may be branched to from within the function in diff --git a/asmcomp/branch_relaxation_intf.ml b/asmcomp/branch_relaxation_intf.ml index 57127e51..68596d59 100644 --- a/asmcomp/branch_relaxation_intf.ml +++ b/asmcomp/branch_relaxation_intf.ml @@ -39,6 +39,7 @@ module type S = sig N.B. The only instructions supported are the following: - Lop (Ialloc _) + - Lop (Ipoll _) - Lop (Iintop Icheckbound) - Lop (Iintop_imm (Icheckbound, _)) - Lop (Ispecific _) @@ -55,7 +56,7 @@ module type S = sig val offset_pc_at_branch : distance (* The maximum size of a given instruction. *) - val instr_size : Linear.instruction_desc -> distance + val instr_size : Linear.fundecl -> Linear.instruction_desc -> distance (* Insertion of target-specific code to relax operations that cannot be relaxed generically. It is assumed that these rewrites do not change @@ -64,6 +65,11 @@ module type S = sig : num_bytes:int -> dbginfo:Debuginfo.alloc_dbginfo -> Linear.instruction_desc + + val relax_poll + : return_label:Cmm.label option + -> Linear.instruction_desc + val relax_intop_checkbound : unit -> Linear.instruction_desc diff --git a/asmcomp/cmm.ml b/asmcomp/cmm.ml index 1aaf5c72..85dde45a 100644 --- a/asmcomp/cmm.ml +++ b/asmcomp/cmm.ml @@ -165,6 +165,7 @@ and operation = | Ccmpf of float_comparison | Craise of Lambda.raise_kind | Ccheckbound + | Copaque type expression = Cconst_int of int * Debuginfo.t diff --git a/asmcomp/cmm.mli b/asmcomp/cmm.mli index 851da270..1b0782a4 100644 --- a/asmcomp/cmm.mli +++ b/asmcomp/cmm.mli @@ -162,6 +162,7 @@ and operation = then the index. It results in a bounds error if the index is greater than or equal to the bound. *) + | Copaque (* Sys.opaque_identity *) (** Every basic block should have a corresponding [Debuginfo.t] for its beginning. *) diff --git a/asmcomp/cmm_helpers.ml b/asmcomp/cmm_helpers.ml index ab1445f4..b0140d9c 100644 --- a/asmcomp/cmm_helpers.ml +++ b/asmcomp/cmm_helpers.ml @@ -1329,6 +1329,9 @@ let check_bound safety access_size dbg length a2 k = in Csequence(make_checkbound dbg [max_or_zero a1 dbg; a2], k) +let opaque e dbg = + Cop(Copaque, [e], dbg) + let unaligned_set size ptr idx newval dbg = match (size : Clambda_primitives.memory_access_size) with | Sixteen -> unaligned_set_16 ptr idx newval dbg @@ -1862,7 +1865,7 @@ let send_function arity = let cache = cache in let fun_name = "caml_send" ^ Int.to_string arity in let fun_args = - [obj, typ_val; tag, typ_int; cache, typ_val] + [obj, typ_val; tag, typ_int; cache, typ_addr] @ List.map (fun id -> (id, typ_val)) (List.tl args) in let fun_dbg = placeholder_fun_dbg ~human_name:fun_name in Cfunction diff --git a/asmcomp/cmm_helpers.mli b/asmcomp/cmm_helpers.mli index debc84b4..4fe47dd7 100644 --- a/asmcomp/cmm_helpers.mli +++ b/asmcomp/cmm_helpers.mli @@ -318,6 +318,9 @@ val check_bound : expression -> expression -> expression -> expression +(** Sys.opaque_identity *) +val opaque : expression -> Debuginfo.t -> expression + (** Generic application functions *) (** Get the symbol for the generic application with [n] arguments, and diff --git a/asmcomp/cmm_invariants.ml b/asmcomp/cmm_invariants.ml new file mode 100644 index 00000000..df102df7 --- /dev/null +++ b/asmcomp/cmm_invariants.ml @@ -0,0 +1,180 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Vincent Laviron, OCamlPro *) +(* *) +(* Copyright 2017 OCamlPro SAS *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +[@@@ocaml.warning "-40"] + +module Int = Numbers.Int + +(* Check a number of continuation-related invariants *) + +module Env : sig + type t + + val init : unit -> t + + val handler : t -> cont:int -> arg_num:int -> t + + val jump : t -> cont:int -> arg_num:int -> unit + + val report : Format.formatter -> bool +end = struct + type t = { + bound_handlers : int Int.Map.t; + } + + type error = + | Unbound_handler of { cont: int } + | Multiple_handlers of { cont: int; } + | Wrong_arguments_number of + { cont: int; handler_args: int; jump_args: int; } + + module Error = struct + type t = error + + let compare = Stdlib.compare + end + + module ErrorSet = Set.Make(Error) + + type persistent_state = { + mutable all_handlers : Int.Set.t; + mutable errors : ErrorSet.t; + } + + let state = { + all_handlers = Int.Set.empty; + errors = ErrorSet.empty; + } + + let record_error error = + state.errors <- ErrorSet.add error state.errors + + let unbound_handler cont = + record_error (Unbound_handler { cont; }) + + let multiple_handler cont = + record_error (Multiple_handlers { cont; }) + + let wrong_arguments cont handler_args jump_args = + record_error (Wrong_arguments_number { cont; handler_args; jump_args; }) + + let init () = + state.all_handlers <- Int.Set.empty; + state.errors <- ErrorSet.empty; + { + bound_handlers = Int.Map.empty; + } + + let handler t ~cont ~arg_num = + if Int.Set.mem cont state.all_handlers then multiple_handler cont; + state.all_handlers <- Int.Set.add cont state.all_handlers; + let bound_handlers = Int.Map.add cont arg_num t.bound_handlers in + { bound_handlers; } + + let jump t ~cont ~arg_num = + match Int.Map.find cont t.bound_handlers with + | handler_args -> + if arg_num <> handler_args then + wrong_arguments cont handler_args arg_num + | exception Not_found -> unbound_handler cont + + let print_error ppf error = + match error with + | Unbound_handler { cont } -> + if Int.Set.mem cont state.all_handlers then + Format.fprintf ppf + "Continuation %d was used outside the scope of its handler" + cont + else + Format.fprintf ppf + "Continuation %d was used but never bound" + cont + | Multiple_handlers { cont; } -> + Format.fprintf ppf + "Continuation %d was declared in more than one handler" + cont + | Wrong_arguments_number { cont; handler_args; jump_args } -> + Format.fprintf ppf + "Continuation %d was declared with %d arguments but called with %d" + cont + handler_args + jump_args + + let print_error_newline ppf error = + Format.fprintf ppf "%a@." print_error error + + let report ppf = + if ErrorSet.is_empty state.errors then false + else begin + ErrorSet.iter (fun err -> print_error_newline ppf err) state.errors; + true + end +end + +let rec check env (expr : Cmm.expression) = + match expr with + | Cconst_int _ | Cconst_natint _ | Cconst_float _ | Cconst_symbol _ + | Cvar _ -> + () + | Clet (_, expr, body) + | Clet_mut (_, _, expr, body) -> + check env expr; + check env body + | Cphantom_let (_, _, expr) -> + check env expr + | Cassign (_, expr) -> + check env expr + | Ctuple exprs -> + List.iter (check env) exprs + | Cop (_, args, _) -> + List.iter (check env) args; + | Csequence (expr1, expr2) -> + check env expr1; + check env expr2 + | Cifthenelse (test, _, ifso, _, ifnot, _) -> + check env test; + check env ifso; + check env ifnot + | Cswitch (body, _, branches, _) -> + check env body; + Array.iter (fun (expr, _) -> check env expr) branches + | Ccatch (rec_flag, handlers, body) -> + let env_extended = + List.fold_left + (fun env (cont, args, _, _) -> + Env.handler env ~cont ~arg_num:(List.length args)) + env + handlers + in + check env_extended body; + let env_handler = + match rec_flag with + | Recursive -> env_extended + | Nonrecursive -> env + in + List.iter (fun (_, _, handler, _) -> check env_handler handler) handlers + | Cexit (cont, args) -> + Env.jump env ~cont ~arg_num:(List.length args) + | Ctrywith (body, _, handler, _) -> + (* Jumping from inside a trywith body to outside isn't very nice, + but it's handled correctly by Linearize, as it happens + when compiling match ... with exception ..., for instance, so it is + not reported as an error. *) + check env body; + check env handler + +let run ppf (fundecl : Cmm.fundecl) = + let env = Env.init () in + check env fundecl.fun_body; + Env.report ppf diff --git a/asmcomp/cmm_invariants.mli b/asmcomp/cmm_invariants.mli new file mode 100644 index 00000000..4d1ffa91 --- /dev/null +++ b/asmcomp/cmm_invariants.mli @@ -0,0 +1,36 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Vincent Laviron, OCamlPro *) +(* *) +(* Copyright 2017 OCamlPro SAS *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* Check a number of continuation-related invariants *) + +(* Currently, this checks that : + - Every use of a continuation occurs within the scope of its handler + - Exit instructions take the same number of arguments as their handler. + - In every function declaration, a given continuation can only be + declared in a single handler. + + This is intended to document what invariants the backend can rely upon. + The first two would trigger errors later, and the last one, while + harmless for now, is not that hard to ensure, could be useful for + future work on the backend, and helped detect a code duplication bug. + + These invariants are not checked by default, but the check can be turned + on with the -dcmm-invariants compilation flag. +*) + +(** [run ppf fundecl] analyses the given function, and returns whether + any errors were encountered (with corresponding error messages printed + on the given formatter). *) + +val run : Format.formatter -> Cmm.fundecl -> bool diff --git a/asmcomp/cmmgen.ml b/asmcomp/cmmgen.ml index b8c8389e..3876da2e 100644 --- a/asmcomp/cmmgen.ml +++ b/asmcomp/cmmgen.ml @@ -424,7 +424,7 @@ let rec transl env e = let args = List.map (transl env) args in send kind met obj args dbg | Ulet(str, kind, id, exp, body) -> - transl_let env str kind id exp body + transl_let env str kind id exp (fun env -> transl env body) | Uphantom_let (var, defining_expr, body) -> let defining_expr = match defining_expr with @@ -785,7 +785,7 @@ and transl_prim_1 env p arg dbg = match p with (* Generic operations *) Popaque -> - transl env arg + opaque (transl env arg) dbg (* Heap operations *) | Pfield n -> get_field env (transl env arg) n dbg @@ -1117,7 +1117,7 @@ and transl_unbox_sized size dbg env exp = | Thirty_two -> transl_unbox_int dbg env Pint32 exp | Sixty_four -> transl_unbox_int dbg env Pint64 exp -and transl_let env str kind id exp body = +and transl_let env str kind id exp transl_body = let dbg = Debuginfo.none in let cexp = transl env exp in let unboxing = @@ -1151,16 +1151,16 @@ and transl_let env str kind id exp body = (* N.B. [body] must still be traversed even if [exp] will never return: there may be constant closures inside that need lifting out. *) begin match str, kind with - | Immutable, _ -> Clet(id, cexp, transl env body) - | Mutable, Pintval -> Clet_mut(id, typ_int, cexp, transl env body) - | Mutable, _ -> Clet_mut(id, typ_val, cexp, transl env body) + | Immutable, _ -> Clet(id, cexp, transl_body env) + | Mutable, Pintval -> Clet_mut(id, typ_int, cexp, transl_body env) + | Mutable, _ -> Clet_mut(id, typ_val, cexp, transl_body env) end | Boxed (boxed_number, false) -> let unboxed_id = V.create_local (VP.name id) in let v = VP.create unboxed_id in let cexp = unbox_number dbg boxed_number cexp in let body = - transl (add_unboxed_id (VP.var id) unboxed_id boxed_number env) body in + transl_body (add_unboxed_id (VP.var id) unboxed_id boxed_number env) in begin match str, boxed_number with | Immutable, _ -> Clet (v, cexp, body) | Mutable, bn -> Clet_mut (v, typ_of_boxed_number bn, cexp, body) @@ -1202,6 +1202,9 @@ and transl_if env (approx : then_else) ifso_dbg arg2 then_dbg then_ else_dbg else_ + | Ulet(str, kind, id, exp, cond) -> + transl_let env str kind id exp (fun env -> + transl_if env approx dbg cond then_dbg then_ else_dbg else_) | Uprim (Psequand, [arg1; arg2], inner_dbg) -> transl_sequand env approx inner_dbg arg1 diff --git a/asmcomp/coloring.ml b/asmcomp/coloring.ml index 897da20d..f55e4bc9 100644 --- a/asmcomp/coloring.ml +++ b/asmcomp/coloring.ml @@ -77,7 +77,7 @@ let allocate_registers() = if not (Reg.is_visited r) then begin Reg.mark_visited r; f r w; - List.iter (fun (r1, w1) -> walk r1 (min w w1)) r.prefer + List.iter (fun (r1, w1) -> walk r1 (Int.min w w1)) r.prefer end in List.iter (fun (r, w) -> walk r w) reg.prefer; Reg.clear_visited_marks () in diff --git a/asmcomp/comballoc.ml b/asmcomp/comballoc.ml index f125366d..f03bb3e6 100644 --- a/asmcomp/comballoc.ml +++ b/asmcomp/comballoc.ml @@ -63,7 +63,7 @@ let rec combine i allocstate = i.arg i.res i.dbg next, allocstate) end | Iop(Icall_ind | Icall_imm _ | Iextcall _ | - Itailcall_ind | Itailcall_imm _) -> + Itailcall_ind | Itailcall_imm _ | Ipoll _) -> let newnext = combine_restart i.next in (instr_cons_debug i.desc i.arg i.res i.dbg newnext, allocstate) diff --git a/asmcomp/dataflow.ml b/asmcomp/dataflow.ml new file mode 100644 index 00000000..02d8685c --- /dev/null +++ b/asmcomp/dataflow.ml @@ -0,0 +1,86 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Mach + +module type DOMAIN = sig + type t + val bot: t + val join: t -> t -> t + val lessequal: t -> t -> bool +end + +module Backward(D: DOMAIN) = struct + +let analyze ?(exnhandler = fun x -> x) ?(exnescape = D.bot) ~transfer instr = + + let lbls = + (Hashtbl.create 20 : (int, D.t) Hashtbl.t) in + let get_lbl n = + match Hashtbl.find_opt lbls n with None -> D.bot | Some b -> b + and set_lbl n x = + Hashtbl.replace lbls n x in + + let rec before end_ exn i = + match i.desc with + | Iend -> + transfer i ~next:end_ ~exn + | Ireturn | Iop (Itailcall_ind | Itailcall_imm _) -> + transfer i ~next:D.bot ~exn:D.bot + | Iop _ -> + let bx = before end_ exn i.next in + transfer i ~next:bx ~exn + | Iifthenelse(_, ifso, ifnot) -> + let bx = before end_ exn i.next in + let b1 = before bx exn ifso + and b0 = before bx exn ifnot in + transfer i ~next:(D.join b1 b0) ~exn + | Iswitch(_, cases) -> + let bx = before end_ exn i.next in + let b1 = + Array.fold_left + (fun accu case -> D.join accu (before bx exn case)) + D.bot cases in + transfer i ~next:b1 ~exn + | Icatch(rc, handlers, body) -> + let bx = before end_ exn i.next in + begin match rc with + | Cmm.Nonrecursive -> + List.iter + (fun (n, h) -> set_lbl n (before bx exn h)) + handlers + | Cmm.Recursive -> + let update changed (n, h) = + let b0 = get_lbl n in + let b1 = before bx exn h in + if D.lessequal b1 b0 then changed else (set_lbl n b1; true) in + while List.fold_left update false handlers do () done + end; + let b = before bx exn body in + transfer i ~next:b ~exn + | Iexit n -> + transfer i ~next:(get_lbl n) ~exn + | Itrywith(body, handler) -> + let bx = before end_ exn i.next in + let bh = exnhandler (before bx exn handler) in + let bb = before bx bh body in + transfer i ~next:bb ~exn + | Iraise _ -> + transfer i ~next:D.bot ~exn + in + let b = before D.bot exnescape instr in + (b, get_lbl) + +end diff --git a/asmcomp/dataflow.mli b/asmcomp/dataflow.mli new file mode 100644 index 00000000..e722066d --- /dev/null +++ b/asmcomp/dataflow.mli @@ -0,0 +1,90 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cambium, INRIA Paris *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +(* An abstract domain for dataflow analysis. Defines a type [t] + of abstractions, with lattice operations. *) + +module type DOMAIN = sig + type t + val bot: t + val join: t -> t -> t + val lessequal: t -> t -> bool +end + +(* Build a backward dataflow analysis engine for the given domain. *) + +module Backward(D: DOMAIN) : sig + + val analyze: ?exnhandler: (D.t -> D.t) -> + ?exnescape: D.t -> + transfer: (Mach.instruction -> next: D.t -> exn: D.t -> D.t) -> + Mach.instruction -> + D.t * (int -> D.t) + + (* [analyze ~exnhandler ~transfer instr] performs a backward dataflow + analysis on the Mach instruction [instr], typically a function body. + + It returns a pair of + - the abstract state at the function entry point; + - a mapping from catch handler label to the abstract state at the + beginning of the handler with this label. + + The [transfer] function is called as [transfer i ~next ~exn]. + - [i] is a sub-instruction of [instr]. + - [next] is the abstract state "after" the instruction for + normal control flow, falling through the successor(s) of [i]. + - [exn] is the abstract state "after" the instruction for + exceptional control flow, branching to the nearest exception handler + or exiting the function with an unhandled exception. + + The [transfer] function, then, returns the abstract state "before" + the instruction. The dataflow analysis will, then, propagate this + state "before" as the state "after" the predecessor instructions. + + For compound instructions like [Iifthenelse], the [next] abstract + value that is passed to [transfer] is not the abstract state at + the end of the compound instruction (e.g. after the "then" and "else" + branches have joined), but the join of the abstract states at + the beginning of the sub-instructions. More precisely: + - for [Iifthenelse(tst, ifso, ifnot)], it's the join of the + abstract states at the beginning of the [ifso] and [ifnot] + branches; + - for [Iswitch(tbl, cases)], it's the join of the abstract states + at the beginning of the [cases] branches; + - for [Icatch(recflag, body, handlers)] and [Itrywith(body, handler)], + it's the abstract state at the beginning of [body]. + + The [transfer] function is called for every sub-instruction of [instr], + as many times as needed to reach a fixpoint. Hence, it can record + the results of the analysis at each sub-instruction in a mutable + data structure. For instance, the transfer function for liveness + analysis updates the [live] fields of instructions as a side + effect. + + The optional [exnhandler] argument deals with exception handlers. + This is a function that transforms the abstract state at the + beginning of an exception handler into the exceptional abstract + state for the instructions within the body of the handler. + Typically, for liveness analysis, it takes the registers live at + the beginning of the handler and removes the register + [Proc.loc_exn_bucket] that carries the exception value. If not + specified, [exnhandler] defaults to the identity function. + + The optional [exnescape] argument deals with unhandled exceptions. + It is the abstract state corresponding to exiting the function on an + unhandled exception. It defaults to [D.bot]. + *) + +end diff --git a/asmcomp/deadcode.ml b/asmcomp/deadcode.ml index 887580fa..28fe153f 100644 --- a/asmcomp/deadcode.ml +++ b/asmcomp/deadcode.ml @@ -43,7 +43,7 @@ let rec deadcode i = { i; regs; exits = Int.Set.empty; } | Iop op -> let s = deadcode i.next in - if Proc.op_is_pure op (* no side effects *) + if operation_is_pure op (* no side effects *) && Reg.disjoint_set_array s.regs i.res (* results are not used after *) && not (Proc.regs_are_volatile i.arg) (* no stack-like hard reg *) && not (Proc.regs_are_volatile i.res) (* is involved *) diff --git a/asmcomp/debug/available_regs.ml b/asmcomp/debug/available_regs.ml deleted file mode 100644 index 67f0bdec..00000000 --- a/asmcomp/debug/available_regs.ml +++ /dev/null @@ -1,351 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell and Thomas Refis, Jane Street Europe *) -(* *) -(* Copyright 2013--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -module M = Mach -module R = Reg -module RAS = Reg_availability_set -module RD = Reg_with_debug_info -module V = Backend_var - -(* This pass treats [avail_at_exit] like a "result" structure whereas the - equivalent in [Liveness] is like an "environment". (Which means we need - to be careful not to throw away information about further-out catch - handlers collected in [avail_at_exit].) *) -let avail_at_exit = Hashtbl.create 42 -let avail_at_raise = ref RAS.Unreachable - -let augment_availability_at_raise avail = - avail_at_raise := RAS.inter avail !avail_at_raise - -let check_invariants (instr : M.instruction) ~(avail_before : RAS.t) = - match avail_before with - | Unreachable -> () - | Ok avail_before -> - (* Every register that is live across an instruction should also be - available before the instruction. *) - if not (R.Set.subset instr.live (RD.Set.forget_debug_info avail_before)) - then begin - Misc.fatal_errorf "Live registers not a subset of available registers: \ - live={%a} avail_before=%a missing={%a} insn=%a" - Printmach.regset instr.live - (RAS.print ~print_reg:Printmach.reg) - (RAS.Ok avail_before) - Printmach.regset (R.Set.diff instr.live - (RD.Set.forget_debug_info avail_before)) - Printmach.instr ({ instr with M. next = M.end_instr (); }) - end; - (* Every register that is an input to an instruction should be - available. *) - let args = R.set_of_array instr.arg in - let avail_before_fdi = RD.Set.forget_debug_info avail_before in - if not (R.Set.subset args avail_before_fdi) then begin - Misc.fatal_errorf "Instruction has unavailable input register(s): \ - avail_before=%a avail_before_fdi={%a} inputs={%a} insn=%a" - (RAS.print ~print_reg:Printmach.reg) (RAS.Ok avail_before) - Printmach.regset avail_before_fdi - Printmach.regset args - Printmach.instr ({ instr with M. next = M.end_instr (); }) - end - -(* [available_regs ~instr ~avail_before] calculates, given the registers - "available before" an instruction [instr], the registers that are available - both "across" and immediately after [instr]. This is a forwards dataflow - analysis. - - "available before" can be thought of, at the assembly level, as the set of - registers available when the program counter is equal to the address of the - particular instruction under consideration (that is to say, immediately - prior to the instruction being executed). Inputs to that instruction are - available at this point even if the instruction will clobber them. Results - from the previous instruction are also available at this point. - - "available across" is the registers available during the execution of - some particular instruction. These are the registers "available before" - minus registers that may be clobbered or otherwise invalidated by the - instruction. (The notion of "available across" is only useful for [Iop] - instructions. Recall that some of these may expand into multiple - machine instructions including clobbers, e.g. for [Ialloc].) - - The [available_before] and [available_across] fields of each instruction - is updated by this function. -*) -let rec available_regs (instr : M.instruction) - ~(avail_before : RAS.t) : RAS.t = - check_invariants instr ~avail_before; - instr.available_before <- avail_before; - let avail_across, avail_after = - let ok set = RAS.Ok set in - let unreachable = RAS.Unreachable in - match avail_before with - | Unreachable -> None, unreachable - | Ok avail_before -> - match instr.desc with - | Iend -> None, ok avail_before - | Ireturn -> None, unreachable - | Iop (Itailcall_ind) | Iop (Itailcall_imm _) -> - Some (ok Reg_with_debug_info.Set.empty), unreachable - | Iop (Iname_for_debugger { ident; which_parameter; provenance; - is_assignment; }) -> - (* First forget about any existing debug info to do with [ident] - if the naming corresponds to an assignment operation. *) - let forgetting_ident = - if not is_assignment then - avail_before - else - RD.Set.map (fun reg -> - match RD.debug_info reg with - | None -> reg - | Some debug_info -> - if V.same - (RD.Debug_info.holds_value_of debug_info) ident - then RD.clear_debug_info reg - else reg) - avail_before - in - let avail_after = ref forgetting_ident in - let num_parts_of_value = Array.length instr.arg in - (* Add debug info about [ident], but only for registers that are known - to be available. *) - for part_of_value = 0 to num_parts_of_value - 1 do - let reg = instr.arg.(part_of_value) in - if RD.Set.mem_reg forgetting_ident reg then begin - let regd = - RD.create ~reg - ~holds_value_of:ident - ~part_of_value - ~num_parts_of_value - ~which_parameter - ~provenance - in - avail_after := RD.Set.add regd (RD.Set.filter_reg !avail_after reg) - end - done; - Some (ok avail_before), ok !avail_after - | Iop (Imove | Ireload | Ispill) -> - (* Moves are special: they enable us to propagate names. - No-op moves need to be handled specially---in this case, we may - learn that a given hard register holds the value of multiple - pseudoregisters (all of which have the same value). This makes us - match up properly with [Liveness]. *) - let move_to_same_location = - let move_to_same_location = ref true in - for i = 0 to Array.length instr.arg - 1 do - let arg = instr.arg.(i) in - let res = instr.res.(i) in - (* Note that the register classes must be the same, so we don't - need to check that. *) - if arg.loc <> res.loc then begin - move_to_same_location := false - end - done; - !move_to_same_location - in - let made_unavailable = - if move_to_same_location then - RD.Set.empty - else - RD.Set.made_unavailable_by_clobber avail_before - ~regs_clobbered:instr.res - ~register_class:Proc.register_class - in - let results = - Array.map2 (fun arg_reg result_reg -> - match RD.Set.find_reg_exn avail_before arg_reg with - | exception Not_found -> - assert false (* see second invariant in [check_invariants] *) - | arg_reg -> - RD.create_copying_debug_info ~reg:result_reg - ~debug_info_from:arg_reg) - instr.arg instr.res - in - let avail_across = RD.Set.diff avail_before made_unavailable in - let avail_after = RD.Set.union avail_across (RD.Set.of_array results) in - Some (ok avail_across), ok avail_after - | Iop op -> - (* We split the calculation of registers that become unavailable after - a call into two parts. First: anything that the target marks as - destroyed by the operation, combined with any registers that will - be clobbered by the operation writing out its results. *) - let made_unavailable_1 = - let regs_clobbered = - Array.append (Proc.destroyed_at_oper instr.desc) instr.res - in - RD.Set.made_unavailable_by_clobber avail_before ~regs_clobbered - ~register_class:Proc.register_class - in - (* Second: the cases of (a) allocations and (b) OCaml to OCaml function - calls. In these cases, since the GC may run, registers always - become unavailable unless: - (a) they are "live across" the instruction; and/or - (b) they hold immediates and are assigned to the stack. - For the moment we assume that [Ispecific] instructions do not - run the GC. *) - (* CR-someday mshinwell: Consider factoring this out from here and - [Available_ranges.Make_ranges.end_pos_offset]. *) - let made_unavailable_2 = - match op with - | Icall_ind | Icall_imm _ | Ialloc _ -> - RD.Set.filter (fun reg -> - let holds_immediate = RD.holds_non_pointer reg in - let on_stack = RD.assigned_to_stack reg in - let live_across = Reg.Set.mem (RD.reg reg) instr.live in - let remains_available = - live_across - || (holds_immediate && on_stack) - in - not remains_available) - avail_before - | _ -> RD.Set.empty - in - let made_unavailable = - RD.Set.union made_unavailable_1 made_unavailable_2 - in - let avail_across = RD.Set.diff avail_before made_unavailable in - if M.operation_can_raise op then begin - augment_availability_at_raise (ok avail_across) - end; - let avail_after = - RD.Set.union - (RD.Set.without_debug_info (Reg.set_of_array instr.res)) - avail_across - in - Some (ok avail_across), ok avail_after - | Iifthenelse (_, ifso, ifnot) -> join [ifso; ifnot] ~avail_before - | Iswitch (_, cases) -> join (Array.to_list cases) ~avail_before - | Icatch (recursive, handlers, body) -> - List.iter (fun (nfail, _handler) -> - (* In case there are nested [Icatch] expressions with the same - handler numbers, we rely on the [Hashtbl] shadowing - semantics. *) - Hashtbl.add avail_at_exit nfail unreachable) - handlers; - let avail_after_body = - available_regs body ~avail_before:(ok avail_before) - in - (* CR-someday mshinwell: Consider potential efficiency speedups - (see suggestions from @chambart on GPR#856). *) - let aux (nfail, handler) (nfail', avail_at_top_of_handler) = - assert (nfail = nfail'); - available_regs handler ~avail_before:avail_at_top_of_handler - in - let aux_equal (nfail, avail_before_handler) - (nfail', avail_before_handler') = - assert (nfail = nfail'); - RAS.equal avail_before_handler avail_before_handler' - in - let rec fixpoint avail_at_top_of_handlers = - let avail_after_handlers = - List.map2 aux handlers avail_at_top_of_handlers - in - let avail_at_top_of_handlers' = - List.map (fun (nfail, _handler) -> - match Hashtbl.find avail_at_exit nfail with - | exception Not_found -> assert false (* see above *) - | avail_at_top_of_handler -> nfail, avail_at_top_of_handler) - handlers - in - match recursive with - | Nonrecursive -> avail_after_handlers - | Recursive -> - if List.for_all2 aux_equal avail_at_top_of_handlers - avail_at_top_of_handlers' - then avail_after_handlers - else fixpoint avail_at_top_of_handlers' - in - let init_avail_at_top_of_handlers = - List.map (fun (nfail, _handler) -> - match Hashtbl.find avail_at_exit nfail with - | exception Not_found -> assert false (* see above *) - | avail_at_top_of_handler -> nfail, avail_at_top_of_handler) - handlers - in - let avail_after_handlers = fixpoint init_avail_at_top_of_handlers in - List.iter (fun (nfail, _handler) -> - Hashtbl.remove avail_at_exit nfail) - handlers; - let avail_after = - List.fold_left (fun avail_at_join avail_after_handler -> - RAS.inter avail_at_join avail_after_handler) - avail_after_body - avail_after_handlers - in - None, avail_after - | Iexit nfail -> - let avail_before = ok avail_before in - let avail_at_top_of_handler = - match Hashtbl.find avail_at_exit nfail with - | exception Not_found -> (* also see top of [Icatch] clause above *) - Misc.fatal_errorf "Iexit %d not in scope of Icatch" nfail - | avail_at_top_of_handler -> avail_at_top_of_handler - in - let avail_at_top_of_handler = - RAS.inter avail_at_top_of_handler avail_before - in - Hashtbl.replace avail_at_exit nfail avail_at_top_of_handler; - None, unreachable - | Itrywith (body, handler) -> - let saved_avail_at_raise = !avail_at_raise in - avail_at_raise := unreachable; - let avail_before = ok avail_before in - let after_body = available_regs body ~avail_before in - let avail_before_handler = - match !avail_at_raise with - | Unreachable -> unreachable - | Ok avail_at_raise -> - let without_exn_bucket = - RD.Set.filter_reg avail_at_raise Proc.loc_exn_bucket - in - let with_anonymous_exn_bucket = - RD.Set.add (RD.create_without_debug_info ~reg:Proc.loc_exn_bucket) - without_exn_bucket - in - ok with_anonymous_exn_bucket - in - avail_at_raise := saved_avail_at_raise; - let avail_after = - RAS.inter after_body - (available_regs handler ~avail_before:avail_before_handler) - in - None, avail_after - | Iraise _ -> - let avail_before = ok avail_before in - augment_availability_at_raise avail_before; - None, unreachable - in - instr.available_across <- avail_across; - match instr.desc with - | Iend -> avail_after - | _ -> available_regs instr.next ~avail_before:avail_after - -and join branches ~avail_before = - let avail_before = RAS.Ok avail_before in - let avails = List.map (available_regs ~avail_before) branches in - let avail_after = - match avails with - | [] -> avail_before - | avail::avails -> List.fold_left RAS.inter avail avails - in - None, avail_after - -let fundecl (f : M.fundecl) = - if !Clflags.debug && !Clflags.debug_runavail then begin - assert (Hashtbl.length avail_at_exit = 0); - avail_at_raise := RAS.Unreachable; - let fun_args = R.set_of_array f.fun_args in - let avail_before = RAS.Ok (RD.Set.without_debug_info fun_args) in - ignore ((available_regs f.fun_body ~avail_before) : RAS.t); - end; - f diff --git a/asmcomp/debug/available_regs.mli b/asmcomp/debug/available_regs.mli deleted file mode 100644 index d065d388..00000000 --- a/asmcomp/debug/available_regs.mli +++ /dev/null @@ -1,18 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell and Thomas Refis, Jane Street Europe *) -(* *) -(* Copyright 2013--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Available registers analysis used to determine which variables may be - shown in the debugger. *) - -val fundecl : Mach.fundecl -> Mach.fundecl diff --git a/asmcomp/debug/compute_ranges.ml b/asmcomp/debug/compute_ranges.ml deleted file mode 100644 index 7d40194d..00000000 --- a/asmcomp/debug/compute_ranges.ml +++ /dev/null @@ -1,515 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2014--2019 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-30-40-41-42"] - -open! Int_replace_polymorphic_compare - -module L = Linear - -module Make (S : Compute_ranges_intf.S_functor) = struct - module Subrange_state = S.Subrange_state - module Subrange_info = S.Subrange_info - module Range_info = S.Range_info - - let rewrite_label env label = - match Numbers.Int.Map.find label env with - | exception Not_found -> label - | label -> label - - module Subrange = struct - (* CR-soon mshinwell: Check that function epilogues, including returns - in the middle of functions, work ok in the debugger. *) - type t = { - start_pos : L.label; - start_pos_offset : int; - end_pos : L.label; - end_pos_offset : int; - subrange_info : Subrange_info.t; - } - - let create ~(start_insn : L.instruction) - ~start_pos ~start_pos_offset - ~end_pos ~end_pos_offset - ~subrange_info = - match start_insn.desc with - | Llabel _ -> - { start_pos; - start_pos_offset; - end_pos; - end_pos_offset; - subrange_info; - } - | _ -> - Misc.fatal_errorf "Subrange.create: bad [start_insn]: %a" - Printlinear.instr start_insn - - let start_pos t = t.start_pos - let start_pos_offset t = t.start_pos_offset - let end_pos t = t.end_pos - let end_pos_offset t = t.end_pos_offset - let info t = t.subrange_info - - let rewrite_labels t ~env = - let start_pos = rewrite_label env t.start_pos in - let end_pos = rewrite_label env t.end_pos in - if start_pos = end_pos - && t.start_pos_offset = 0 - && t.end_pos_offset = 0 - then None - else - Some { - t with - start_pos; - end_pos; - } - end - - module Range = struct - type t = { - mutable subranges : Subrange.t list; - mutable min_pos_and_offset : (L.label * int) option; - range_info : Range_info.t; - } - - let create range_info = - { subranges = []; - min_pos_and_offset = None; - range_info; - } - - let info t = t.range_info - - let add_subrange t ~subrange = - let start_pos = Subrange.start_pos subrange in - let start_pos_offset = Subrange.start_pos_offset subrange in - begin match t.min_pos_and_offset with - | None -> t.min_pos_and_offset <- Some (start_pos, start_pos_offset) - | Some (min_pos, min_pos_offset) -> - (* This may seem dubious, but is correct by virtue of the way label - counters are allocated sequentially and the fact that, below, - we go through the code from lowest (code) address to highest. As - such the label with the highest integer value should be the one with - the highest address, and vice-versa. (Note that we also exploit the - ordering when constructing DWARF-4 location lists, to ensure that - they are sorted in increasing program counter order by start - address.) *) - let c = compare start_pos min_pos in - if c < 0 - || (c = 0 && start_pos_offset < min_pos_offset) - then begin - t.min_pos_and_offset <- Some (start_pos, start_pos_offset) - end - end; - t.subranges <- subrange::t.subranges - - let estimate_lowest_address t = - (* See assumption described in compute_ranges_intf.ml. *) - t.min_pos_and_offset - - let fold t ~init ~f = - List.fold_left f init t.subranges - - let no_subranges t = - match t.subranges with - | [] -> true - | _ -> false - - let rewrite_labels_and_remove_empty_subranges t ~env = - let subranges = - List.filter_map (fun subrange -> - Subrange.rewrite_labels subrange ~env) - t.subranges - in - match subranges with - | [] -> - { t with - subranges; - min_pos_and_offset = None; - } - | subranges -> - let min_pos_and_offset = - Option.map - (fun (label, offset) -> rewrite_label env label, offset) - t.min_pos_and_offset - in - { t with - subranges; - min_pos_and_offset; - } - end - - type t = { - ranges : Range.t S.Index.Tbl.t; - } - - module KM = S.Key.Map - module KS = S.Key.Set - - (* Whilst this pass is not DWARF-specific, the output of this pass uses - the conventions of the DWARF specification (e.g. DWARF-4 spec. - section 2.6.2, page 30) in the sense that starting addresses of ranges - are treated as inclusive and ending addresses as exclusive. - - Imagine that, for a given [key], the program counter (PC) is exactly at the - start of [insn]; that instruction has not yet been executed. Assume - a immediately-previous instruction exists called [prev_insn]. Intuitively, - this function calculates which available subranges are to start and stop at - that point, but these notions are subtle. - - There are eight cases, referenced in the code below. - - 1. First four cases: [key] is currently unavailable, i.e. it is not a - member of (roughly speaking) [S.available_across prev_insn]. - - (a) [key] is not in [S.available_before insn] and neither is it in - [S.available_across insn]. There is nothing to do. - - (b) [key] is not in [S.available_before insn] but it is in - [S.available_across insn]. A new range is created with the starting - position being one byte after the first machine instruction of [insn] - and left open. - - It might seem like this case 1 (b) is impossible, likewise for 2 (b) - below, since "available across" should always be a subset of - "available before". However this does not hold in general: see the - comment in available_ranges_vars.ml. - - (c) [key] is in [S.available_before insn] but it is not in - [S.available_across insn]. A new range is created with the starting - position being the first machine instruction of [insn] and the ending - position being the next machine address after that. - - (d) [key] is in [S.available_before insn] and it is also in - [S.available_across insn]. A new range is created with the starting - position being the first machine instruction of [insn] and left open. - - 2. Second four cases: [key] is already available, i.e. a member of - [S.available_across prev_insn]. - - (a) [key] is not in [S.available_before insn] and neither is it in - [S.available_across insn]. The range endpoint is given as the address - of the first machine instruction of [insn]. Since endpoint bounds are - exclusive (see above) then [key] will not be shown as available when - the debugger is standing on [insn]. - - (b) [key] is not in [S.available_before insn] but it is in - [S.available_across insn]. The range endpoint is given as the address - of the first machine instruction of [insn]; and a new range is opened - in the same way as for case 1 (b), above. - - (c) [key] is in [S.available_before insn] but it is not in - [S.available_across insn]. This will only happen when calculating - variables' available ranges for operation (i.e. [Lop]) instructions - (for example calls or allocations). To give a good user experience it - is necessary to show availability when the debugger is standing on the - very first instruction of the operation but not thereafter. As such we - terminate the range one byte beyond the first machine instruction of - [insn]. - - (d) [key] is in [S.available_before insn] and it is also in - it is in [S.available_across insn]. The existing range remains open. - *) - - type action = - | Open_one_byte_subrange - | Open_subrange - | Open_subrange_one_byte_after - | Close_subrange - | Close_subrange_one_byte_after - - (* CR mshinwell: Move to [Clflags] *) - let check_invariants = ref true - - let actions_at_instruction ~(insn : L.instruction) - ~(prev_insn : L.instruction option) = - let available_before = S.available_before insn in - let available_across = S.available_across insn in - let opt_available_across_prev_insn = - match prev_insn with - | None -> KS.empty - | Some prev_insn -> S.available_across prev_insn - in - let case_1b = - KS.diff available_across - (KS.union opt_available_across_prev_insn available_before) - in - let case_1c = - KS.diff available_before - (KS.union opt_available_across_prev_insn available_across) - in - let case_1d = - KS.diff (KS.inter available_before available_across) - opt_available_across_prev_insn - in - let case_2a = - KS.diff opt_available_across_prev_insn - (KS.union available_before available_across) - in - let case_2b = - KS.inter opt_available_across_prev_insn - (KS.diff available_across available_before) - in - let case_2c = - KS.diff - (KS.inter opt_available_across_prev_insn available_before) - available_across - in - let handle case action result = - (* We use [K.all_parents] here to circumvent a potential performance - problem. In the case of lexical blocks, there may be long chains - of blocks and their parents, yet the innermost block determines the - rest of the chain. As such [S] (which comes from - lexical_block_ranges.ml) only needs to use the innermost blocks in - the "available before" sets, keeping things fast---but we still - populate ranges for all parent blocks, thus avoiding any - post-processing, by using [K.all_parents] here. *) - KS.fold (fun key result -> - List.fold_left (fun result key -> - (key, action) :: result) - result - (key :: (S.Key.all_parents key))) - case - result - in - let actions = - (* Ranges must be closed before they are opened---otherwise, when a - variable moves between registers at a range boundary, we might end up - with no open range for that variable. Note that the pipeline below - constructs the [actions] list in reverse order---later functions in - the pipeline produce actions nearer the head of the list. *) - [] - |> handle case_1b Open_subrange_one_byte_after - |> handle case_1c Open_one_byte_subrange - |> handle case_1d Open_subrange - |> handle case_2a Close_subrange - |> handle case_2b Open_subrange_one_byte_after - |> handle case_2b Close_subrange - |> handle case_2c Close_subrange_one_byte_after - in - let must_restart = - if S.must_restart_ranges_upon_any_change () - && match actions with - | [] -> false - | _::_ -> true - then - KS.inter opt_available_across_prev_insn available_before - else - KS.empty - in - actions, must_restart - - let rec process_instruction t (fundecl : L.fundecl) - ~(first_insn : L.instruction) ~(insn : L.instruction) - ~(prev_insn : L.instruction option) - ~currently_open_subranges ~subrange_state = - let used_label = ref None in - let get_label () = - match !used_label with - | Some label_and_insn -> label_and_insn - | None -> - (* Note that we can't reuse an existing label in the code since we rely - on the ordering of range-related labels. *) - let label = Cmm.new_label () in - let label_insn : L.instruction = - { desc = Llabel label; - next = insn; - arg = [| |]; - res = [| |]; - dbg = insn.dbg; - live = insn.live; - } - in - used_label := Some (label, label_insn); - label, label_insn - in - let open_subrange key ~start_pos_offset ~currently_open_subranges = - (* If the range is later discarded, the inserted label may actually be - useless, but this doesn't matter. It does not generate any code. *) - let label, label_insn = get_label () in - KM.add key (label, start_pos_offset, label_insn) currently_open_subranges - in - let close_subrange key ~end_pos_offset ~currently_open_subranges = - match KM.find key currently_open_subranges with - | exception Not_found -> - Misc.fatal_errorf "No subrange is open for key %a" - S.Key.print key - | start_pos, start_pos_offset, start_insn -> - let currently_open_subranges = KM.remove key currently_open_subranges in - match Range_info.create fundecl key ~start_insn with - | None -> currently_open_subranges - | Some (index, range_info) -> - let range = - match S.Index.Tbl.find t.ranges index with - | range -> range - | exception Not_found -> - let range = Range.create range_info in - S.Index.Tbl.add t.ranges index range; - range - in - let label, _label_insn = get_label () in - let subrange_info = Subrange_info.create key subrange_state in - let subrange = - Subrange.create ~start_insn - ~start_pos ~start_pos_offset - ~end_pos:label ~end_pos_offset - ~subrange_info - in - Range.add_subrange range ~subrange; - currently_open_subranges - in - let actions, must_restart = actions_at_instruction ~insn ~prev_insn in - (* Restart ranges if needed *) - let currently_open_subranges = - KS.fold (fun key currently_open_subranges -> - let currently_open_subranges = - close_subrange key ~end_pos_offset:0 ~currently_open_subranges - in - open_subrange key ~start_pos_offset:0 ~currently_open_subranges) - must_restart - currently_open_subranges - in - (* Apply actions *) - let currently_open_subranges = - List.fold_left (fun currently_open_subranges (key, (action : action)) -> - match action with - | Open_one_byte_subrange -> - let currently_open_subranges = - open_subrange key ~start_pos_offset:0 ~currently_open_subranges - in - close_subrange key ~end_pos_offset:1 ~currently_open_subranges - | Open_subrange -> - open_subrange key ~start_pos_offset:0 ~currently_open_subranges - | Open_subrange_one_byte_after -> - open_subrange key ~start_pos_offset:1 ~currently_open_subranges - | Close_subrange -> - close_subrange key ~end_pos_offset:0 ~currently_open_subranges - | Close_subrange_one_byte_after -> - close_subrange key ~end_pos_offset:1 ~currently_open_subranges) - currently_open_subranges - actions - in - (* Close all subranges if at last instruction *) - let currently_open_subranges = - match insn.desc with - | Lend -> - let currently_open_subranges = - KM.fold (fun key _ currently_open_subranges -> - close_subrange key ~end_pos_offset:0 ~currently_open_subranges) - currently_open_subranges - currently_open_subranges - in - assert (KM.is_empty currently_open_subranges); - currently_open_subranges - | _ -> currently_open_subranges - in - let first_insn = - match !used_label with - | None -> first_insn - | Some (_label, label_insn) -> - assert (label_insn.L.next == insn); - (* (Note that by virtue of [Lprologue], we can insert labels prior to - the first assembly instruction of the function.) *) - begin match prev_insn with - | None -> - (* The label becomes the new first instruction. *) - label_insn - | Some prev_insn -> - assert (prev_insn.L.next == insn); - prev_insn.next <- label_insn; - first_insn - end - in - if !check_invariants then begin - let currently_open_subranges = - KS.of_list ( - List.map (fun (key, _datum) -> key) - (KM.bindings currently_open_subranges)) - in - let should_be_open = S.available_across insn in - let not_open_but_should_be = - KS.diff should_be_open currently_open_subranges - in - if not (KS.is_empty not_open_but_should_be) then begin - Misc.fatal_errorf "%s: ranges for %a are not open across the following \ - instruction:\n%a\navailable_across:@ %a\n\ - currently_open_subranges: %a" - fundecl.fun_name - KS.print not_open_but_should_be - Printlinear.instr { insn with L.next = L.end_instr; } - KS.print should_be_open - KS.print currently_open_subranges - end - end; - match insn.desc with - | Lend -> first_insn - | Lprologue | Lop _ | Lreloadretaddr | Lreturn | Llabel _ - | Lbranch _ | Lcondbranch _ | Lcondbranch3 _ | Lswitch _ - | Lentertrap | Lpushtrap _ | Lpoptrap | Ladjust_trap_depth _ - | Lraise _ -> - let subrange_state = - Subrange_state.advance_over_instruction subrange_state insn - in - process_instruction t fundecl ~first_insn ~insn:insn.next - ~prev_insn:(Some insn) ~currently_open_subranges ~subrange_state - - let process_instructions t fundecl ~first_insn = - let subrange_state = Subrange_state.create () in - process_instruction t fundecl ~first_insn ~insn:first_insn - ~prev_insn:None ~currently_open_subranges:KM.empty ~subrange_state - - let all_indexes t = - S.Index.Set.of_list (List.map fst (S.Index.Tbl.to_list t.ranges)) - - let empty = - { ranges = S.Index.Tbl.create 1; - } - - let create (fundecl : L.fundecl) = - let t = - { ranges = S.Index.Tbl.create 42; - } - in - let first_insn = - process_instructions t fundecl ~first_insn:fundecl.fun_body - in - let fundecl : L.fundecl = - { fundecl with fun_body = first_insn; } - in - t, fundecl - - let iter t ~f = - S.Index.Tbl.iter (fun index range -> f index range) - t.ranges - - let fold t ~init ~f = - S.Index.Tbl.fold (fun index range acc -> f acc index range) - t.ranges - init - - let find t index = S.Index.Tbl.find t.ranges index - - let rewrite_labels_and_remove_empty_subranges_and_ranges t ~env = - let ranges = S.Index.Tbl.create 42 in - S.Index.Tbl.iter (fun index range -> - let range = - Range.rewrite_labels_and_remove_empty_subranges range ~env - in - if not (Range.no_subranges range) then begin - S.Index.Tbl.add ranges index range - end) - t.ranges; - { ranges; - } -end diff --git a/asmcomp/debug/compute_ranges_intf.ml b/asmcomp/debug/compute_ranges_intf.ml deleted file mode 100644 index 1fb4bdb6..00000000 --- a/asmcomp/debug/compute_ranges_intf.ml +++ /dev/null @@ -1,274 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2014--2019 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-30-40-41-42"] - -(** This file defines types that are used to specify the interface of - [Compute_ranges]. The description of [Compute_ranges] is: - - "Coalescing of per-instruction information into possibly-discontiguous - regions of code delimited by labels. This is used for collating register - availability and lexical block scoping information into a concise form." - - [Compute_ranges] defines a functor, whose argument has type [S_functor], and - whose result has type [S]. Both [S_functor] and [S] are defined here. - - It is suggested that those unfamiliar with this module start by reading - the documentation on module type [S], below. -*) - -module L = Linear - -(** The type of caller-defined contextual state associated with subranges. - This may be used to track information throughout the range-computing - process. *) -module type S_subrange_state = sig - type t - - val create : unit -> t - val advance_over_instruction : t -> L.instruction -> t -end - -(** The type of caller-defined information associated with subranges. *) -module type S_subrange_info = sig - type t - type key - type subrange_state - - val create : key -> subrange_state -> t -end - -(** The type of caller-defined information associated with ranges. *) -module type S_range_info = sig - type t - type key - type index - - val create - : L.fundecl - -> key - -> start_insn:L.instruction - -> (index * t) option -end - -(** This module type specifies what the caller has to provide in order to - instantiate a module to compute ranges. *) -module type S_functor = sig - (** The module [Index] is used to filter and group the generated subranges. - Inclusion of a computed subrange in the result is conditional upon the - existence of an index that can be associated to it. To give a concrete - example, the keys associated to ranges might be pseudoregisters, and the - indexes variable names (c.f. [Available_ranges_vars]). Every register that - is not known to hold the value of some variable is dropped from the - result. - - As the name suggests, values of type [Index.t] also serve as indices for - accessing ranges in the result. The result may actually contain no - reference to keys (only [Subrange_info.t] may reliably contain it), and - subranges with different keys will be coalesced into a single range if all - their keys are associated to the same index. *) - module Index : Identifiable.S - - (** The module [Key] corresponds to the identifiers that define the ranges in - [Linear] instructions. Each instruction should have two sets of keys, - [available_before] and [available_across], with accessor functions of - these names being provided to retrieve them. The notion of "availability" - is not prescribed. The availability sets are used to compute subranges - associated to each key. *) - module Key : sig - (** The type of identifiers that define ranges. *) - type t - - module Set : sig - include Set.S with type elt = t - val print : Format.formatter -> t -> unit - end - - module Map : Map.S with type key = t - - (** Print a representation (typically sexp) of the given key to the given - formatter. *) - val print : Format.formatter -> t -> unit - - (** In some situations, for performance reasons, an "available" set may only - contain a subset of all keys that need to be tracked. For example, when - using a notion of availability that describes which lexical block a - given instruction lies in, using a standard notion of nested lexical - blocks, the innermost lexical block uniquely determines the chain of its - parents. (This is exploited in [Lexical_block_ranges].) The - [all_parents] function must return, given an "available" [key], all - those other keys that are also available and uniquely determined by - [key]. *) - val all_parents : t -> t list - end - - (** The module [Range_info] is used to store additional information on a range - that is associated to a range at its creation and can be retrieved from - the result. The association between keys and indices is also done here: - [Range_info.create] serves both as a map between keys and indices; and - also as the creator of the [Range_info.t] structure. When several - subranges are contained in a single range, the associated [Range_info.t] - will correspond to the first closed subrange. *) - module Range_info : S_range_info - with type key := Key.t - with type index := Index.t - - (** The module [Subrange_state] describes information that needs to be - propagated and passed to [Subrange_info.create]. The state that will be - used for subrange creation is the state at the end of the subrange, not at - the beginning. *) - module Subrange_state : S_subrange_state - - (** The module [Subrange_info] has a similar purpose to [Range_info], but for - subranges. Its distinguishing property is that it can store information - about its context using the additional [subrange_state] parameter of its - [create] function. *) - module Subrange_info : S_subrange_info - with type key := Key.t - with type subrange_state := Subrange_state.t - - (** How to retrieve from an instruction those keys that are available - immediately before the instruction starts executing. *) - val available_before : L.instruction -> Key.Set.t - - (** How to retrieve from an instruction those keys that are available - between the points at which the instruction reads its arguments and - writes its results. *) - val available_across : L.instruction -> Key.Set.t - - (** This [must_restart_ranges_upon_any_change] boolean exists because some - consumers of the range information may require that two subranges are - disjoint rather than including one in another. When this function returns - [true], whenever a subrange is opened or closed, all other overlapping - subranges will be split in two at the same point. *) - val must_restart_ranges_upon_any_change : unit -> bool -end - -(** This module type is the result type of the [Compute_ranges.Make] functor. - - The _ranges_ being computed are composed of contiguous _subranges_ delimited - by two labels (of type [Linear.label]). These labels will be added by - this pass to the code being inspected, which is why the [create] function in - the result of the functor returns not only the ranges but also the updated - function with the labels added. The [start_pos_offset] and [end_pos_offset] - components of the subranges are there to allow a distinction between ranges - starting (or ending) right at the start of the corresponding instruction - (offset of zero), and ranges starting or ending one byte after the actual - instruction (offset of one). *) -module type S = sig - (** Corresponds to [Index] in the [S_functor] module type. *) - module Index : Identifiable.S - - (** Corresponds to [Key] in the [S_functor] module type. *) - module Key : sig - type t - module Set : Set.S with type elt = t - module Map : Map.S with type key = t - end - - (** Corresponds to [Subrange_state] in the [S_functor] module type. *) - module Subrange_state : S_subrange_state - - (** Corresponds to [Subrange_info] in the [S_functor] module type. *) - module Subrange_info : S_subrange_info - with type key := Key.t - with type subrange_state := Subrange_state.t - - (** Corresponds to [Range_info] in the [S_functor] module type. *) - module Range_info : S_range_info - with type key := Key.t - with type index := Index.t - - module Subrange : sig - (** The type of subranges. Each subrange is a contiguous region of - code delimited by labels. *) - type t - - (** The caller's information about the subrange. *) - val info : t -> Subrange_info.t - - (** The label at the start of the range. *) - val start_pos : t -> Linear.label - - (** How many bytes from the label at [start_pos] the range actually - commences. If this value is zero, then the first byte of the range - has the address of the label given by [start_pos]. *) - val start_pos_offset : t -> int - - (** The label at the end of the range. *) - val end_pos : t -> Linear.label - - (** Like [start_pos_offset], but analogously for the end of the range. (The - sense is not inverted; a positive [end_pos_offset] means the range ends - at an address higher than the address of the [end_pos], just like a - positive [start_pos_offset] means the range starts at an address higher - than the [start_pos]. *) - val end_pos_offset : t -> int - end - - module Range : sig - (** The type of ranges. Each range is a list of subranges, so a - possibly-discontiguous region of code. *) - type t - - (** The caller's information about the range. *) - val info : t -> Range_info.t - - (** Estimate the pair of ([start_pos], [start_pos_offset]) (c.f. [Subrange], - above) found amongst the given ranges that yields the lowest machine - address. The assumption is made that no [start_pos_offset] or - [end_pos_offset] will cause the corresponding extremity of a range to - cross an extremity of any other range. (This should be satisfied in - typical uses because the offsets are typically zero or one.) If there - are no ranges supplied then [None] is returned. *) - val estimate_lowest_address : t -> (Linear.label * int) option - - (** Fold over all subranges within the given range. *) - val fold - : t - -> init:'a - -> f:('a -> Subrange.t -> 'a) - -> 'a - end - - (** The type holding information on computed ranges. *) - type t - - (** A value of type [t] that holds no range information. *) - val empty : t - - (** Compute ranges for the code in the given linearized function - declaration, returning the ranges as a value of type [t] and the - rewritten code that must go forward for emission. *) - val create : Linear.fundecl -> t * Linear.fundecl - - (** Iterate through ranges. Each range is associated with an index. *) - val iter : t -> f:(Index.t -> Range.t -> unit) -> unit - - (** Like [iter], but a fold. *) - val fold : t -> init:'a -> f:('a -> Index.t -> Range.t -> 'a) -> 'a - - (** Find the range for the given index, or raise an exception. *) - val find : t -> Index.t -> Range.t - - (** All indexes for which the given value of type [t] contains ranges. *) - val all_indexes : t -> Index.Set.t - - (** An internal function used by [Coalesce_labels]. - The [env] should come from [Coalesce_labels.fundecl]. *) - val rewrite_labels_and_remove_empty_subranges_and_ranges - : t - -> env:int Numbers.Int.Map.t - -> t -end diff --git a/asmcomp/debug/reg_availability_set.ml b/asmcomp/debug/reg_availability_set.ml deleted file mode 100644 index fbff598d..00000000 --- a/asmcomp/debug/reg_availability_set.ml +++ /dev/null @@ -1,111 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2016--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -module RD = Reg_with_debug_info -module V = Backend_var - -type t = - | Ok of RD.Set.t - | Unreachable - -let inter regs1 regs2 = - match regs1, regs2 with - | Unreachable, _ -> regs2 - | _, Unreachable -> regs1 - | Ok avail1, Ok avail2 -> - let result = - RD.Set.fold (fun reg1 result -> - match RD.Set.find_reg_exn avail2 (RD.reg reg1) with - | exception Not_found -> result - | reg2 -> - let debug_info1 = RD.debug_info reg1 in - let debug_info2 = RD.debug_info reg2 in - let debug_info = - match debug_info1, debug_info2 with - | None, None -> None - (* Example for this next case: the value of a mutable variable x - is copied into another variable y; then there is a conditional - where on one branch x is assigned and on the other branch it - is not. This means that on the former branch we have - forgotten about y holding the value of x; but we have not on - the latter. At the join point we must have forgotten the - information. *) - | None, Some _ | Some _, None -> None - | Some debug_info1, Some debug_info2 -> - if RD.Debug_info.compare debug_info1 debug_info2 = 0 then - Some debug_info1 - else - None - in - let reg = - RD.create_with_debug_info ~reg:(RD.reg reg1) - ~debug_info - in - RD.Set.add reg result) - avail1 - RD.Set.empty - in - Ok result - -let equal t1 t2 = - match t1, t2 with - | Unreachable, Unreachable -> true - | Unreachable, Ok _ | Ok _, Unreachable -> false - | Ok regs1, Ok regs2 -> RD.Set.equal regs1 regs2 - -let canonicalise availability = - match availability with - | Unreachable -> Unreachable - | Ok availability -> - let regs_by_ident = V.Tbl.create 42 in - RD.Set.iter (fun reg -> - match RD.debug_info reg with - | None -> () - | Some debug_info -> - let name = RD.Debug_info.holds_value_of debug_info in - if not (V.persistent name) then begin - match V.Tbl.find regs_by_ident name with - | exception Not_found -> V.Tbl.add regs_by_ident name reg - | (reg' : RD.t) -> - (* We prefer registers that are assigned to the stack since - they probably give longer available ranges (less likely to - be clobbered). *) - match RD.location reg, RD.location reg' with - | Reg _, Stack _ - | Reg _, Reg _ - | Stack _, Stack _ - | _, Unknown - | Unknown, _ -> () - | Stack _, Reg _ -> - V.Tbl.remove regs_by_ident name; - V.Tbl.add regs_by_ident name reg - end) - availability; - let result = - V.Tbl.fold (fun _ident reg availability -> - RD.Set.add reg availability) - regs_by_ident - RD.Set.empty - in - Ok result - -let print ~print_reg ppf = function - | Unreachable -> Format.fprintf ppf "" - | Ok availability -> - Format.fprintf ppf "{%a}" - (Format.pp_print_list ~pp_sep:(fun ppf () -> Format.fprintf ppf ",@ ") - (Reg_with_debug_info.print ~print_reg)) - (RD.Set.elements availability) diff --git a/asmcomp/debug/reg_availability_set.mli b/asmcomp/debug/reg_availability_set.mli deleted file mode 100644 index ba24a02f..00000000 --- a/asmcomp/debug/reg_availability_set.mli +++ /dev/null @@ -1,37 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2016--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Register availability sets. *) - -type t = - | Ok of Reg_with_debug_info.Set.t - | Unreachable - -val inter : t -> t -> t -(** Intersection of availabilities. *) - -val canonicalise : t -> t -(** Return a subset of the given availability set which contains no registers - that are not associated with debug info (and holding values of - non-persistent identifiers); and where no two registers share the same - location. *) - -val equal : t -> t -> bool - -val print - : print_reg:(Format.formatter -> Reg.t -> unit) - -> Format.formatter - -> t - -> unit -(** For debugging purposes only. *) diff --git a/asmcomp/debug/reg_with_debug_info.ml b/asmcomp/debug/reg_with_debug_info.ml deleted file mode 100644 index 3dd0ce0c..00000000 --- a/asmcomp/debug/reg_with_debug_info.ml +++ /dev/null @@ -1,200 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2016--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -[@@@ocaml.warning "+a-4-9-30-40-41-42"] - -module V = Backend_var - -module Debug_info = struct - type t = { - holds_value_of : V.t; - part_of_value : int; - num_parts_of_value : int; - which_parameter : int option; - provenance : unit option; - } - - let compare t1 t2 = - let c = V.compare t1.holds_value_of t2.holds_value_of in - if c <> 0 then c - else - Stdlib.compare - (t1.part_of_value, t1.num_parts_of_value, t1.which_parameter) - (t2.part_of_value, t2.num_parts_of_value, t2.which_parameter) - - let holds_value_of t = t.holds_value_of - let part_of_value t = t.part_of_value - let num_parts_of_value t = t.num_parts_of_value - let which_parameter t = t.which_parameter - let provenance t = t.provenance - - let print ppf t = - Format.fprintf ppf "%a" V.print t.holds_value_of; - if not (t.part_of_value = 0 && t.num_parts_of_value = 1) then begin - Format.fprintf ppf "(%d/%d)" t.part_of_value t.num_parts_of_value - end; - begin match t.which_parameter with - | None -> () - | Some index -> Format.fprintf ppf "[P%d]" index - end -end - -module T = struct - type t = { - reg : Reg.t; - debug_info : Debug_info.t option; - } - - module Order = struct - type t = Reg.t - let compare (t1 : t) (t2 : t) = t1.stamp - t2.stamp - end - - let compare t1 t2 = - Order.compare t1.reg t2.reg -end - -include T - -type reg_with_debug_info = t - -let create ~reg ~holds_value_of ~part_of_value ~num_parts_of_value - ~which_parameter ~provenance = - assert (num_parts_of_value >= 1); - assert (part_of_value >= 0 && part_of_value < num_parts_of_value); - assert (match which_parameter with None -> true | Some index -> index >= 0); - let debug_info : Debug_info.t = - { holds_value_of; - part_of_value; - num_parts_of_value; - which_parameter; - provenance; - } - in - { reg; - debug_info = Some debug_info; - } - -let create_with_debug_info ~reg ~debug_info = - { reg; - debug_info; - } - -let create_without_debug_info ~reg = - { reg; - debug_info = None; - } - -let create_copying_debug_info ~reg ~debug_info_from = - { reg; - debug_info = debug_info_from.debug_info; - } - -let reg t = t.reg -let location t = t.reg.loc - -let holds_pointer t = - match t.reg.typ with - | Addr | Val -> true - | Int | Float -> false - -let holds_non_pointer t = not (holds_pointer t) - -let assigned_to_stack t = - match t.reg.loc with - | Stack _ -> true - | Reg _ | Unknown -> false - -let regs_at_same_location (reg1 : Reg.t) (reg2 : Reg.t) ~register_class = - (* We need to check the register classes too: two locations both saying - "stack offset N" might actually be different physical locations, for - example if one is of class "Int" and another "Float" on amd64. - [register_class] will be [Proc.register_class], but cannot be here, - due to a circular dependency. *) - reg1.loc = reg2.loc - && register_class reg1 = register_class reg2 - -let at_same_location t (reg : Reg.t) ~register_class = - regs_at_same_location t.reg reg ~register_class - -let debug_info t = t.debug_info - -let clear_debug_info t = - { t with debug_info = None; } - -module Order_distinguishing_names_and_locations = struct - type nonrec t = t - - let compare t1 t2 = - match t1.debug_info, t2.debug_info with - | None, None -> 0 - | None, Some _ -> -1 - | Some _, None -> 1 - | Some di1, Some di2 -> - let c = V.compare di1.holds_value_of di2.holds_value_of in - if c <> 0 then c - else Stdlib.compare t1.reg.loc t2.reg.loc -end - -module Set_distinguishing_names_and_locations = - Set.Make (Order_distinguishing_names_and_locations) - -module Map_distinguishing_names_and_locations = - Map.Make (Order_distinguishing_names_and_locations) - -module Set = struct - include Set.Make (T) - - let of_array elts = - of_list (Array.to_list elts) - - let forget_debug_info t = - fold (fun t acc -> Reg.Set.add (reg t) acc) t Reg.Set.empty - - let without_debug_info regs = - Reg.Set.fold (fun reg acc -> add (create_without_debug_info ~reg) acc) - regs - empty - - let made_unavailable_by_clobber t ~regs_clobbered ~register_class = - Reg.Set.fold (fun reg acc -> - let made_unavailable = - filter (fun reg' -> - regs_at_same_location reg'.reg reg ~register_class) - t - in - union made_unavailable acc) - (Reg.set_of_array regs_clobbered) - (* ~init:*)empty - - let mem_reg t (reg : Reg.t) = - exists (fun t -> t.reg.stamp = reg.stamp) t - - let filter_reg t (reg : Reg.t) = - filter (fun t -> t.reg.stamp <> reg.stamp) t - - (* CR-someday mshinwell: Well, it looks like we should have used a map. - mshinwell: Also see @chambart's suggestion on GPR#856. *) - let find_reg_exn t (reg : Reg.t) = - match elements (filter (fun t -> t.reg.stamp = reg.stamp) t) with - | [] -> raise Not_found - | [reg] -> reg - | _ -> assert false -end - -let print ~print_reg ppf t = - match t.debug_info with - | None -> Format.fprintf ppf "%a" print_reg t.reg - | Some debug_info -> - Format.fprintf ppf "%a(%a)" print_reg t.reg Debug_info.print debug_info diff --git a/asmcomp/debug/reg_with_debug_info.mli b/asmcomp/debug/reg_with_debug_info.mli deleted file mode 100644 index b989bdeb..00000000 --- a/asmcomp/debug/reg_with_debug_info.mli +++ /dev/null @@ -1,112 +0,0 @@ -(**************************************************************************) -(* *) -(* OCaml *) -(* *) -(* Mark Shinwell, Jane Street Europe *) -(* *) -(* Copyright 2016--2017 Jane Street Group LLC *) -(* *) -(* All rights reserved. This file is distributed under the terms of *) -(* the GNU Lesser General Public License version 2.1, with the *) -(* special exception on linking described in the file LICENSE. *) -(* *) -(**************************************************************************) - -(** Registers equipped with information used for generating debugging - information. *) - -module Debug_info : sig - type t - - val compare : t -> t -> int - - val holds_value_of : t -> Backend_var.t - (** The identifier that the register holds (part of) the value of. *) - - val part_of_value : t -> int - val num_parts_of_value : t -> int - - val which_parameter : t -> int option - (** If the register corresponds to a function parameter, the value returned - is the zero-based index of said parameter; otherwise it is [None]. *) - - val provenance : t -> unit option -end - -type t - -type reg_with_debug_info = t - -val create - : reg:Reg.t - -> holds_value_of:Backend_var.t - -> part_of_value:int - -> num_parts_of_value:int - -> which_parameter:int option - -> provenance:unit option - -> t - -val create_with_debug_info : reg:Reg.t -> debug_info:Debug_info.t option -> t - -val create_without_debug_info : reg:Reg.t -> t - -val create_copying_debug_info : reg:Reg.t -> debug_info_from:t -> t - -val reg : t -> Reg.t -val location : t -> Reg.location -val debug_info : t -> Debug_info.t option - -val at_same_location : t -> Reg.t -> register_class:(Reg.t -> int) -> bool -(** [at_same_location t reg] holds iff the register [t] corresponds to - the same (physical or pseudoregister) location as the register [reg], - which is not equipped with debugging information. - [register_class] should be [Proc.register_class]. -*) - -val holds_pointer : t -> bool -val holds_non_pointer : t -> bool - -val assigned_to_stack : t -> bool -(** [assigned_to_stack t] holds iff the location of [t] is a hard stack - slot. *) - -val clear_debug_info : t -> t - -module Set_distinguishing_names_and_locations - : Set.S with type elt = t - -module Map_distinguishing_names_and_locations - : Map.S with type key = t - -module Set : sig - include Set.S with type elt = t - - val of_array : reg_with_debug_info array -> t - - val mem_reg : t -> Reg.t -> bool - - val find_reg_exn : t -> Reg.t -> reg_with_debug_info - - val filter_reg : t -> Reg.t -> t - - val forget_debug_info : t -> Reg.Set.t - - val without_debug_info : Reg.Set.t -> t - - val made_unavailable_by_clobber - : t - -> regs_clobbered:Reg.t array - -> register_class:(Reg.t -> int) - -> t - (** [made_unavailable_by_clobber t ~regs_clobbered ~register_class] returns - the largest subset of [t] whose locations do not overlap with any - registers in [regs_clobbered]. (Think of [t] as a set of available - registers.) - [register_class] should always be [Proc.register_class]. *) -end - -val print - : print_reg:(Format.formatter -> Reg.t -> unit) - -> Format.formatter - -> t - -> unit diff --git a/asmcomp/emitaux.ml b/asmcomp/emitaux.ml index 2e4664e8..d3587c1a 100644 --- a/asmcomp/emitaux.ml +++ b/asmcomp/emitaux.ml @@ -15,6 +15,11 @@ (* Common functions for emitting assembly code *) +type error = + | Stack_frame_too_large of int + +exception Error of error + let output_channel = ref stdout let emit_string s = output_string !output_channel s @@ -69,7 +74,7 @@ let emit_string_directive directive s = end else begin let i = ref 0 in while !i < l do - let n = min (l - !i) 80 in + let n = Int.min (l - !i) 80 in emit_string directive; emit_string_literal (String.sub s !i n); emit_char '\n'; @@ -178,6 +183,12 @@ let emit_frames a = Label_table.add debuginfos key lbl; lbl in + let efa_16_checked n = + assert (n >= 0); + if n < 0x1_0000 + then a.efa_16 n + else raise (Error(Stack_frame_too_large n)) + in let emit_frame fd = assert (fd.fd_frame_size land 3 = 0); let flags = @@ -191,9 +202,9 @@ let emit_frames a = then 3 else 2 in a.efa_code_label fd.fd_lbl; - a.efa_16 (fd.fd_frame_size + flags); - a.efa_16 (List.length fd.fd_live_offset); - List.iter a.efa_16 fd.fd_live_offset; + efa_16_checked (fd.fd_frame_size + flags); + efa_16_checked (List.length fd.fd_live_offset); + List.iter efa_16_checked fd.fd_live_offset; begin match fd.fd_debuginfo with | _ when flags = 0 -> () @@ -237,9 +248,9 @@ let emit_frames a = a.efa_string defname in let pack_info fd_raise d has_next = - let line = min 0xFFFFF d.Debuginfo.dinfo_line - and char_start = min 0xFF d.Debuginfo.dinfo_char_start - and char_end = min 0x3FF d.Debuginfo.dinfo_char_end + let line = Int.min 0xFFFFF d.Debuginfo.dinfo_line + and char_start = Int.min 0xFF d.Debuginfo.dinfo_char_start + and char_end = Int.min 0x3FF d.Debuginfo.dinfo_char_end and kind = if fd_raise then 1 else 0 and has_next = if has_next then 1 else 0 in Int64.(add (shift_left (of_int line) 44) @@ -370,3 +381,25 @@ let reset () = let binary_backend_available = ref false let create_asm_file = ref true + +let report_error ppf = function + | Stack_frame_too_large n -> + Format.fprintf ppf "stack frame too large (%d bytes)" n + +let mk_env f : Emitenv.per_function_env = + { + f; + stack_offset = 0; + call_gc_sites = []; + bound_error_sites = []; + bound_error_call = None; + call_gc_label = 0; + jumptables_lbl = None; + jumptables = []; + float_literals = []; + int_literals = []; + offset_literals = []; + gotrel_literals = []; + symbol_literals = []; + size_literals = 0; + } diff --git a/asmcomp/emitaux.mli b/asmcomp/emitaux.mli index 2b4867d0..df0b0197 100644 --- a/asmcomp/emitaux.mli +++ b/asmcomp/emitaux.mli @@ -71,7 +71,6 @@ val cfi_endproc : unit -> unit val cfi_adjust_cfa_offset : int -> unit val cfi_offset : reg:int -> offset:int -> unit - val binary_backend_available: bool ref (** Is a binary backend available. If yes, we don't need to generate the textual assembly file (unless the user @@ -79,3 +78,11 @@ val binary_backend_available: bool ref val create_asm_file: bool ref (** Are we actually generating the textual assembly file? *) + +type error = + | Stack_frame_too_large of int + +exception Error of error +val report_error: Format.formatter -> error -> unit + +val mk_env : Linear.fundecl -> Emitenv.per_function_env diff --git a/asmcomp/emitenv.mli b/asmcomp/emitenv.mli new file mode 100644 index 00000000..81638542 --- /dev/null +++ b/asmcomp/emitenv.mli @@ -0,0 +1,92 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) +(* Per function environment for emit - common code for all targets. *) +type label = Linear.label + +(* Record calls to caml_call_gc, emitted out of line. *) +type gc_call = + { gc_lbl: label; (* Entry label *) + gc_return_lbl: label; (* Where to branch after GC *) + gc_frame_lbl: label; (* Label of frame descriptor *) + } + +(* Record calls to caml_ml_array_bound_error. + In -g mode, we maintain one call to caml_ml_array_bound_error + per bound check site. Without -g, we can share a single call. *) + +type bound_error_call = + { bd_lbl: label; (* Entry label *) + bd_frame: label; (* Label of frame descriptor *) + } + +(* Pending floating-point literals *) +type float_literal = + { + fl : int64; + lbl : label; + } + +(* Pending large integer literals *) +type int_literal = + { + n : nativeint; + n_lbl : label; + } + +(* Pending offset computations : {lbl; dst; src;} --> lbl: .word dst-(src+N) *) +type offset_computation = + { lbl : label; + dst : label; + src : label; + } + +(* Pending relative references to the global offset table *) +type gotrel_literal = + { lbl_got : label; + lbl_pic : label; + } + +(* Pending symbol literals *) +type symbol_literal = + { + sym : string; + lbl : label; + } + +(* Environment for emitting a function *) +type per_function_env = { + f : Linear.fundecl; + mutable stack_offset : int; + mutable call_gc_sites : gc_call list; (* used in all targets except power *) + mutable call_gc_label : label; (* used only in power *) + mutable bound_error_sites : bound_error_call list; + (* used in all targets except power *) + mutable bound_error_call : label option; (* used in amd64,i386,s390x *) + + (* record jump tables (for PPC64). In order to reduce the size of the TOC, + we concatenate all jumptables and emit them at the end of the function. *) + mutable jumptables_lbl : label option; (* used only in power *) + mutable jumptables : label list; (* in reverse order *) + + (* pending literals *) + mutable float_literals : float_literal list; (* in all except amd64,i386 *) + mutable int_literals : int_literal list; (* used only in s390x *) + mutable offset_literals : offset_computation list; (* used only in arm *) + mutable gotrel_literals : gotrel_literal list; (* used only in arm *) + mutable symbol_literals : symbol_literal list; (* used only in arm *) + (* [size_literals] is the total space (in words) occupied + by pending literals. *) + mutable size_literals : int; (* used only in arm *) +} diff --git a/asmcomp/i386/CSE.ml b/asmcomp/i386/CSE.ml index 6ef8fec6..907f955b 100644 --- a/asmcomp/i386/CSE.ml +++ b/asmcomp/i386/CSE.ml @@ -29,7 +29,7 @@ method! class_of_operation op = (* Operations that affect the floating-point stack cannot be factored *) | Iconst_float _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Iintoffloat | Ifloatofint - | Iload((Single | Double | Double_u), _) -> Op_other + | Iload((Single | Double | Double_u), _, _) -> Op_other (* Specific ops *) | Ispecific(Ilea _) -> Op_pure | Ispecific(Istore_int(_, _, is_asg)) -> Op_store is_asg diff --git a/asmcomp/i386/arch.ml b/asmcomp/i386/arch.ml index 17876c46..21057b36 100644 --- a/asmcomp/i386/arch.ml +++ b/asmcomp/i386/arch.ml @@ -162,3 +162,15 @@ let stack_alignment = | "win32" -> 4 (* MSVC *) | _ -> 16 (* PR#6038: GCC and Clang seem to require 16-byte alignment nowadays *) + +(* Specific operations that are pure *) + +let operation_is_pure = function + | Ilea _ -> true + | _ -> false +(* x87 floating-point operations are not pure because they push and pop + on the FP stack as a side effect *) + +(* Specific operations that can raise *) + +let operation_can_raise _ = false diff --git a/asmcomp/i386/emit.mlp b/asmcomp/i386/emit.mlp index 5444749b..f78c9857 100644 --- a/asmcomp/i386/emit.mlp +++ b/asmcomp/i386/emit.mlp @@ -24,6 +24,7 @@ open Reg open Mach open Linear open Emitaux +open Emitenv module String = Misc.Stdlib.String open X86_ast @@ -49,31 +50,22 @@ let cfi_adjust_cfa_offset n = let emit_debug_info dbg = emit_debug_info_gen dbg D.file D.loc -(* Tradeoff between code size and code speed *) - -let fastcode_flag = ref true - -let stack_offset = ref 0 - -(* Layout of the stack frame *) -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let frame_size () = (* includes return address *) +let frame_size env = (* includes return address *) let sz = - !stack_offset + 4 * num_stack_slots.(0) + 8 * num_stack_slots.(1) + 4 + env.stack_offset + + 4 * env.f.fun_num_stack_slots.(0) + + 8 * env.f.fun_num_stack_slots.(1) + 4 in Misc.align sz stack_alignment -let slot_offset loc cl = +let slot_offset env loc cl = match loc with | Incoming n -> assert (n >= 0); - frame_size() + n + frame_size env + n | Local n -> if cl = 0 - then !stack_offset + n * 4 - else !stack_offset + num_stack_slots.(0) * 4 + n * 8 + then env.stack_offset + n * 4 + else env.stack_offset + env.f.fun_num_stack_slots.(0) * 4 + n * 8 | Outgoing n -> assert (n >= 0); n @@ -124,8 +116,8 @@ let label s = sym (emit_label s) let def_label s = D.label (emit_label s) -let emit_Llabel fallthrough lbl = - if not fallthrough && !fastcode_flag then D.align 16 ; +let emit_Llabel env fallthrough lbl = + if not fallthrough && env.f.fun_fast then D.align 16 ; def_label lbl (* Output a pseudo-register *) @@ -146,15 +138,15 @@ let domain_field f r = let load_domain_state r = I.mov (sym32 "Caml_state") r -let reg = function +let reg env = function | { loc = Reg r } -> register_name r | { loc = Stack(Incoming n | Outgoing n) } when n < 0 -> sym32 "caml_extra_params" ~ofs:(n + 64) | { loc = Stack s; typ = Float } as r -> - let ofs = slot_offset s (register_class r) in + let ofs = slot_offset env s (register_class r) in mem32 REAL8 ofs RSP | { loc = Stack s } as r -> - let ofs = slot_offset s (register_class r) in + let ofs = slot_offset env s (register_class r) in mem32 DWORD ofs RSP | { loc = Unknown } -> fatal_error "Emit_i386.reg" @@ -200,7 +192,7 @@ let addressing addr typ i n = (* Record live pointers at call points *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label () in let live_offset = ref [] in Reg.Set.iter @@ -208,55 +200,40 @@ let record_frame_label live dbg = | {typ = Val; loc = Reg r} -> live_offset := ((r lsl 1) + 1) :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> ()) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in def_label lbl -(* Record calls to the GC -- we've moved them out of the way *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame: label } (* Label of frame descriptor *) - -let call_gc_sites = ref ([] : gc_call list) - let emit_call_gc gc = def_label gc.gc_lbl; emit_call "caml_call_gc"; - def_label gc.gc_frame; + def_label gc.gc_frame_lbl; I.jmp (label gc.gc_return_lbl) -(* Record calls to caml_ml_array_bound_error. - In -g mode, we maintain one call to caml_ml_array_bound_error - per bound check site. Without -g, we can share a single call. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame: label } (* Label of frame descriptor *) - -let bound_error_sites = ref ([] : bound_error_call list) -let bound_error_call = ref 0 - -let bound_error_label dbg = +let bound_error_label env dbg = if !Clflags.debug then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := - { bd_lbl = lbl_bound_error; bd_frame = lbl_frame } :: !bound_error_sites; + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- + { bd_lbl = lbl_bound_error; bd_frame = lbl_frame; } + :: env.bound_error_sites; lbl_bound_error end else begin - if !bound_error_call = 0 then bound_error_call := new_label(); - !bound_error_call + match env.bound_error_call with + | None-> + let lbl = new_label () in + env.bound_error_call <- Some lbl; + lbl + | Some lbl -> lbl end let emit_call_bound_error bd = @@ -264,12 +241,13 @@ let emit_call_bound_error bd = emit_call "caml_ml_array_bound_error"; def_label bd.bd_frame -let emit_call_bound_errors () = - List.iter emit_call_bound_error !bound_error_sites; - if !bound_error_call > 0 then begin - def_label !bound_error_call; +let emit_call_bound_errors env = + List.iter emit_call_bound_error env.bound_error_sites; + match env.bound_error_call with + | Some lbl -> + def_label lbl; emit_call "caml_ml_array_bound_error" - end + | None -> () (* Names for instructions *) @@ -336,15 +314,15 @@ let cond = function (* Output an = 0 or <> 0 test. *) -let output_test_zero arg = +let output_test_zero env arg = match arg.loc with - | Reg.Reg _ -> I.test (reg arg) (reg arg) - | _ -> I.cmp (int 0) (reg arg) + | Reg.Reg _ -> I.test (reg env arg) (reg env arg) + | _ -> I.cmp (int 0) (reg env arg) (* Deallocate the stack frame before a return or tail call *) -let output_epilogue f = - let n = frame_size() - 4 in +let output_epilogue env f = + let n = frame_size env - 4 in if n > 0 then begin I.add (int n) esp; @@ -362,7 +340,7 @@ let is_tos = function { loc = Reg _; typ = Float } -> true | _ -> false (* Emit the code for a floating-point comparison *) -let emit_float_test cmp arg lbl = +let emit_float_test env cmp arg lbl = let actual_cmp = match (is_tos arg.(0), is_tos arg.(1)) with | (true, true) -> @@ -371,15 +349,15 @@ let emit_float_test cmp arg lbl = cmp | (true, false) -> (* first arg on top of FP stack *) - I.fcomp (reg arg.(1)); + I.fcomp (reg env arg.(1)); cmp | (false, true) -> (* second arg on top of FP stack *) - I.fcomp (reg arg.(0)); + I.fcomp (reg env arg.(0)); Cmm.swap_float_comparison cmp | (false, false) -> - I.fld (reg arg.(0)); - I.fcomp (reg arg.(1)); + I.fld (reg env arg.(0)); + I.fcomp (reg env arg.(1)); cmp in I.fnstsw ax; @@ -478,19 +456,14 @@ let emit_named_text_section func_name = else D.text () (* Output the assembly code for an instruction *) - -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 - -let emit_instr fallthrough i = +let emit_instr env fallthrough i = + let reg = reg env in emit_debug_info i.dbg; match i.desc with | Lend -> () | Lprologue -> - assert (!prologue_required); - let n = frame_size() - 4 in + assert (env.f.fun_prologue_required); + let n = frame_size env - 4 in if n > 0 then begin I.sub (int n) esp; cfi_adjust_cfa_offset n; @@ -536,18 +509,18 @@ let emit_instr fallthrough i = I.mov (immsym s) (reg i.res.(0)) | Lop(Icall_ind) -> I.call (reg i.arg.(0)); - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Icall_imm { func; }) -> add_used_symbol func; emit_call func; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Itailcall_ind) -> - output_epilogue (fun () -> I.jmp (reg i.arg.(0))) + output_epilogue env (fun () -> I.jmp (reg i.arg.(0))) | Lop(Itailcall_imm { func; }) -> - if func = !function_name then - I.jmp (label !tailrec_entry_point) + if func = env.f.fun_name then + I.jmp (label env.f.fun_tailrec_entry_point_label) else begin - output_epilogue begin fun () -> + output_epilogue env begin fun () -> add_used_symbol func; I.jmp (immsym func) end @@ -557,7 +530,7 @@ let emit_instr fallthrough i = if alloc then begin I.mov (immsym func) eax; emit_call "caml_c_call"; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) end else begin emit_call func end @@ -566,8 +539,8 @@ let emit_instr fallthrough i = then I.add (int (-n)) esp else I.sub (int n) esp; cfi_adjust_cfa_offset n; - stack_offset := !stack_offset + n - | Lop(Iload(chunk, addr)) -> + env.stack_offset <- env.stack_offset + n + | Lop(Iload(chunk, addr, _mut)) -> let dest = i.res.(0) in begin match chunk with | Word_int | Word_val | Thirtytwo_signed | Thirtytwo_unsigned -> @@ -608,8 +581,13 @@ let emit_instr fallthrough i = I.fstp (addressing addr REAL8 i 1) end end + | Lop(Ipoll { return_label }) -> + begin match return_label with + None -> () + | Some lbl -> I.jmp (label lbl) + end | Lop(Ialloc { bytes = n; dbginfo }) -> - if !fastcode_flag then begin + if env.f.fun_fast then begin load_domain_state ebx; I.mov (domain_field Domain_young_ptr RBX) eax; I.sub (int n) eax; @@ -617,16 +595,15 @@ let emit_instr fallthrough i = I.cmp (domain_field Domain_young_limit RBX) eax; let lbl_call_gc = new_label() in let lbl_frame = - record_frame_label - i.live (Dbg_alloc dbginfo) in + record_frame_label env i.live (Dbg_alloc dbginfo) in I.jb (label lbl_call_gc); let lbl_after_alloc = new_label() in def_label lbl_after_alloc; I.lea (mem32 NONE 4 RAX) (reg i.res.(0)); - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame = lbl_frame } :: !call_gc_sites + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites end else begin begin match n with 8 -> emit_call "caml_alloc1" @@ -636,10 +613,7 @@ let emit_instr fallthrough i = I.mov (int n) eax; emit_call "caml_allocN" end; - let label = - record_frame_label - i.live (Dbg_alloc dbginfo) - in + let label = record_frame_label env i.live (Dbg_alloc dbginfo) in def_label label; I.lea (mem32 NONE 4 RAX) (reg i.res.(0)) end @@ -652,11 +626,11 @@ let emit_instr fallthrough i = I.set (cond cmp) al; I.movzx al (reg i.res.(0)) | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in I.cmp (reg i.arg.(1)) (reg i.arg.(0)); I.jbe (label lbl) | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in I.cmp (int n) (reg i.arg.(0)); I.jbe (label lbl) | Lop(Iintop(Idiv | Imod)) -> @@ -712,7 +686,7 @@ let emit_instr fallthrough i = | Lop(Iintoffloat) -> if not (is_tos i.arg.(0)) then I.fld (reg i.arg.(0)); - stack_offset := !stack_offset - 8; + env.stack_offset <- env.stack_offset - 8; I.sub (int 8) esp; cfi_adjust_cfa_offset 8; I.fnstcw (mem32 NONE 4 RSP); @@ -730,7 +704,9 @@ let emit_instr fallthrough i = I.fldcw (mem32 NONE 4 RSP); I.add (int 8) esp; cfi_adjust_cfa_offset (-8); - stack_offset := !stack_offset + 8 + env.stack_offset <- env.stack_offset + 8 + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific(Ilea addr)) -> I.lea (addressing addr DWORD i 0) (reg i.res.(0)) | Lop(Ispecific(Istore_int(n, addr, _))) -> @@ -749,9 +725,9 @@ let emit_instr fallthrough i = I.sub (int 8) esp; cfi_adjust_cfa_offset 8; I.fstp (mem32 REAL8 0 RSP); - stack_offset := !stack_offset + 8 + env.stack_offset <- env.stack_offset + 8 | {loc = Stack sl; typ = Float} -> - let ofs = slot_offset sl 1 in + let ofs = slot_offset env sl 1 in (* Use x87 stack to move from stack to stack, instead of two 32-bit push instructions, which could kill performance on modern CPUs (see #6979). @@ -760,30 +736,30 @@ let emit_instr fallthrough i = I.sub (int 8) esp; cfi_adjust_cfa_offset 8; I.fstp (mem32 REAL8 0 RSP); - stack_offset := !stack_offset + 8 + env.stack_offset <- env.stack_offset + 8 | _ -> I.push (reg r); cfi_adjust_cfa_offset 4; - stack_offset := !stack_offset + 4 + env.stack_offset <- env.stack_offset + 4 done | Lop(Ispecific(Ipush_int n)) -> I.push (nat n); cfi_adjust_cfa_offset 4; - stack_offset := !stack_offset + 4 + env.stack_offset <- env.stack_offset + 4 | Lop(Ispecific(Ipush_symbol s)) -> add_used_symbol s; I.push (immsym s); cfi_adjust_cfa_offset 4; - stack_offset := !stack_offset + 4 + env.stack_offset <- env.stack_offset + 4 | Lop(Ispecific(Ipush_load addr)) -> I.push (addressing addr DWORD i 0); cfi_adjust_cfa_offset 4; - stack_offset := !stack_offset + 4 + env.stack_offset <- env.stack_offset + 4 | Lop(Ispecific(Ipush_load_float addr)) -> I.push (addressing (offset_addressing addr 4) DWORD i 0); I.push (addressing addr DWORD i 0); cfi_adjust_cfa_offset 8; - stack_offset := !stack_offset + 8 + env.stack_offset <- env.stack_offset + 8 | Lop(Ispecific(Ifloatarithmem(double, op, addr))) -> if not (is_tos i.arg.(0)) then I.fld (reg i.arg.(0)); @@ -799,38 +775,37 @@ let emit_instr fallthrough i = if Array.length i.arg = 2 && is_tos i.arg.(1) then I.fxch st1; emit_floatspecial s - | Lop (Iname_for_debugger _) -> () | Lreloadretaddr -> () | Lreturn -> - output_epilogue begin fun () -> + output_epilogue env begin fun () -> I.ret () end | Llabel lbl -> - emit_Llabel fallthrough lbl + emit_Llabel env fallthrough lbl | Lbranch lbl -> I.jmp (label lbl) | Lcondbranch(tst, lbl) -> let lbl = label lbl in begin match tst with | Itruetest -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.jne lbl; | Ifalsetest -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.je lbl | Iinttest cmp -> I.cmp (reg i.arg.(1)) (reg i.arg.(0)); I.j (cond cmp) lbl | Iinttest_imm((Isigned Ceq | Isigned Cne | Iunsigned Ceq | Iunsigned Cne) as cmp, 0) -> - output_test_zero i.arg.(0); + output_test_zero env i.arg.(0); I.j (cond cmp) lbl | Iinttest_imm(cmp, n) -> I.cmp (int n) (reg i.arg.(0)); I.j (cond cmp) lbl | Ifloattest cmp -> - emit_float_test cmp i.arg lbl + emit_float_test env cmp i.arg lbl | Ioddtest -> I.test (int 1) (reg i.arg.(0)); I.jne lbl @@ -860,13 +835,13 @@ let emit_instr fallthrough i = for i = 0 to Array.length jumptbl - 1 do D.long (ConstLabel (emit_label jumptbl.(i))) done; - emit_named_text_section !function_name + emit_named_text_section env.f.fun_name | Lentertrap -> () | Ladjust_trap_depth { delta_traps } -> let delta = trap_frame_size * delta_traps in cfi_adjust_cfa_offset delta; - stack_offset := !stack_offset + delta + env.stack_offset <- env.stack_offset + delta | Lpushtrap { lbl_handler; } -> I.push (label lbl_handler); if trap_frame_size > 8 then @@ -875,7 +850,7 @@ let emit_instr fallthrough i = I.push (domain_field Domain_exception_pointer RDX); cfi_adjust_cfa_offset trap_frame_size; I.mov esp (domain_field Domain_exception_pointer RDX); - stack_offset := !stack_offset + trap_frame_size + env.stack_offset <- env.stack_offset + trap_frame_size | Lpoptrap -> I.mov edx (mem32 DWORD 4 RSP); load_domain_state edx; @@ -884,17 +859,17 @@ let emit_instr fallthrough i = if trap_frame_size > 8 then I.add (int (trap_frame_size - 8)) esp; cfi_adjust_cfa_offset (-trap_frame_size); - stack_offset := !stack_offset - trap_frame_size + env.stack_offset <- env.stack_offset - trap_frame_size | Lraise k -> begin match k with | Lambda.Raise_regular -> load_domain_state ebx; I.mov (int 0) (domain_field Domain_backtrace_pos RBX); emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_reraise -> emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_notrace -> load_domain_state ebx; I.mov (domain_field Domain_exception_pointer RBX) esp; @@ -905,39 +880,29 @@ let emit_instr fallthrough i = I.jmp ebx end -let rec emit_all fallthrough i = +let rec emit_all env fallthrough i = match i.desc with | Lend -> () | _ -> - emit_instr fallthrough i; - emit_all + emit_instr env fallthrough i; + emit_all env (system = S_win32 || Linear.has_fallthrough i.desc) i.next (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - fastcode_flag := fundecl.fun_fast; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - bound_error_call := 0; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - emit_named_text_section !function_name; + let env = mk_env fundecl in + emit_named_text_section fundecl.fun_name; add_def_symbol fundecl.fun_name; D.align (if system = S_win32 then 4 else 16); D.global (emit_symbol fundecl.fun_name); D.label (emit_symbol fundecl.fun_name); emit_debug_info fundecl.fun_dbg; cfi_startproc (); - emit_all true fundecl.fun_body; - List.iter emit_call_gc !call_gc_sites; - emit_call_bound_errors (); + emit_all env true fundecl.fun_body; + List.iter emit_call_gc env.call_gc_sites; + emit_call_bound_errors env; cfi_endproc (); begin match system with | S_linux_elf | S_bsd_elf | S_gnu -> diff --git a/asmcomp/i386/proc.ml b/asmcomp/i386/proc.ml index 59798ffe..53799397 100644 --- a/asmcomp/i386/proc.ml +++ b/asmcomp/i386/proc.ml @@ -226,17 +226,6 @@ let max_register_pressure = function Iintoffloat -> [| 6; max_int |] | _ -> [|7; max_int |] -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false - | Ispecific(Ilea _) -> true - | Ispecific _ -> false - | _ -> true - (* Layout of the stack frame *) let frame_required fd = diff --git a/asmcomp/i386/selection.ml b/asmcomp/i386/selection.ml index 2300d2c0..083a60e8 100644 --- a/asmcomp/i386/selection.ml +++ b/asmcomp/i386/selection.ml @@ -133,7 +133,7 @@ let pseudoregs_for_operation op arg res = (* For floating-point operations and floating-point loads, the result is always left at the top of the floating-point stack *) | Iconst_float _ | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf - | Ifloatofint | Iload((Single | Double | Double_u), _) + | Ifloatofint | Iload((Single | Double | Double_u), _, _) | Ispecific(Isubfrev | Idivfrev | Ifloatarithmem _ | Ifloatspecial _) -> (arg, [| tos |], false) (* don't move it immediately *) (* For storing a byte, the argument must be in eax...edx. @@ -322,4 +322,5 @@ method! emit_extcall_args env _ty_args args = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = (new selector)#emit_fundecl + ~future_funcnames f diff --git a/asmcomp/linearize.ml b/asmcomp/linearize.ml index 8355b831..bf983ae0 100644 --- a/asmcomp/linearize.ml +++ b/asmcomp/linearize.ml @@ -142,6 +142,19 @@ let linear i n contains_calls = | Iop(Imove | Ireload | Ispill) when i.Mach.arg.(0).loc = i.Mach.res.(0).loc -> linear i.Mach.next n + | Iop((Ipoll { return_label = None; _ }) as op) -> + (* If the poll call does not already specify where to jump to after + the poll (the expected situation in the current implementation), + absorb any branch after the poll call into the poll call itself. + This, in particular, optimises polls at the back edges of loops. *) + let n = linear i.Mach.next n in + let op, n = + match n.desc with + | Lbranch lbl -> + Mach.Ipoll { return_label = Some lbl }, n.next + | _ -> op, n + in + copy_instr (Lop op) i n | Iop op -> copy_instr (Lop op) i (linear i.Mach.next n) | Ireturn -> @@ -259,63 +272,52 @@ let linear i n contains_calls = in linear i n let add_prologue first_insn prologue_required = - (* The prologue needs to come after any [Iname_for_debugger] operations that - refer to parameters. (Such operations always come in a contiguous - block, cf. [Selectgen].) *) - let rec skip_naming_ops (insn : instruction) : label * instruction = - match insn.desc with - | Lop (Iname_for_debugger _) -> - let tailrec_entry_point_label, next = skip_naming_ops insn.next in - tailrec_entry_point_label, { insn with next; } - | _ -> - let tailrec_entry_point_label = Cmm.new_label () in - let tailrec_entry_point = - { desc = Llabel tailrec_entry_point_label; - next = insn; - arg = [| |]; - res = [| |]; - dbg = insn.dbg; - live = insn.live; - } - in - (* We expect [Lprologue] to expand to at least one instruction---as such, - if no prologue is required, we avoid adding the instruction here. - The reason is subtle: an empty expansion of [Lprologue] can cause - two labels, one either side of the [Lprologue], to point at the same - location. This means that we lose the property (cf. [Coalesce_labels]) - that we can check if two labels point at the same location by - comparing them for equality. This causes trouble when the function - whose prologue is in question lands at the top of the object file - and we are emitting DWARF debugging information: - foo_code_begin: - foo: - .L1: - ; empty prologue - .L2: - ... - If we were to emit a location list entry from L1...L2, not realising - that they point at the same location, then the beginning and ending - points of the range would be both equal to each other and (relative to - "foo_code_begin") equal to zero. This appears to confuse objdump, - which seemingly misinterprets the entry as an end-of-list entry - (which is encoded with two zero words), then complaining about a - "hole in location list" (as it ignores any remaining list entries - after the misinterpreted entry). *) - if prologue_required then - let prologue = - { desc = Lprologue; - next = tailrec_entry_point; - arg = [| |]; - res = [| |]; - dbg = tailrec_entry_point.dbg; - live = Reg.Set.empty; (* will not be used *) - } - in - tailrec_entry_point_label, prologue - else - tailrec_entry_point_label, tailrec_entry_point + let tailrec_entry_point_label = Cmm.new_label () in + let tailrec_entry_point = + { desc = Llabel tailrec_entry_point_label; + next = first_insn; + arg = [| |]; + res = [| |]; + dbg = first_insn.dbg; + live = first_insn.live; + } in - skip_naming_ops first_insn + (* We expect [Lprologue] to expand to at least one instruction---as such, + if no prologue is required, we avoid adding the instruction here. + The reason is subtle: an empty expansion of [Lprologue] can cause + two labels, one either side of the [Lprologue], to point at the same + location. This means that we lose the property (cf. [Coalesce_labels]) + that we can check if two labels point at the same location by + comparing them for equality. This causes trouble when the function + whose prologue is in question lands at the top of the object file + and we are emitting DWARF debugging information: + foo_code_begin: + foo: + .L1: + ; empty prologue + .L2: + ... + If we were to emit a location list entry from L1...L2, not realising + that they point at the same location, then the beginning and ending + points of the range would be both equal to each other and (relative to + "foo_code_begin") equal to zero. This appears to confuse objdump, + which seemingly misinterprets the entry as an end-of-list entry + (which is encoded with two zero words), then complaining about a + "hole in location list" (as it ignores any remaining list entries + after the misinterpreted entry). *) + if prologue_required then + let prologue = + { desc = Lprologue; + next = tailrec_entry_point; + arg = [| |]; + res = [| |]; + dbg = tailrec_entry_point.dbg; + live = Reg.Set.empty; (* will not be used *) + } + in + tailrec_entry_point_label, prologue + else + tailrec_entry_point_label, tailrec_entry_point let fundecl f = let fun_prologue_required = Proc.prologue_required f in diff --git a/asmcomp/liveness.ml b/asmcomp/liveness.ml index f07944ae..3cf1686a 100644 --- a/asmcomp/liveness.ml +++ b/asmcomp/liveness.ml @@ -18,130 +18,60 @@ open Mach -let live_at_exit = ref [] +module Domain = struct + type t = Reg.Set.t + let bot = Reg.Set.empty + let join = Reg.Set.union + let lessequal = Reg.Set.subset +end -let find_live_at_exit k = - try - List.assoc k !live_at_exit - with - | Not_found -> Misc.fatal_error "Liveness.find_live_at_exit" +module Analyzer = Dataflow.Backward(Domain) -let live_at_raise = ref Reg.Set.empty - -let rec live i finally = - (* finally is the set of registers live after execution of the - instruction sequence. - The result of the function is the set of registers live just - before the instruction sequence. - The instruction i is annotated by the set of registers live across - the instruction. *) +let transfer i ~next ~exn = match i.desc with - Iend -> - i.live <- finally; - finally | Ireturn | Iop(Itailcall_ind) | Iop(Itailcall_imm _) -> i.live <- Reg.Set.empty; (* no regs are live across *) Reg.set_of_array i.arg | Iop op -> - let after = live i.next finally in - if Proc.op_is_pure op (* no side effects *) - && Reg.disjoint_set_array after i.res (* results are not used after *) - && not (Proc.regs_are_volatile i.arg) (* no stack-like hard reg *) - && not (Proc.regs_are_volatile i.res) (* is involved *) + if operation_is_pure op (* no side effects *) + && Reg.disjoint_set_array next i.res (* results are not used after *) + && not (Proc.regs_are_volatile i.arg) (* no stack-like hard reg *) + && not (Proc.regs_are_volatile i.res) (* is involved *) then begin (* This operation is dead code. Ignore its arguments. *) - i.live <- after; - after + i.live <- next; + next end else begin - let across_after = Reg.diff_set_array after i.res in + let across1 = Reg.diff_set_array next i.res in let across = - match op with - | Icall_ind | Icall_imm _ | Iextcall _ | Ialloc _ - | Iintop (Icheckbound) | Iintop_imm(Icheckbound, _) -> - (* The function call may raise an exception, branching to the - nearest enclosing try ... with. Similarly for bounds checks - and allocation (for the latter: finalizers may throw - exceptions, as may signal handlers). - Hence, everything that must be live at the beginning of - the exception handler must also be live across this instr. *) - Reg.Set.union across_after !live_at_raise - | _ -> - across_after in + (* Operations that can raise an exception (function calls, + bounds checks, allocations) can branch to the + nearest enclosing try ... with. + Hence, everything that must be live at the beginning of + the exception handler must also be live across this instr. *) + if operation_can_raise op + then Reg.Set.union across1 exn + else across1 in i.live <- across; Reg.add_set_array across i.arg end - | Iifthenelse(_test, ifso, ifnot) -> - let at_join = live i.next finally in - let at_fork = Reg.Set.union (live ifso at_join) (live ifnot at_join) in - i.live <- at_fork; - Reg.add_set_array at_fork i.arg - | Iswitch(_index, cases) -> - let at_join = live i.next finally in - let at_fork = ref Reg.Set.empty in - for i = 0 to Array.length cases - 1 do - at_fork := Reg.Set.union !at_fork (live cases.(i) at_join) - done; - i.live <- !at_fork; - Reg.add_set_array !at_fork i.arg - | Icatch(rec_flag, handlers, body) -> - let at_join = live i.next finally in - let aux (nfail,handler) (nfail', before_handler) = - assert(nfail = nfail'); - let before_handler' = live handler at_join in - nfail, Reg.Set.union before_handler before_handler' - in - let aux_equal (nfail, before_handler) (nfail', before_handler') = - assert(nfail = nfail'); - Reg.Set.equal before_handler before_handler' - in - let live_at_exit_before = !live_at_exit in - let rec fixpoint before_handlers = - live_at_exit := before_handlers @ !live_at_exit; - let before_handlers' = List.map2 aux handlers before_handlers in - live_at_exit := live_at_exit_before; - match rec_flag with - | Cmm.Nonrecursive -> - before_handlers' - | Cmm.Recursive -> - if List.for_all2 aux_equal before_handlers before_handlers' - then before_handlers' - else fixpoint before_handlers' - in - let init_state = - List.map (fun (nfail, _handler) -> nfail, Reg.Set.empty) handlers - in - let before_handler = fixpoint init_state in - (* We could use handler.live instead of Reg.Set.empty as the initial - value but we would need to clean the live field before doing the - analysis (to remove remnants of previous passes). *) - live_at_exit := before_handler @ !live_at_exit; - let before_body = live body at_join in - live_at_exit := live_at_exit_before; - i.live <- before_body; - before_body - | Iexit nfail -> - let this_live = find_live_at_exit nfail in - i.live <- this_live ; - this_live - | Itrywith(body, handler) -> - let at_join = live i.next finally in - let before_handler = live handler at_join in - let saved_live_at_raise = !live_at_raise in - live_at_raise := Reg.Set.remove Proc.loc_exn_bucket before_handler; - let before_body = live body at_join in - live_at_raise := saved_live_at_raise; - i.live <- before_body; - before_body + | Iifthenelse _ + | Iswitch _ -> + i.live <- next; + Reg.add_set_array next i.arg + | Iend | Icatch _ | Iexit _ | Itrywith _ -> + i.live <- next; + next | Iraise _ -> - i.live <- !live_at_raise; - Reg.add_set_array !live_at_raise i.arg + i.live <- exn; + Reg.add_set_array exn i.arg -let reset () = - live_at_raise := Reg.Set.empty; - live_at_exit := [] +let exnhandler before_handler = + Reg.Set.remove Proc.loc_exn_bucket before_handler let fundecl f = - let initially_live = live f.fun_body Reg.Set.empty in + let (initially_live, _) = + Analyzer.analyze ~exnhandler ~transfer f.fun_body in (* Sanity check: only function parameters can be live at entrypoint *) let wrong_live = Reg.Set.diff initially_live (Reg.set_of_array f.fun_args) in if not (Reg.Set.is_empty wrong_live) then begin diff --git a/asmcomp/liveness.mli b/asmcomp/liveness.mli index 37f5c170..65504d81 100644 --- a/asmcomp/liveness.mli +++ b/asmcomp/liveness.mli @@ -16,5 +16,4 @@ (* Liveness analysis. Annotate mach code with the set of regs live at each point. *) -val reset : unit -> unit val fundecl: Mach.fundecl -> unit diff --git a/asmcomp/mach.ml b/asmcomp/mach.ml index bb1969ad..d1df6bd3 100644 --- a/asmcomp/mach.ml +++ b/asmcomp/mach.ml @@ -51,16 +51,16 @@ type operation = ty_res : Cmm.machtype; ty_args : Cmm.exttype list; alloc : bool; } | Istackoffset of int - | Iload of Cmm.memory_chunk * Arch.addressing_mode + | Iload of Cmm.memory_chunk * Arch.addressing_mode * Asttypes.mutable_flag | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool | Ialloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo; } | Iintop of integer_operation | Iintop_imm of integer_operation * int | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat + | Iopaque | Ispecific of Arch.specific_operation - | Iname_for_debugger of { ident : Backend_var.t; which_parameter : int option; - provenance : unit option; is_assignment : bool; } + | Ipoll of { return_label: Cmm.label option } type instruction = { desc: instruction_desc; @@ -68,9 +68,7 @@ type instruction = arg: Reg.t array; res: Reg.t array; dbg: Debuginfo.t; - mutable live: Reg.Set.t; - mutable available_before: Reg_availability_set.t; - mutable available_across: Reg_availability_set.t option; + mutable live: Reg.Set.t } and instruction_desc = @@ -100,9 +98,7 @@ let rec dummy_instr = arg = [||]; res = [||]; dbg = Debuginfo.none; - live = Reg.Set.empty; - available_before = Reg_availability_set.Ok Reg_with_debug_info.Set.empty; - available_across = None; + live = Reg.Set.empty } let end_instr () = @@ -111,23 +107,16 @@ let end_instr () = arg = [||]; res = [||]; dbg = Debuginfo.none; - live = Reg.Set.empty; - available_before = Reg_availability_set.Ok Reg_with_debug_info.Set.empty; - available_across = None; + live = Reg.Set.empty } let instr_cons d a r n = { desc = d; next = n; arg = a; res = r; - dbg = Debuginfo.none; live = Reg.Set.empty; - available_before = Reg_availability_set.Ok Reg_with_debug_info.Set.empty; - available_across = None; + dbg = Debuginfo.none; live = Reg.Set.empty } let instr_cons_debug d a r dbg n = - { desc = d; next = n; arg = a; res = r; dbg = dbg; live = Reg.Set.empty; - available_before = Reg_availability_set.Ok Reg_with_debug_info.Set.empty; - available_across = None; - } + { desc = d; next = n; arg = a; res = r; dbg = dbg; live = Reg.Set.empty } let rec instr_iter f i = match i.desc with @@ -155,9 +144,17 @@ let rec instr_iter f i = | _ -> instr_iter f i.next +let operation_is_pure = function + | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ + | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ | Ipoll _ + | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) | Iopaque -> false + | Ispecific sop -> Arch.operation_is_pure sop + | _ -> true + let operation_can_raise op = match op with | Icall_ind | Icall_imm _ | Iextcall _ | Iintop (Icheckbound) | Iintop_imm (Icheckbound, _) - | Ialloc _ -> true + | Ialloc _ | Ipoll _ -> true + | Ispecific sop -> Arch.operation_can_raise sop | _ -> false diff --git a/asmcomp/mach.mli b/asmcomp/mach.mli index 323a668b..4e004004 100644 --- a/asmcomp/mach.mli +++ b/asmcomp/mach.mli @@ -51,7 +51,7 @@ type operation = ty_res : Cmm.machtype; ty_args : Cmm.exttype list; alloc : bool; } | Istackoffset of int - | Iload of Cmm.memory_chunk * Arch.addressing_mode + | Iload of Cmm.memory_chunk * Arch.addressing_mode * Asttypes.mutable_flag | Istore of Cmm.memory_chunk * Arch.addressing_mode * bool (* false = initialization, true = assignment *) | Ialloc of { bytes : int; dbginfo : Debuginfo.alloc_dbginfo; } @@ -59,15 +59,9 @@ type operation = | Iintop_imm of integer_operation * int | Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf | Ifloatofint | Iintoffloat + | Iopaque | Ispecific of Arch.specific_operation - | Iname_for_debugger of { ident : Backend_var.t; which_parameter : int option; - provenance : unit option; is_assignment : bool; } - (** [Iname_for_debugger] has the following semantics: - (a) The argument register(s) is/are deemed to contain the value of the - given identifier. - (b) If [is_assignment] is [true], any information about other [Reg.t]s - that have been previously deemed to hold the value of that - identifier is forgotten. *) + | Ipoll of { return_label: Cmm.label option } type instruction = { desc: instruction_desc; @@ -75,9 +69,7 @@ type instruction = arg: Reg.t array; res: Reg.t array; dbg: Debuginfo.t; - mutable live: Reg.Set.t; - mutable available_before: Reg_availability_set.t; - mutable available_across: Reg_availability_set.t option; + mutable live: Reg.Set.t } and instruction_desc = @@ -111,4 +103,11 @@ val instr_cons_debug: instruction -> instruction val instr_iter: (instruction -> unit) -> instruction -> unit +val operation_is_pure : operation -> bool + (** Returns [true] if the given operation only produces a result + in its destination registers, but has no side effects whatsoever: + it doesn't raise exceptions, it doesn't modify already-allocated + blocks, it doesn't adjust the stack frame, etc. *) + val operation_can_raise : operation -> bool + (** Returns [true] if the given operation can raise an exception. *) diff --git a/asmcomp/polling.ml b/asmcomp/polling.ml new file mode 100644 index 00000000..c498b9a1 --- /dev/null +++ b/asmcomp/polling.ml @@ -0,0 +1,258 @@ +(**************************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy and Damien Doligez, projet Cambium, INRIA Paris *) +(* Sadiq Jaffer, OCaml Labs Consultancy Ltd *) +(* Stephen Dolan and Mark Shinwell, Jane Street Europe *) +(* *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2021 OCaml Labs Consultancy Ltd *) +(* Copyright 2021 Jane Street Group LLC *) +(* *) +(* All rights reserved. This file is distributed under the terms of *) +(* the GNU Lesser General Public License version 2.1, with the *) +(* special exception on linking described in the file LICENSE. *) +(* *) +(**************************************************************************) + +open Mach + +module Int = Numbers.Int +module String = Misc.Stdlib.String + +let function_is_assumed_to_never_poll func = + String.starts_with ~prefix:"caml_apply" func + || String.starts_with ~prefix:"caml_send" func + +(* Detection of recursive handlers that are not guaranteed to poll + at every loop iteration. *) + +(* We use a backwards dataflow analysis to compute a mapping from handlers H + (= loop heads) to either "safe" or "unsafe". + + H is "safe" if every path starting from H goes through an Ialloc, + Ipoll, Ireturn, Itailcall_ind or Itailcall_imm instruction. + + H is "unsafe", therefore, if starting from H we can loop infinitely + without crossing an Ialloc or Ipoll instruction. +*) + +type unsafe_or_safe = Unsafe | Safe + +module Unsafe_or_safe = struct + type t = unsafe_or_safe + + let bot = Unsafe + + let join t1 t2 = + match t1, t2 with + | Unsafe, Unsafe + | Unsafe, Safe + | Safe, Unsafe -> Unsafe + | Safe, Safe -> Safe + + let lessequal t1 t2 = + match t1, t2 with + | Unsafe, Unsafe + | Unsafe, Safe + | Safe, Safe -> true + | Safe, Unsafe -> false +end + +module PolledLoopsAnalysis = Dataflow.Backward(Unsafe_or_safe) + +let polled_loops_analysis funbody = + let transfer i ~next ~exn = + match i.desc with + | Iend -> next + | Iop (Ialloc _ | Ipoll _) + | Iop (Itailcall_ind | Itailcall_imm _) -> Safe + | Iop op -> + if operation_can_raise op + then Unsafe_or_safe.join next exn + else next + | Ireturn -> Safe + | Iifthenelse _ | Iswitch _ | Icatch _ | Iexit _ | Itrywith _ -> next + | Iraise _ -> exn + in + (* [exnescape] is [Safe] because we can't loop infinitely having + returned from the function via an unhandled exception. *) + snd (PolledLoopsAnalysis.analyze ~exnescape:Safe ~transfer funbody) + +(* Detection of functions that can loop via a tail-call without going + through a poll point. *) + +(* We use a backwards dataflow analysis to compute a single value: either + "Might_not_poll" or "Always_polls". + + "Might_not_poll" means there exists a path from the function entry to a + Potentially Recursive Tail Call (an Itailcall_ind or + Itailcall_imm to a forward function) + that does not go through an Ialloc or Ipoll instruction. + + "Always_polls", therefore, means the function always polls (via Ialloc or + Ipoll) before doing a PRTC. This includes the case where it does not + perform any PRTC. + + A note on Potentially Recursive Tail Calls + ------------------------------------------ + + Tail calls can create infinite loops, of course. (Consider a function + that tail-calls itself.) But not all tail calls need to be flagged + as potential infinite loops. + + We optimise by making a partial ordering over Mach functions: in + definition order within a compilation unit, and dependency + order between compilation units. This order is acyclic, as + OCaml does not allow circular dependencies between modules. + It's also finite, so if there's an infinite sequence of + function calls then something has to make a forward reference. + + Also, in such an infinite sequence of function calls, at most finitely + many of them can be non-tail calls. (If there are infinitely many + non-tail calls, then the program soon terminates with a stack + overflow). + + So, every such infinite sequence must contain many forward-referencing + tail calls. These tail calls are the Potentially Recursive Tail Calls + (PTRCs). Polling only on those calls suffices. + + Several functions below take a parameter [future_funcnames] + which is the set of functions defined "after" the current function + in the current compilation unit. The PTRCs are tail calls + to known functions in [future_funcnames], or tail calls to + unknown functions. +*) + +type polls_before_prtc = Might_not_poll | Always_polls + +module Polls_before_prtc = struct + type t = polls_before_prtc + + let bot = Always_polls + + let join t1 t2 = + match t1, t2 with + | Might_not_poll, Might_not_poll + | Might_not_poll, Always_polls + | Always_polls, Might_not_poll -> Might_not_poll + | Always_polls, Always_polls -> Always_polls + + let lessequal t1 t2 = + match t1, t2 with + | Always_polls, Always_polls + | Always_polls, Might_not_poll + | Might_not_poll, Might_not_poll -> true + | Might_not_poll, Always_polls -> false +end + +module PTRCAnalysis = Dataflow.Backward(Polls_before_prtc) + +let potentially_recursive_tailcall ~future_funcnames funbody = + let transfer i ~next ~exn = + match i.desc with + | Iend -> next + | Iop (Ialloc _ | Ipoll _) -> Always_polls + | Iop (Itailcall_ind) -> Might_not_poll (* this is a PTRC *) + | Iop (Itailcall_imm { func }) -> + if String.Set.mem func future_funcnames + || function_is_assumed_to_never_poll func + then Might_not_poll (* this is a PTRC *) + else Always_polls (* this is not a PTRC *) + | Iop op -> + if operation_can_raise op + then Polls_before_prtc.join next exn + else next + | Ireturn -> Always_polls + | Iifthenelse _ | Iswitch _ | Icatch _ | Iexit _ | Itrywith _ -> next + | Iraise _ -> exn + in + fst (PTRCAnalysis.analyze ~transfer funbody) + +(* We refer to the set of recursive handler labels that need extra polling + as the "unguarded back edges" ("ube"). + + Given the result of the analysis of recursive handlers, add [Ipoll] + instructions at the [Iexit] instructions before unguarded back edges, + thus ensuring that every loop contains a poll point. Also compute whether + the resulting function contains any [Ipoll] instructions. +*) + +let contains_polls = ref false + +let add_poll i = + contains_polls := true; + Mach.instr_cons (Iop (Ipoll { return_label = None })) [||] [||] i + +let instr_body handler_safe i = + let add_unsafe_handler ube (k, _) = + match handler_safe k with + | Safe -> ube + | Unsafe -> Int.Set.add k ube + in + let rec instr ube i = + match i.desc with + | Iifthenelse (test, i0, i1) -> + { i with + desc = Iifthenelse (test, instr ube i0, instr ube i1); + next = instr ube i.next; + } + | Iswitch (index, cases) -> + { i with + desc = Iswitch (index, Array.map (instr ube) cases); + next = instr ube i.next; + } + | Icatch (rc, hdl, body) -> + let ube' = + match rc with + | Cmm.Recursive -> List.fold_left add_unsafe_handler ube hdl + | Cmm.Nonrecursive -> ube in + let instr_handler (k, i0) = + let i1 = instr ube' i0 in + (k, i1) in + (* Since we are only interested in unguarded _back_ edges, we don't + use [ube'] for instrumenting [body], but just [ube] instead. *) + let body = instr ube body in + { i with + desc = Icatch (rc, + List.map instr_handler hdl, + body); + next = instr ube i.next; + } + | Iexit k -> + if Int.Set.mem k ube + then add_poll i + else i + | Itrywith (body, hdl) -> + { i with + desc = Itrywith (instr ube body, instr ube hdl); + next = instr ube i.next; + } + | Iend | Ireturn | Iraise _ -> i + | Iop op -> + begin match op with + | Ipoll _ -> contains_polls := true + | _ -> () + end; + { i with next = instr ube i.next } + in + instr Int.Set.empty i + +let instrument_fundecl ~future_funcnames:_ (f : Mach.fundecl) : Mach.fundecl = + if function_is_assumed_to_never_poll f.fun_name then f + else begin + let handler_needs_poll = polled_loops_analysis f.fun_body in + contains_polls := false; + let new_body = instr_body handler_needs_poll f.fun_body in + let new_contains_calls = f.fun_contains_calls || !contains_polls in + { f with fun_body = new_body; fun_contains_calls = new_contains_calls } + end + +let requires_prologue_poll ~future_funcnames ~fun_name i = + if function_is_assumed_to_never_poll fun_name then false + else + match potentially_recursive_tailcall ~future_funcnames i with + | Might_not_poll -> true + | Always_polls -> false diff --git a/asmcomp/debug/compute_ranges.mli b/asmcomp/polling.mli similarity index 52% rename from asmcomp/debug/compute_ranges.mli rename to asmcomp/polling.mli index 695529f3..c4629a78 100644 --- a/asmcomp/debug/compute_ranges.mli +++ b/asmcomp/polling.mli @@ -2,9 +2,14 @@ (* *) (* OCaml *) (* *) -(* Mark Shinwell, Jane Street Europe *) +(* Xavier Leroy and Damien Doligez, projet Cambium, INRIA Paris *) +(* Sadiq Jaffer, OCaml Labs Consultancy Ltd *) +(* Stephen Dolan and Mark Shinwell, Jane Street Europe *) (* *) -(* Copyright 2014--2018 Jane Street Group LLC *) +(* Copyright 2021 Institut National de Recherche en Informatique et *) +(* en Automatique. *) +(* Copyright 2021 OCaml Labs Consultancy Ltd *) +(* Copyright 2021 Jane Street Group LLC *) (* *) (* All rights reserved. This file is distributed under the terms of *) (* the GNU Lesser General Public License version 2.1, with the *) @@ -12,17 +17,10 @@ (* *) (**************************************************************************) -(** Coalescing of per-instruction information into possibly-discontiguous - regions of code delimited by labels. This is used for collating - register availability and lexical block scoping information into a - concise form. *) +(** Analyses related to the insertion of [Ipoll] operations. *) -[@@@ocaml.warning "+a-4-30-40-41-42"] +val instrument_fundecl : future_funcnames:Misc.Stdlib.String.Set.t + -> Mach.fundecl -> Mach.fundecl -module Make (S : Compute_ranges_intf.S_functor) - : Compute_ranges_intf.S - with module Index := S.Index - with module Key := S.Key - with module Subrange_state := S.Subrange_state - with module Subrange_info := S.Subrange_info - with module Range_info := S.Range_info +val requires_prologue_poll : future_funcnames:Misc.Stdlib.String.Set.t + -> fun_name:string -> Mach.instruction -> bool diff --git a/asmcomp/power/CSE.ml b/asmcomp/power/CSE.ml index b8454ffd..1e8a4690 100644 --- a/asmcomp/power/CSE.ml +++ b/asmcomp/power/CSE.ml @@ -26,7 +26,7 @@ inherit cse_generic as super method! class_of_operation op = match op with | Ispecific(Imultaddf | Imultsubf) -> Op_pure - | Ispecific(Ialloc_far _) -> Op_other + | Ispecific(Ialloc_far _) | Ispecific(Ipoll_far _) -> Op_other | _ -> super#class_of_operation op method! is_cheap_operation op = diff --git a/asmcomp/power/arch.ml b/asmcomp/power/arch.ml index 6f5898ed..a84f8e3b 100644 --- a/asmcomp/power/arch.ml +++ b/asmcomp/power/arch.ml @@ -32,6 +32,9 @@ let abi = | "ppc64le" -> ELF64v2 | _ -> assert false +type cmm_label = int +(* Do not introduce a dependency to Cmm *) + (* Machine-specific command-line options *) let big_toc = ref true @@ -50,6 +53,7 @@ type specific_operation = | Imultsubf (* multiply and subtract *) | Ialloc_far of (* allocation in large functions *) { bytes : int; dbginfo : Debuginfo.alloc_dbginfo } + | Ipoll_far of { return_label : cmm_label option } (* Addressing modes *) @@ -115,3 +119,17 @@ let print_specific_operation printreg op ppf arg = printreg arg.(0) printreg arg.(1) printreg arg.(2) | Ialloc_far { bytes; _ } -> fprintf ppf "alloc_far %d" bytes + | Ipoll_far _ -> + fprintf ppf "poll_far" + +(* Specific operations that are pure *) + +let operation_is_pure = function + | Ialloc_far _ | Ipoll_far _ -> false + | _ -> true + +(* Specific operations that can raise *) + +let operation_can_raise = function + | Ialloc_far _ | Ipoll_far _ -> true + | _ -> false diff --git a/asmcomp/power/emit.mlp b/asmcomp/power/emit.mlp index 08ae3137..badabd2e 100644 --- a/asmcomp/power/emit.mlp +++ b/asmcomp/power/emit.mlp @@ -23,6 +23,7 @@ open Reg open Mach open Linear open Emitaux +open Emitenv (* Reserved space at bottom of stack *) @@ -34,44 +35,39 @@ let reserved_stack_space = (* Layout of the stack. The stack is kept 16-aligned. *) -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let contains_calls = ref false - -let initial_stack_offset () = +let initial_stack_offset f = reserved_stack_space + - size_int * num_stack_slots.(0) + (* Local int variables *) - size_float * num_stack_slots.(1) + (* Local float variables *) - (if !contains_calls && abi = ELF32 then size_int else 0) + size_int * f.fun_num_stack_slots.(0) + (* Local int variables *) + size_float * f.fun_num_stack_slots.(1) + (* Local float variables *) + (if f.fun_contains_calls && abi = ELF32 then size_int else 0) (* The return address *) -let frame_size () = +let frame_size env = let size = - !stack_offset + (* Trap frame, outgoing parameters *) - initial_stack_offset () in + env.stack_offset + (* Trap frame, outgoing parameters *) + initial_stack_offset env.f in Misc.align size 16 -let slot_offset loc cls = +let slot_offset env loc cls = match loc with Local n -> - reserved_stack_space + !stack_offset + - (if cls = 0 then num_stack_slots.(1) * size_float + n * size_int + reserved_stack_space + env.stack_offset + + (if cls = 0 then env.f.fun_num_stack_slots.(1) * size_float + n * size_int else n * size_float) - | Incoming n -> frame_size() + reserved_stack_space + n + | Incoming n -> + (* Callee's [reserved_stack_space] is included in [frame_size]. + To access incoming arguments, add caller's [reserverd_stack_space]. *) + frame_size env + reserved_stack_space + n | Outgoing n -> reserved_stack_space + n -let retaddr_offset () = +let retaddr_offset env = match abi with - | ELF32 -> frame_size() - size_addr - | ELF64v1 | ELF64v2 -> frame_size() + 16 + | ELF32 -> frame_size env - size_addr + | ELF64v1 | ELF64v2 -> frame_size env + 16 -let toc_save_offset () = +let toc_save_offset env = match abi with | ELF32 -> assert false - | ELF64v1 | ELF64v2 -> frame_size() + 8 + | ELF64v1 | ELF64v2 -> frame_size env + 8 let (trap_size, trap_handler_offset, trap_previous_offset) = match abi with @@ -135,10 +131,10 @@ let emit_reg r = (* Output a stack reference *) -let emit_stack r = +let emit_stack env r = match r.loc with | Stack s -> - let ofs = slot_offset s (register_class r) in `{emit_int ofs}(1)` + let ofs = slot_offset env s (register_class r) in `{emit_int ofs}(1)` | _ -> Misc.fatal_error "Emit.emit_stack" (* Output the name of a symbol plus an optional offset *) @@ -244,7 +240,12 @@ let emit_load_store instr addressing_mode addr n arg = let (lo, hi) = low_high_s d in if hi <> 0 then ` addis 11, 11, {emit_int hi}\n`; - ` {emit_string instr} {emit_reg arg}, {emit_int lo}(11)\n` + if valid_offset instr lo then + ` {emit_string instr} {emit_reg arg}, {emit_int lo}(11)\n` + else begin + ` li 0, {emit_int lo}\n`; + ` {emit_string instr}x {emit_reg arg}, 11, 0\n` + end end | Iindexed ofs -> if is_immediate ofs && valid_offset instr ofs then @@ -276,8 +277,8 @@ let emit_set_comp cmp res = (* Free the stack frame *) -let emit_free_frame () = - let n = frame_size() in +let emit_free_frame env = + let n = frame_size env in if n > 0 then ` addi 1, 1, {emit_int n}\n` @@ -299,18 +300,18 @@ let emit_call_nop () = (* Reload the TOC register r2 from the value saved on the stack *) -let emit_reload_toc () = - ` ld 2, {emit_int (toc_save_offset())}(1)\n` +let emit_reload_toc env = + ` ld 2, {emit_int (toc_save_offset env)}(1)\n` (* Adjust stack_offset and emit corresponding CFI directive *) -let adjust_stack_offset delta = - stack_offset := !stack_offset + delta; +let adjust_stack_offset env delta = + env.stack_offset <- env.stack_offset + delta; cfi_adjust_cfa_offset delta (* Record live pointers at call points *) -let record_frame live dbg = +let record_frame env live dbg = let lbl = new_label() in let live_offset = ref [] in Reg.Set.iter @@ -318,26 +319,15 @@ let record_frame live dbg = | {typ = Val; loc = Reg r} -> live_offset := ((r lsl 1) + 1) :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> ()) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; `{emit_label lbl}:\n` -(* Record floating-point literals (for PPC32) *) - -let float_literals = ref ([] : (int64 * int) list) - -(* Record jump tables (for PPC64). In order to reduce the size of the TOC, - we concatenate all jumptables and emit them at the end of the compilation - unit. *) - -let jumptables = ref ([] : label list) (* in reverse order *) -let jumptables_lbl = ref (-1) - (* Names for conditional branches after comparisons *) let branch_for_comparison = function @@ -392,13 +382,6 @@ let name_for_specific = function | Imultsubf -> "fmsub" | _ -> Misc.fatal_error "Emit.Ispecific" -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 -(* Label of glue code for calling the GC *) -let call_gc_label = ref 0 - (* Relaxation of branches that exceed the span of a relative branch. *) module BR = Branch_relaxation.Make (struct @@ -415,6 +398,7 @@ module BR = Branch_relaxation.Make (struct let classify_instr = function | Lop (Ialloc _) + | Lop (Ipoll _) (* [Ialloc_far] does not need to be here, since its code sequence never involves any conditional branches that might need relaxing. *) | Lcondbranch _ @@ -435,10 +419,10 @@ module BR = Branch_relaxation.Make (struct | ELF32 -> 5 | ELF64v1 | ELF64v2 -> 6 - let prologue_size () = + let prologue_size f = profiling_prologue_size () - + (if initial_stack_offset () > 0 then 1 else 0) - + (if !contains_calls then + + (if initial_stack_offset f > 0 then 1 else 0) + + (if f.fun_contains_calls then 2 + match abi with | ELF32 -> 0 @@ -457,9 +441,9 @@ module BR = Branch_relaxation.Make (struct | Iindexed ofs -> if is_immediate ofs then 1 else 3 | Iindexed2 -> 1 - let instr_size = function + let instr_size f = function | Lend -> 0 - | Lprologue -> prologue_size () + | Lprologue -> prologue_size f | Lop(Imove | Ispill | Ireload) -> 1 | Lop(Iconst_int n) -> if is_native_immediate n then 1 @@ -474,20 +458,24 @@ module BR = Branch_relaxation.Make (struct | Lop(Icall_imm _) -> size 1 3 3 | Lop(Itailcall_ind) -> size 5 7 6 | Lop(Itailcall_imm { func; _ }) -> - if func = !function_name + if func = f.fun_name then 1 else size 4 (7 + tocload_size()) (6 + tocload_size()) | Lop(Iextcall { alloc = true; _ }) -> size 3 (2 + tocload_size()) (2 + tocload_size()) | Lop(Iextcall { alloc = false; _}) -> size 1 2 2 | Lop(Istackoffset _) -> 1 - | Lop(Iload(chunk, addr)) -> + | Lop(Iload(chunk, addr, _mut)) -> if chunk = Byte_signed then load_store_size addr + 1 else load_store_size addr | Lop(Istore(_chunk, addr, _)) -> load_store_size addr - | Lop(Ialloc _) -> 4 - | Lop(Ispecific(Ialloc_far _)) -> 5 + | Lop(Ialloc _) -> 5 + | Lop(Ispecific(Ialloc_far _)) -> 6 + | Lop(Ipoll { return_label = Some(_) }) -> 5 + | Lop(Ipoll { return_label = None }) -> 3 + | Lop(Ispecific(Ipoll_far { return_label = Some(_) } )) -> 5 + | Lop(Ispecific(Ipoll_far { return_label = None } )) -> 4 | Lop(Iintop Imod) -> 3 | Lop(Iintop(Icomp _)) -> 4 | Lop(Iintop _) -> 1 @@ -496,8 +484,8 @@ module BR = Branch_relaxation.Make (struct | Lop(Inegf | Iabsf | Iaddf | Isubf | Imulf | Idivf) -> 1 | Lop(Ifloatofint) -> 9 | Lop(Iintoffloat) -> 4 + | Lop(Iopaque) -> 0 | Lop(Ispecific _) -> 1 - | Lop (Iname_for_debugger _) -> 0 | Lreloadretaddr -> 2 | Lreturn -> 2 | Llabel _ -> 0 @@ -517,6 +505,9 @@ module BR = Branch_relaxation.Make (struct let relax_allocation ~num_bytes:bytes ~dbginfo = Lop (Ispecific (Ialloc_far { bytes; dbginfo })) + let relax_poll ~return_label = + Lop (Ispecific (Ipoll_far { return_label })) + (* [classify_addr], above, never identifies these instructions as needing relaxing. As such, these functions should never be called. *) let relax_specific_op _ = assert false @@ -524,28 +515,78 @@ module BR = Branch_relaxation.Make (struct let relax_intop_imm_checkbound ~bound:_ = assert false end) +(* Assembly code for inlined allocation *) + +let emit_alloc env i bytes dbginfo far = + if env.call_gc_label = 0 then env.call_gc_label <- new_label (); + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` {emit_string lg} 0, {emit_int offset}(30)\n`; + ` addi 31, 31, {emit_int(-bytes)}\n`; + ` {emit_string cmplg} 31, 0\n`; + if not far then begin + ` bltl {emit_label env.call_gc_label}\n`; + record_frame env i.live (Dbg_alloc dbginfo); + ` addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n` + end else begin + let lbl = new_label() in + ` bge {emit_label lbl}\n`; + ` bl {emit_label env.call_gc_label}\n`; + record_frame env i.live (Dbg_alloc dbginfo); + `{emit_label lbl}: addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n` + end + +let emit_poll env i return_label far = + if env.call_gc_label = 0 then env.call_gc_label <- new_label (); + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` {emit_string lg} 0, {emit_int offset}(30)\n`; + ` {emit_string cmplg} 31, 0\n`; + if not far then begin + begin match return_label with + | None -> + begin + ` bltl {emit_label env.call_gc_label}\n`; + record_frame env i.live (Dbg_alloc []) + end + | Some return_label -> + begin + ` bltl {emit_label env.call_gc_label}\n`; + record_frame env i.live (Dbg_alloc []); + ` b {emit_label return_label}\n` + end + end; + end else begin + let lbl = new_label () in + ` bge {emit_label lbl}\n`; + ` bl {emit_label env.call_gc_label}\n`; + record_frame env i.live (Dbg_alloc []); + ` {emit_label lbl}: \n`; + match return_label with + | None -> () + | Some return_label -> ` b {emit_label return_label}\n` + end + (* Output the assembly code for an instruction *) -let emit_instr i = +let emit_instr env i = emit_debug_info i.dbg; match i.desc with | Lend -> () | Lprologue -> - assert (!prologue_required); - let n = frame_size() in + assert (env.f.fun_prologue_required); + let n = frame_size env in if n > 0 then begin ` addi 1, 1, {emit_int(-n)}\n`; cfi_adjust_cfa_offset n end; - if !contains_calls then begin - let ra = retaddr_offset() in + if env.f.fun_contains_calls then begin + let ra = retaddr_offset env in ` mflr 0\n`; ` {emit_string stg} 0, {emit_int ra}(1)\n`; cfi_offset ~reg: 65 (* LR *) ~offset: (ra - n); match abi with | ELF32 -> () | ELF64v1 | ELF64v2 -> - ` std 2, {emit_int(toc_save_offset())}(1)\n` + ` std 2, {emit_int(toc_save_offset env)}(1)\n` end | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in @@ -556,13 +597,13 @@ let emit_instr i = | {loc = Reg _; typ = Float}, {loc = Reg _; typ = Float} -> ` fmr {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Stack _} -> - ` {emit_string stg} {emit_reg src}, {emit_stack dst}\n` + ` {emit_string stg} {emit_reg src}, {emit_stack env dst}\n` | {loc = Reg _; typ = Float}, {loc = Stack _} -> - ` stfd {emit_reg src}, {emit_stack dst}\n` + ` stfd {emit_reg src}, {emit_stack env dst}\n` | {loc = Stack _; typ = (Val | Int | Addr)}, {loc = Reg _} -> - ` {emit_string lg} {emit_reg dst}, {emit_stack src}\n` + ` {emit_string lg} {emit_reg dst}, {emit_stack env src}\n` | {loc = Stack _; typ = Float}, {loc = Reg _} -> - ` lfd {emit_reg dst}, {emit_stack src}\n` + ` lfd {emit_reg dst}, {emit_stack env src}\n` | (_, _) -> Misc.fatal_error "Emit: Imove" end @@ -594,7 +635,7 @@ let emit_instr i = begin match abi with | ELF32 -> let lbl = new_label() in - float_literals := (f, lbl) :: !float_literals; + env.float_literals <- { fl=f; lbl } :: env.float_literals; ` addis 11, 0, {emit_upper emit_label lbl}\n`; ` lfd {emit_reg i.res.(0)}, {emit_lower emit_label lbl}(11)\n` | ELF64v1 | ELF64v2 -> @@ -620,26 +661,26 @@ let emit_instr i = | ELF32 -> ` mtctr {emit_reg i.arg.(0)}\n`; ` bctrl\n`; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | ELF64v1 -> ` ld 0, 0({emit_reg i.arg.(0)})\n`; (* code pointer *) ` mtctr 0\n`; ` ld 2, 8({emit_reg i.arg.(0)})\n`; (* TOC for callee *) ` bctrl\n`; - record_frame i.live (Dbg_other i.dbg); - emit_reload_toc() + record_frame env i.live (Dbg_other i.dbg); + emit_reload_toc env | ELF64v2 -> ` mtctr {emit_reg i.arg.(0)}\n`; ` mr 12, {emit_reg i.arg.(0)}\n`; (* addr of fn in r12 *) ` bctrl\n`; - record_frame i.live (Dbg_other i.dbg); - emit_reload_toc() + record_frame env i.live (Dbg_other i.dbg); + emit_reload_toc env end | Lop(Icall_imm { func; }) -> begin match abi with | ELF32 -> emit_call func; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | ELF64v1 | ELF64v2 -> (* For PPC64, we cannot just emit a "bl s; nop" sequence, because of the following scenario: @@ -659,9 +700,9 @@ let emit_instr i = Cost: 3 instructions if same TOC, 7 if different TOC. Let's try option 2. *) emit_call func; - record_frame i.live (Dbg_other i.dbg); + record_frame env i.live (Dbg_other i.dbg); ` nop\n`; - emit_reload_toc() + emit_reload_toc env end | Lop(Itailcall_ind) -> begin match abi with @@ -675,15 +716,15 @@ let emit_instr i = ` mtctr {emit_reg i.arg.(0)}\n`; ` mr 12, {emit_reg i.arg.(0)}\n` (* addr of fn in r12 *) end; - if !contains_calls then begin - ` {emit_string lg} 11, {emit_int(retaddr_offset())}(1)\n`; + if env.f.fun_contains_calls then begin + ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` end; - emit_free_frame(); + emit_free_frame env; ` bctr\n` | Lop(Itailcall_imm { func; }) -> - if func = !function_name then - ` b {emit_label !tailrec_entry_point}\n` + if func = env.f.fun_name then + ` b {emit_label env.f.fun_tailrec_entry_point_label}\n` else begin begin match abi with | ELF32 -> @@ -697,11 +738,11 @@ let emit_instr i = emit_tocload emit_gpr 12 (TocSym func); (* addr of fn must be in r12 *) ` mtctr 12\n` end; - if !contains_calls then begin - ` {emit_string lg} 11, {emit_int(retaddr_offset())}(1)\n`; + if env.f.fun_contains_calls then begin + ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` end; - emit_free_frame(); + emit_free_frame env; begin match abi with | ELF32 -> ` b {emit_symbol func}\n` @@ -719,17 +760,17 @@ let emit_instr i = ` addis 25, 0, {emit_upper emit_symbol func}\n`; ` addi 25, 25, {emit_lower emit_symbol func}\n`; emit_call "caml_c_call"; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | ELF64v1 | ELF64v2 -> emit_tocload emit_gpr 25 (TocSym func); emit_call "caml_c_call"; - record_frame i.live (Dbg_other i.dbg); + record_frame env i.live (Dbg_other i.dbg); ` nop\n` end | Lop(Istackoffset n) -> ` addi 1, 1, {emit_int (-n)}\n`; - adjust_stack_offset n - | Lop(Iload(chunk, addr)) -> + adjust_stack_offset env n + | Lop(Iload(chunk, addr, _mut)) -> let loadinstr = match chunk with | Byte_unsigned -> "lbz" @@ -754,22 +795,14 @@ let emit_instr i = | Single -> "stfs" | Double | Double_u -> "stfd" in emit_load_store storeinstr addr i.arg 1 i.arg.(0) - | Lop(Ialloc { bytes = n; dbginfo }) -> - if !call_gc_label = 0 then call_gc_label := new_label (); - ` addi 31, 31, {emit_int(-n)}\n`; - ` {emit_string cmplg} 31, 30\n`; - ` bltl {emit_label !call_gc_label}\n`; - record_frame i.live (Dbg_alloc dbginfo); - ` addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n`; - | Lop(Ispecific(Ialloc_far { bytes = n; dbginfo })) -> - if !call_gc_label = 0 then call_gc_label := new_label (); - let lbl = new_label() in - ` addi 31, 31, {emit_int(-n)}\n`; - ` {emit_string cmplg} 31, 30\n`; - ` bge {emit_label lbl}\n`; - ` bl {emit_label !call_gc_label}\n`; - record_frame i.live (Dbg_alloc dbginfo); - `{emit_label lbl}: addi {emit_reg i.res.(0)}, 31, {emit_int size_addr}\n` + | Lop(Ialloc { bytes; dbginfo }) -> + emit_alloc env i bytes dbginfo false + | Lop(Ispecific(Ialloc_far { bytes; dbginfo })) -> + emit_alloc env i bytes dbginfo true + | Lop(Ipoll { return_label }) -> + emit_poll env i return_label false + | Lop(Ispecific(Ipoll_far { return_label })) -> + emit_poll env i return_label true | Lop(Iintop Isub) -> (* subfc has swapped arguments *) ` subfc {emit_reg i.res.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(0)}\n` | Lop(Iintop Imod) -> @@ -787,7 +820,7 @@ let emit_instr i = end | Lop(Iintop (Icheckbound)) -> if !Clflags.debug then - record_frame Reg.Set.empty (Dbg_other i.dbg); + record_frame env Reg.Set.empty (Dbg_other i.dbg); ` {emit_string tglle} {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` | Lop(Iintop op) -> let instr = name_for_intop op in @@ -805,7 +838,7 @@ let emit_instr i = end | Lop(Iintop_imm(Icheckbound, n)) -> if !Clflags.debug then - record_frame Reg.Set.empty (Dbg_other i.dbg); + record_frame env Reg.Set.empty (Dbg_other i.dbg); ` {emit_string tglle}i {emit_reg i.arg.(0)}, {emit_int n}\n` | Lop(Iintop_imm(op, n)) -> let instr = name_for_intop_imm op in @@ -824,7 +857,7 @@ let emit_instr i = ` fcfid {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` end else begin let lbl = new_label() in - float_literals := (0x4330000080000000L, lbl) :: !float_literals; + env.float_literals <- {fl=0x4330000080000000L; lbl} :: env.float_literals; ` addis 11, 0, {emit_upper emit_label lbl}\n`; ` lfd 0, {emit_lower emit_label lbl}(11)\n`; ` lis 0, 0x4330\n`; @@ -847,15 +880,16 @@ let emit_instr i = ` lwz {emit_reg i.res.(0)}, 4(1)\n`; ` addi 1, 1, 16\n` end + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific sop) -> let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n` - | Lop (Iname_for_debugger _) -> () | Lreloadretaddr -> - ` {emit_string lg} 11, {emit_int(retaddr_offset())}(1)\n`; + ` {emit_string lg} 11, {emit_int(retaddr_offset env)}(1)\n`; ` mtlr 11\n` | Lreturn -> - emit_free_frame(); + emit_free_frame env; ` blr\n` | Llabel lbl -> `{emit_label lbl}:\n` @@ -922,10 +956,16 @@ let emit_instr i = | Lswitch jumptbl -> let lbl = new_label() in if ppc64 then begin - if !jumptables_lbl < 0 then jumptables_lbl := lbl; - let start = List.length !jumptables in + let jumptables_lbl = match env.jumptables_lbl with + | None -> + env.jumptables_lbl <- Some lbl; + assert (List.length env.jumptables = 0); + lbl + | Some l-> l + in + let start = List.length env.jumptables in let (start_lo, start_hi) = low_high_s start in - emit_tocload emit_gpr 11 (TocLabel !jumptables_lbl); + emit_tocload emit_gpr 11 (TocLabel jumptables_lbl); ` addi 12, {emit_reg i.arg.(0)}, {emit_int start_lo}\n`; if start_hi <> 0 then ` addis 12, 12, {emit_int start_hi}\n`; @@ -940,7 +980,7 @@ let emit_instr i = ` mtctr 0\n`; ` bctr\n`; if ppc64 then begin - jumptables := List.rev_append (Array.to_list jumptbl) !jumptables + env.jumptables <- List.rev_append (Array.to_list jumptbl) env.jumptables end else begin emit_string rodata_space; `{emit_label lbl}:`; @@ -952,22 +992,22 @@ let emit_instr i = | Lentertrap -> begin match abi with | ELF32 -> () - | ELF64v1 | ELF64v2 -> emit_reload_toc() + | ELF64v1 | ELF64v2 -> emit_reload_toc env end | Ladjust_trap_depth { delta_traps } -> - adjust_stack_offset (trap_size * delta_traps) + adjust_stack_offset env (trap_size * delta_traps) | Lpushtrap { lbl_handler; } -> begin match abi with | ELF32 -> ` addis 11, 0, {emit_upper emit_label lbl_handler}\n`; ` addi 11, 11, {emit_lower emit_label lbl_handler}\n`; ` stwu 11, -16(1)\n`; - adjust_stack_offset 16; + adjust_stack_offset env 16; ` stw 29, 4(1)\n`; ` mr 29, 1\n` | ELF64v1 | ELF64v2 -> ` addi 1, 1, {emit_int (-trap_size)}\n`; - adjust_stack_offset trap_size; + adjust_stack_offset env trap_size; ` std 29, {emit_int trap_previous_offset}(1)\n`; emit_tocload emit_gpr 29 (TocLabel lbl_handler); ` std 29, {emit_int trap_handler_offset}(1)\n`; @@ -976,7 +1016,7 @@ let emit_instr i = | Lpoptrap -> ` {emit_string lg} 29, {emit_int trap_previous_offset}(1)\n`; ` addi 1, 1, {emit_int trap_size}\n`; - adjust_stack_offset (-trap_size) + adjust_stack_offset env (-trap_size) | Lraise k -> begin match k with | Lambda.Raise_regular -> @@ -985,15 +1025,15 @@ let emit_instr i = Domainstate.(idx_of_field Domain_backtrace_pos) in begin match abi with - | ELF32 -> ` stw 0, {emit_int (backtrace_pos * 8)}(28)\n` - | _ -> ` std 0, {emit_int (backtrace_pos * 8)}(28)\n` + | ELF32 -> ` stw 0, {emit_int (backtrace_pos * 8)}(30)\n` + | _ -> ` std 0, {emit_int (backtrace_pos * 8)}(30)\n` end; emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg); + record_frame env Reg.Set.empty (Dbg_raise i.dbg); emit_call_nop() | Lambda.Raise_reraise -> emit_call "caml_raise_exn"; - record_frame Reg.Set.empty (Dbg_raise i.dbg); + record_frame env Reg.Set.empty (Dbg_raise i.dbg); emit_call_nop() | Lambda.Raise_notrace -> ` {emit_string lg} 0, {emit_int trap_handler_offset}(29)\n`; @@ -1006,25 +1046,15 @@ let emit_instr i = (* Emit a sequence of instructions *) -let rec emit_all i = +let rec emit_all env i = match i.desc with | Lend -> () - | _ -> emit_instr i; emit_all i.next + | _ -> emit_instr env i; emit_all env i.next (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - stack_offset := 0; - call_gc_label := 0; - float_literals := []; - jumptables := []; jumptables_lbl := -1; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - contains_calls := fundecl.fun_contains_calls; + let env = mk_env fundecl in begin match abi with | ELF32 -> emit_string code_space; @@ -1057,11 +1087,11 @@ let fundecl fundecl = (* On this target, there is at most one "out of line" code block per function: a single "call GC" point. It comes immediately after the function's body. *) - BR.relax fundecl.fun_body ~max_out_of_line_code_offset:0; - emit_all fundecl.fun_body; + BR.relax fundecl ~max_out_of_line_code_offset:0; + emit_all env fundecl.fun_body; (* Emit the glue code to call the GC *) - if !call_gc_label > 0 then begin - `{emit_label !call_gc_label}:\n`; + if env.call_gc_label > 0 then begin + `{emit_label env.call_gc_label}:\n`; match abi with | ELF32 -> ` b {emit_symbol "caml_call_gc"}\n` @@ -1088,25 +1118,27 @@ let fundecl fundecl = ` .size {emit_symbol fundecl.fun_name}, . - .L.{emit_symbol fundecl.fun_name}\n` end; (* Emit the numeric literals *) - if !float_literals <> [] then begin + if env.float_literals <> [] then begin emit_string rodata_space; ` .align 3\n`; List.iter - (fun (f, lbl) -> + (fun { fl; lbl } -> `{emit_label lbl}:`; - emit_float64_split_directive ".long" f) - !float_literals + emit_float64_split_directive ".long" fl) + env.float_literals end; (* Emit the jump tables *) - if !jumptables <> [] then begin + match env.jumptables, env.jumptables_lbl with + | _ :: _, None | [], Some _ -> assert false (* Sanity check *) + | [], None -> () + | _ :: _, Some j -> emit_string rodata_space; ` .align 2\n`; - `{emit_label !jumptables_lbl}:`; + `{emit_label j}:`; List.iter (fun lbl -> - ` .long {emit_label lbl} - {emit_label !jumptables_lbl}\n`) - (List.rev !jumptables) - end + ` .long {emit_label lbl} - {emit_label j}\n`) + (List.rev env.jumptables) (* Emission of data *) diff --git a/asmcomp/power/proc.ml b/asmcomp/power/proc.ml index eec140db..c080768c 100644 --- a/asmcomp/power/proc.ml +++ b/asmcomp/power/proc.ml @@ -34,10 +34,9 @@ let word_addressed = false 3 - 10 function arguments and results 11 - 12 temporaries 13 pointer to small data area - 14 - 27 general purpose, preserved by C - 28 domain state pointer + 14 - 28 general purpose, preserved by C 29 trap pointer - 30 allocation limit + 30 domain state pointer 31 allocation pointer Floating-point register map: 0 temporary @@ -46,9 +45,9 @@ let word_addressed = false *) let int_reg_name = - [| "3"; "4"; "5"; "6"; "7"; "8"; "9"; "10"; - "14"; "15"; "16"; "17"; "18"; "19"; "20"; "21"; - "22"; "23"; "24"; "25"; "26"; "27" |] + [| "3"; "4"; "5"; "6"; "7"; "8"; "9"; "10"; (* 0 - 7 *) + "14"; "15"; "16"; "17"; "18"; "19"; "20"; "21"; (* 8 - 15 *) + "22"; "23"; "24"; "25"; "26"; "27"; "28" |] (* 16 - 22 *) let float_reg_name = [| "1"; "2"; "3"; "4"; "5"; "6"; "7"; "8"; @@ -63,7 +62,7 @@ let register_class r = | Val | Int | Addr -> 0 | Float -> 1 -let num_available_registers = [| 22; 31 |] +let num_available_registers = [| 23; 31 |] let first_available_register = [| 0; 100 |] @@ -75,7 +74,7 @@ let rotate_registers = true (* Representation of hard registers by pseudo-registers *) let hard_int_reg = - let v = Array.make 22 Reg.dummy in + let v = Array.make 23 Reg.dummy in for i = 0 to 21 do v.(i) <- Reg.at_location Int (Reg i) done; v let hard_float_reg = @@ -314,22 +313,11 @@ let destroyed_at_reloadretaddr = [| phys_reg 11 |] let safe_register_pressure = function Iextcall _ -> 14 - | _ -> 22 + | _ -> 23 let max_register_pressure = function Iextcall _ -> [| 14; 18 |] - | _ -> [| 22; 30 |] - -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false - | Ispecific(Imultaddf | Imultsubf) -> true - | Ispecific _ -> false - | _ -> true + | _ -> [| 23; 30 |] (* Layout of the stack *) diff --git a/asmcomp/power/scheduling.ml b/asmcomp/power/scheduling.ml index dcbfca79..8438a7d0 100644 --- a/asmcomp/power/scheduling.ml +++ b/asmcomp/power/scheduling.ml @@ -26,7 +26,7 @@ inherit Schedgen.scheduler_generic method oper_latency = function Ireload -> 2 - | Iload(_, _) -> 2 + | Iload(_, _, _) -> 2 | Iconst_float _ -> 2 (* turned into a load *) | Iconst_symbol _ -> 1 | Iintop(Imul | Imulh) -> 9 @@ -46,7 +46,7 @@ method! reload_retaddr_latency = 12 method oper_issue_cycles = function Iconst_float _ | Iconst_symbol _ -> 2 - | Iload(_, Ibased(_, _)) -> 2 + | Iload(_, Ibased(_, _), _) -> 2 | Istore(_, Ibased(_, _), _) -> 2 | Ialloc _ -> 4 | Iintop(Imod) -> 40 (* assuming full stall *) diff --git a/asmcomp/power/selection.ml b/asmcomp/power/selection.ml index 0e8d088a..ba95a61e 100644 --- a/asmcomp/power/selection.ml +++ b/asmcomp/power/selection.ml @@ -92,4 +92,5 @@ method! select_operation op args dbg = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = + (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/printcmm.ml b/asmcomp/printcmm.ml index d54a97d9..56bb967a 100644 --- a/asmcomp/printcmm.ml +++ b/asmcomp/printcmm.ml @@ -156,6 +156,7 @@ let operation d = function | Ccmpf c -> Printf.sprintf "%sf" (float_comparison c) | Craise k -> Lambda.raise_kind k ^ location d | Ccheckbound -> "checkbound" ^ location d + | Copaque -> "opaque" let rec expr ppf = function | Cconst_int (n, _dbg) -> fprintf ppf "%i" n diff --git a/asmcomp/printlinear.ml b/asmcomp/printlinear.ml index 433366c4..2ffe4092 100644 --- a/asmcomp/printlinear.ml +++ b/asmcomp/printlinear.ml @@ -30,7 +30,7 @@ let instr ppf i = fprintf ppf "prologue" | Lop op -> begin match op with - | Ialloc _ | Icall_ind | Icall_imm _ | Iextcall _ -> + | Ialloc _ | Ipoll _ | Icall_ind | Icall_imm _ | Iextcall _ -> fprintf ppf "@[<1>{%a}@]@," regsetaddr i.live | _ -> () end; diff --git a/asmcomp/printmach.ml b/asmcomp/printmach.ml index 3d6689c4..a0afc1a4 100644 --- a/asmcomp/printmach.ml +++ b/asmcomp/printmach.ml @@ -21,8 +21,6 @@ open Reg open Mach open Interval -module V = Backend_var - let reg ppf r = if not (Reg.anonymous r) then fprintf ppf "%s" (Reg.name r) @@ -122,9 +120,12 @@ let operation op arg ppf res = (if alloc then "" else " (noalloc)") | Istackoffset n -> fprintf ppf "offset stack %i" n - | Iload(chunk, addr) -> + | Iload(chunk, addr, Immutable) -> fprintf ppf "%s[%a]" (Printcmm.chunk chunk) (Arch.print_addressing reg addr) arg + | Iload(chunk, addr, Mutable) -> + fprintf ppf "%s mut[%a]" + (Printcmm.chunk chunk) (Arch.print_addressing reg addr) arg | Istore(chunk, addr, is_assign) -> fprintf ppf "%s[%a] := %a %s" (Printcmm.chunk chunk) @@ -144,31 +145,21 @@ let operation op arg ppf res = | Idivf -> fprintf ppf "%a /f %a" reg arg.(0) reg arg.(1) | Ifloatofint -> fprintf ppf "floatofint %a" reg arg.(0) | Iintoffloat -> fprintf ppf "intoffloat %a" reg arg.(0) - | Iname_for_debugger { ident; which_parameter; } -> - fprintf ppf "name_for_debugger %a%s=%a" - V.print ident - (match which_parameter with - | None -> "" - | Some index -> sprintf "[P%d]" index) - reg arg.(0) + | Iopaque -> fprintf ppf "opaque %a" reg arg.(0) | Ispecific op -> Arch.print_specific_operation reg op ppf arg + | Ipoll { return_label } -> + fprintf ppf "poll call"; + match return_label with + | None -> () + | Some return_label -> + fprintf ppf " returning to L%d" return_label let rec instr ppf i = if !Clflags.dump_live then begin fprintf ppf "@[<1>{%a" regsetaddr i.live; if Array.length i.arg > 0 then fprintf ppf "@ +@ %a" regs i.arg; fprintf ppf "}@]@,"; - if !Clflags.dump_avail then begin - let module RAS = Reg_availability_set in - fprintf ppf "@[<1>AB={%a}" (RAS.print ~print_reg:reg) i.available_before; - begin match i.available_across with - | None -> () - | Some available_across -> - fprintf ppf ",AA={%a}" (RAS.print ~print_reg:reg) available_across - end; - fprintf ppf "@]@," - end end; begin match i.desc with | Iend -> () diff --git a/asmcomp/proc.mli b/asmcomp/proc.mli index a92b1e9c..c1692c06 100644 --- a/asmcomp/proc.mli +++ b/asmcomp/proc.mli @@ -58,9 +58,6 @@ val destroyed_at_reloadretaddr : Reg.t array (* Volatile registers: those that change value when read *) val regs_are_volatile: Reg.t array -> bool -(* Pure operations *) -val op_is_pure: Mach.operation -> bool - (* Info for laying out the stack frame *) val frame_required : Mach.fundecl -> bool diff --git a/asmcomp/reloadgen.ml b/asmcomp/reloadgen.ml index a3505e15..a4ca5593 100644 --- a/asmcomp/reloadgen.ml +++ b/asmcomp/reloadgen.ml @@ -70,6 +70,10 @@ method reload_operation op arg res = | _ -> (arg, res) end + | Iopaque -> + (* arg = result, can be on stack or register *) + assert (arg.(0).stamp = res.(0).stamp); + (arg, res) | _ -> (self#makeregs arg, self#makeregs res) diff --git a/asmcomp/riscv/arch.ml b/asmcomp/riscv/arch.ml index 415c4792..3c4bb943 100644 --- a/asmcomp/riscv/arch.ml +++ b/asmcomp/riscv/arch.ml @@ -82,3 +82,11 @@ let print_specific_operation printreg op ppf arg = | Imultsubf true -> fprintf ppf "-f (%a *f %a -f %a)" printreg arg.(0) printreg arg.(1) printreg arg.(2) + +(* Specific operations that are pure *) + +let operation_is_pure _ = true + +(* Specific operations that can raise *) + +let operation_can_raise _ = false diff --git a/asmcomp/riscv/emit.mlp b/asmcomp/riscv/emit.mlp index 524087f9..47b09243 100644 --- a/asmcomp/riscv/emit.mlp +++ b/asmcomp/riscv/emit.mlp @@ -23,32 +23,27 @@ open Reg open Mach open Linear open Emitaux +open Emitenv (* Layout of the stack. The stack is kept 16-aligned. *) -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let contains_calls = ref false - -let frame_size () = +let frame_size env = let size = - !stack_offset + (* Trap frame, outgoing parameters *) - size_int * num_stack_slots.(0) + (* Local int variables *) - size_float * num_stack_slots.(1) + (* Local float variables *) - (if !contains_calls then size_addr else 0) in (* The return address *) + env.stack_offset + (* Trap frame, outgoing parameters *) + size_int * env.f.fun_num_stack_slots.(0) + (* Local int variables *) + size_float * env.f.fun_num_stack_slots.(1) + (* Local float variables *) + (if env.f.fun_contains_calls then size_addr else 0) (* Return address *) + in Misc.align size 16 -let slot_offset loc cls = +let slot_offset env loc cls = match loc with | Local n -> if cls = 0 - then !stack_offset + num_stack_slots.(1) * size_float + n * size_int - else !stack_offset + n * size_float - | Incoming n -> frame_size() + n + then env.stack_offset + env.f.fun_num_stack_slots.(1) * size_float + + n * size_int + else env.stack_offset + n * size_float + | Incoming n -> frame_size env + n | Outgoing n -> n (* Output a symbol *) @@ -82,12 +77,11 @@ let rodata_space = (* Names for special regs *) -let reg_tmp = phys_reg 22 +let reg_tmp = phys_reg 23 let reg_t2 = phys_reg 16 -let reg_domain_state_ptr = phys_reg 23 +let reg_domain_state_ptr = phys_reg 26 let reg_trap = phys_reg 24 let reg_alloc_ptr = phys_reg 25 -let reg_alloc_lim = phys_reg 26 (* Output a pseudo-register *) @@ -143,7 +137,7 @@ let emit_float_store src ofs = (* Record live pointers at call points *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label () in let live_offset = ref [] in Reg.Set.iter @@ -151,65 +145,42 @@ let record_frame_label live dbg = {typ = Val; loc = Reg r} -> live_offset := (r lsl 1) + 1 :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> () ) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in `{emit_label lbl}:\n` -(* Record calls to the GC -- we've moved them out of the way *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame_lbl: label } (* Label of frame descriptor *) - -let call_gc_sites = ref ([] : gc_call list) - let emit_call_gc gc = `{emit_label gc.gc_lbl}:\n`; ` {emit_call "caml_call_gc"}\n`; `{emit_label gc.gc_frame_lbl}:\n`; ` j {emit_label gc.gc_return_lbl}\n` -(* Record calls to caml_ml_array_bound_error. - In debug mode, we maintain one call to caml_ml_array_bound_error - per bound check site. Otherwise, we can share a single call. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame_lbl: label } (* Label of frame descriptor *) - -let bound_error_sites = ref ([] : bound_error_call list) - -let bound_error_label dbg = - if !Clflags.debug || !bound_error_sites = [] then begin +let bound_error_label env dbg = + if !Clflags.debug || env.bound_error_sites = [] then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- { bd_lbl = lbl_bound_error; - bd_frame_lbl = lbl_frame } :: !bound_error_sites; + bd_frame = lbl_frame; } :: env.bound_error_sites; lbl_bound_error end else - let bd = List.hd !bound_error_sites in + let bd = List.hd env.bound_error_sites in bd.bd_lbl let emit_call_bound_error bd = `{emit_label bd.bd_lbl}:\n`; ` {emit_call "caml_ml_array_bound_error"}\n`; - `{emit_label bd.bd_frame_lbl}:\n` - -(* Record floating-point literals *) - -let float_literals = ref ([] : (int64 * int) list) + `{emit_label bd.bd_frame}:\n` (* Names for various instructions *) @@ -256,23 +227,17 @@ let name_for_specific = function | Imultsubf false -> "fmsub.d" | Imultsubf true -> "fnmsub.d" -(* Name of current function *) -let function_name = ref "" - -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 - (* Output the assembly code for an instruction *) -let emit_instr i = +let emit_instr env i = emit_debug_info i.dbg; match i.desc with Lend -> () | Lprologue -> - assert (!prologue_required); - let n = frame_size() in + assert (env.f.fun_prologue_required); + let n = frame_size env in emit_stack_adjustment (-n); - if !contains_calls then store_ra n + if env.f.fun_contains_calls then store_ra n | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in if src.loc <> dst.loc then begin @@ -284,16 +249,16 @@ let emit_instr i = | {loc = Reg _; typ = Float}, {loc = Reg _; typ = (Val | Int | Addr)} -> ` fmv.x.d {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Stack s} -> - let ofs = slot_offset s (register_class dst) in + let ofs = slot_offset env s (register_class dst) in emit_store src ofs | {loc = Reg _; typ = Float}, {loc = Stack s} -> - let ofs = slot_offset s (register_class dst) in + let ofs = slot_offset env s (register_class dst) in emit_float_store src ofs | {loc = Stack s; typ = (Val | Int | Addr)}, {loc = Reg _} -> - let ofs = slot_offset s (register_class src) in + let ofs = slot_offset env s (register_class src) in emit_load dst ofs | {loc = Stack s; typ = Float}, {loc = Reg _} -> - let ofs = slot_offset s (register_class src) in + let ofs = slot_offset env s (register_class src) in emit_float_load dst ofs | {loc = Stack _}, {loc = Stack _} | {loc = Unknown}, _ | _, {loc = Unknown} -> @@ -303,44 +268,44 @@ let emit_instr i = ` li {emit_reg i.res.(0)}, {emit_nativeint n}\n` | Lop(Iconst_float f) -> let lbl = new_label() in - float_literals := (f, lbl) :: !float_literals; + env.float_literals <- {fl=f; lbl} :: env.float_literals; ` fld {emit_reg i.res.(0)}, {emit_label lbl}, {emit_reg reg_tmp}\n` | Lop(Iconst_symbol s) -> ` la {emit_reg i.res.(0)}, {emit_symbol s}\n` | Lop(Icall_ind) -> ` jalr {emit_reg i.arg.(0)}\n`; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Icall_imm {func}) -> ` {emit_call func}\n`; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Itailcall_ind) -> - let n = frame_size() in - if !contains_calls then reload_ra n; + let n = frame_size env in + if env.f.fun_contains_calls then reload_ra n; emit_stack_adjustment n; ` jr {emit_reg i.arg.(0)}\n` | Lop(Itailcall_imm {func}) -> - if func = !function_name then begin - ` j {emit_label !tailrec_entry_point}\n` + if func = env.f.fun_name then begin + ` j {emit_label env.f.fun_tailrec_entry_point_label}\n` end else begin - let n = frame_size() in - if !contains_calls then reload_ra n; + let n = frame_size env in + if env.f.fun_contains_calls then reload_ra n; emit_stack_adjustment n; ` {emit_tail func}\n` end | Lop(Iextcall{func; alloc = true}) -> ` la {emit_reg reg_t2}, {emit_symbol func}\n`; ` {emit_call "caml_c_call"}\n`; - record_frame i.live (Dbg_other i.dbg) + record_frame env i.live (Dbg_other i.dbg) | Lop(Iextcall{func; alloc = false}) -> ` {emit_call func}\n` | Lop(Istackoffset n) -> assert (n mod 16 = 0); emit_stack_adjustment (-n); - stack_offset := !stack_offset + n - | Lop(Iload(Single, Iindexed ofs)) -> + env.stack_offset <- env.stack_offset + n + | Lop(Iload(Single, Iindexed ofs, _mut)) -> ` flw {emit_reg i.res.(0)}, {emit_int ofs}({emit_reg i.arg.(0)})\n`; ` fcvt.d.s {emit_reg i.res.(0)}, {emit_reg i.res.(0)}\n` - | Lop(Iload(chunk, Iindexed ofs)) -> + | Lop(Iload(chunk, Iindexed ofs, _mut)) -> let instr = match chunk with | Byte_unsigned -> "lbu" @@ -370,23 +335,43 @@ let emit_instr i = in ` {emit_string instr} {emit_reg i.arg.(0)}, {emit_int ofs}({emit_reg i.arg.(1)})\n` | Lop(Ialloc {bytes; dbginfo}) -> - let lbl_frame_lbl = record_frame_label i.live (Dbg_alloc dbginfo) in + let lbl_frame_lbl = record_frame_label env i.live (Dbg_alloc dbginfo) in let lbl_after_alloc = new_label () in let lbl_call_gc = new_label () in let n = -bytes in + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in if is_immediate n then ` addi {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, {emit_int n}\n` else begin ` li {emit_reg reg_tmp}, {emit_int n}\n`; ` add {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}\n` end; - ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_alloc_lim}, {emit_label lbl_call_gc}\n`; + ` ld {emit_reg reg_tmp}, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; + ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl_call_gc}\n`; `{emit_label lbl_after_alloc}:\n`; ` addi {emit_reg i.res.(0)}, {emit_reg reg_alloc_ptr}, {emit_int size_addr}\n`; - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame_lbl } :: !call_gc_sites + gc_frame_lbl = lbl_frame_lbl } :: env.call_gc_sites + | Lop(Ipoll { return_label }) -> + let lbl_frame_lbl = record_frame_label env i.live (Dbg_alloc []) in + let lbl_after_poll = match return_label with + | None -> new_label() + | Some(lbl) -> lbl in + let lbl_call_gc = new_label () in + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` ld {emit_reg reg_tmp}, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; + begin match return_label with + | None -> ` bltu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl_call_gc}\n`; + `{emit_label lbl_after_poll}:\n`; + | Some lbl -> ` bgeu {emit_reg reg_alloc_ptr}, {emit_reg reg_tmp}, {emit_label lbl}\n`; + ` j {emit_label lbl_call_gc}\n` + end; + env.call_gc_sites <- + { gc_lbl = lbl_call_gc; + gc_return_lbl = lbl_after_poll; + gc_frame_lbl = lbl_frame_lbl } :: env.call_gc_sites | Lop(Iintop(Icomp cmp)) -> begin match cmp with | Isigned Clt -> @@ -417,7 +402,7 @@ let emit_instr i = ` xori {emit_reg i.res.(0)}, {emit_reg i.res.(0)}, 1\n`; end | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` bleu {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_label lbl}\n` | Lop(Iintop op) -> let instr = name_for_intop op in @@ -437,16 +422,16 @@ let emit_instr i = ` fcvt.d.l {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}\n` | Lop(Iintoffloat) -> ` fcvt.l.d {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, rtz\n` + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific sop) -> let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}, {emit_reg i.arg.(2)}\n` - | Lop (Iname_for_debugger _) -> - () | Lreloadretaddr -> - let n = frame_size () in + let n = frame_size env in reload_ra n | Lreturn -> - let n = frame_size() in + let n = frame_size env in emit_stack_adjustment n; ` ret\n` | Llabel lbl -> @@ -522,28 +507,28 @@ let emit_instr i = | Ladjust_trap_depth { delta_traps } -> (* each trap occupes 16 bytes on the stack *) let delta = 16 * delta_traps in - stack_offset := !stack_offset + delta + env.stack_offset <- env.stack_offset + delta | Lpushtrap {lbl_handler} -> ` la {emit_reg reg_tmp}, {emit_label lbl_handler}\n`; ` addi sp, sp, -16\n`; - stack_offset := !stack_offset + 16; + env.stack_offset <- env.stack_offset + 16; emit_store reg_tmp size_addr; emit_store reg_trap 0; ` mv {emit_reg reg_trap}, sp\n` | Lpoptrap -> emit_load reg_trap 0; ` addi sp, sp, 16\n`; - stack_offset := !stack_offset - 16 + env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular -> let offset = Domainstate.(idx_of_field Domain_backtrace_pos) * 8 in ` sd zero, {emit_int offset}({emit_reg reg_domain_state_ptr})\n`; ` {emit_call "caml_raise_exn"}\n`; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_reraise -> ` {emit_call "caml_raise_exn"}\n`; - record_frame Reg.Set.empty (Dbg_raise i.dbg) + record_frame env Reg.Set.empty (Dbg_raise i.dbg) | Lambda.Raise_notrace -> ` mv sp, {emit_reg reg_trap}\n`; emit_load reg_tmp size_addr; @@ -554,42 +539,32 @@ let emit_instr i = (* Emit a sequence of instructions *) -let rec emit_all = function - | {desc = Lend} -> () | i -> emit_instr i; emit_all i.next +let rec emit_all env = function + | {desc = Lend} -> () | i -> emit_instr env i; emit_all env i.next (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - contains_calls := fundecl.fun_contains_calls; - float_literals := []; + let env = mk_env fundecl in ` .globl {emit_symbol fundecl.fun_name}\n`; ` .type {emit_symbol fundecl.fun_name}, @function\n`; ` {emit_string code_space}\n`; ` .align 2\n`; `{emit_symbol fundecl.fun_name}:\n`; emit_debug_info fundecl.fun_dbg; - emit_all fundecl.fun_body; - List.iter emit_call_gc !call_gc_sites; - List.iter emit_call_bound_error !bound_error_sites; + emit_all env fundecl.fun_body; + List.iter emit_call_gc env.call_gc_sites; + List.iter emit_call_bound_error env.bound_error_sites; ` .size {emit_symbol fundecl.fun_name}, .-{emit_symbol fundecl.fun_name}\n`; (* Emit the float literals *) - if !float_literals <> [] then begin + if env.float_literals <> [] then begin ` {emit_string rodata_space}\n`; ` .align 3\n`; List.iter - (fun (f, lbl) -> + (fun {fl; lbl} -> `{emit_label lbl}:\n`; - emit_float64_directive ".quad" f) - !float_literals; + emit_float64_directive ".quad" fl) + env.float_literals; end (* Emission of data *) diff --git a/asmcomp/riscv/proc.ml b/asmcomp/riscv/proc.ml index 4e30e02b..0b37de4c 100644 --- a/asmcomp/riscv/proc.ml +++ b/asmcomp/riscv/proc.ml @@ -36,12 +36,12 @@ let word_addressed = false a0-a7 0-7 arguments/results s2-s9 8-15 arguments/results (preserved by C) t2-t6 16-20 temporary - t0 21 temporary - t1 22 temporary (used by code generator) - s0 23 domain pointer (preserved by C) + s0 21 general purpose (preserved by C) + t0 22 temporary + t1 23 temporary (used by code generator) s1 24 trap pointer (preserved by C) s10 25 allocation pointer (preserved by C) - s11 26 allocation limit (preserved by C) + s11 26 domain pointer (preserved by C) Floating-point register map --------------------------- @@ -65,11 +65,12 @@ let word_addressed = false *) let int_reg_name = - [| "a0"; "a1"; "a2"; "a3"; "a4"; "a5"; "a6"; "a7"; - "s2"; "s3"; "s4"; "s5"; "s6"; "s7"; "s8"; "s9"; - "t2"; "t3"; "t4"; "t5"; "t6"; - "t0"; "t1"; - "s0"; "s1"; "s10"; "s11" |] + [| "a0"; "a1"; "a2"; "a3"; "a4"; "a5"; "a6"; "a7"; (* 0 - 7 *) + "s2"; "s3"; "s4"; "s5"; "s6"; "s7"; "s8"; "s9"; (* 8 - 15 *) + "t2"; "t3"; "t4"; "t5"; "t6"; (* 16 - 20 *) + "s0"; (* 21 *) + "t0"; "t1"; (* 22 - 23 *) + "s1"; "s10"; "s11" |] (* 24 - 26 *) let float_reg_name = [| "ft0"; "ft1"; "ft2"; "ft3"; "ft4"; "ft5"; "ft6"; "ft7"; @@ -85,7 +86,7 @@ let register_class r = | Val | Int | Addr -> 0 | Float -> 1 -let num_available_registers = [| 22; 32 |] +let num_available_registers = [| 23; 32 |] let first_available_register = [| 0; 100 |] @@ -232,23 +233,24 @@ let regs_are_volatile _ = false (* Registers destroyed by operations *) let destroyed_at_c_call = - (* s0-s11 and fs0-fs11 are callee-save *) + (* s0-s11 and fs0-fs11 are callee-save. However s2 needs to be in this + list since it is clobbered by caml_c_call itself. *) Array.of_list(List.map phys_reg - [0; 1; 2; 3; 4; 5; 6; 7; 16; 17; 18; 19; 20; 21; + [0; 1; 2; 3; 4; 5; 6; 7; 8; 16; 17; 18; 19; 20; 22; 100; 101; 102; 103; 104; 105; 106; 107; 110; 111; 112; 113; 114; 115; 116; 117; 128; 129; 130; 131]) let destroyed_at_alloc = - (* t0-t3 are used for PLT stubs *) - if !Clflags.dlcode then Array.map phys_reg [|16; 17; 18; 19; 20; 21|] + (* t0-t6 are used for PLT stubs *) + if !Clflags.dlcode then Array.map phys_reg [|16; 17; 18; 19; 20; 22|] else [| |] let destroyed_at_oper = function | Iop(Icall_ind | Icall_imm _ | Iextcall{alloc = true; _}) -> all_phys_regs | Iop(Iextcall{alloc = false; _}) -> destroyed_at_c_call - | Iop(Ialloc _) -> destroyed_at_alloc + | Iop(Ialloc _) | Iop(Ipoll _) -> destroyed_at_alloc | Iop(Istore(Single, _, _)) -> [| phys_reg 100 |] - | Iswitch _ -> [| phys_reg 21 |] + | Iswitch _ -> [| phys_reg 22 |] (* t0 *) | _ -> [||] let destroyed_at_raise = all_phys_regs @@ -258,22 +260,12 @@ let destroyed_at_reloadretaddr = [| |] (* Maximal register pressure *) let safe_register_pressure = function - | Iextcall _ -> 15 - | _ -> 22 + | Iextcall _ -> 9 + | _ -> 23 let max_register_pressure = function - | Iextcall _ -> [| 15; 18 |] - | _ -> [| 22; 30 |] - -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false - | Ispecific(Imultaddf _ | Imultsubf _) -> true - | _ -> true + | Iextcall _ -> [| 9; 12 |] + | _ -> [| 23; 30 |] (* Layout of the stack *) @@ -292,8 +284,9 @@ let int_dwarf_reg_numbers = [| 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21; 22; 23; 24; 25; 7; 28; 29; 30; 31; + 8; 5; 6; - 8; 9; 26; 27; + 9; 26; 27; |] let float_dwarf_reg_numbers = diff --git a/asmcomp/riscv/selection.ml b/asmcomp/riscv/selection.ml index c99e1b3c..d56ed90f 100644 --- a/asmcomp/riscv/selection.ml +++ b/asmcomp/riscv/selection.ml @@ -61,4 +61,5 @@ method! select_operation op args dbg = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = + (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/s390x/arch.ml b/asmcomp/s390x/arch.ml index a6353fdf..d755a6de 100644 --- a/asmcomp/s390x/arch.ml +++ b/asmcomp/s390x/arch.ml @@ -87,3 +87,11 @@ let print_specific_operation printreg op ppf arg = | Imultsubf -> fprintf ppf "%a *f %a -f %a" printreg arg.(0) printreg arg.(1) printreg arg.(2) + +(* Specific operations that are pure *) + +let operation_is_pure _ = true + +(* Specific operations that can raise *) + +let operation_can_raise _ = false diff --git a/asmcomp/s390x/emit.mlp b/asmcomp/s390x/emit.mlp index 5088075c..8713a1c0 100644 --- a/asmcomp/s390x/emit.mlp +++ b/asmcomp/s390x/emit.mlp @@ -24,32 +24,24 @@ open Reg open Mach open Linear open Emitaux +open Emitenv -(* Layout of the stack. The stack is kept 8-aligned. *) - -let stack_offset = ref 0 - -let num_stack_slots = Array.make Proc.num_register_classes 0 - -let prologue_required = ref false - -let contains_calls = ref false - -let frame_size () = +let frame_size env = let size = - !stack_offset + (* Trap frame, outgoing parameters *) - size_int * num_stack_slots.(0) + (* Local int variables *) - size_float * num_stack_slots.(1) + (* Local float variables *) - (if !contains_calls then size_addr else 0) in (* The return address *) + env.stack_offset + (* Trap frame, outgoing parameters *) + size_int * env.f.fun_num_stack_slots.(0) + (* Local int variables *) + size_float * env.f.fun_num_stack_slots.(1) + (* Local float variables *) + (if env.f.fun_contains_calls then size_addr else 0) in (* The return address *) Misc.align size 8 -let slot_offset loc cls = +let slot_offset env loc cls = match loc with Local n -> if cls = 0 - then !stack_offset + num_stack_slots.(1) * size_float + n * size_int - else !stack_offset + n * size_float - | Incoming n -> frame_size() + n + then env.stack_offset + + env.f.fun_num_stack_slots.(1) * size_float + n * size_int + else env.stack_offset + n * size_float + | Incoming n -> frame_size env + n | Outgoing n -> n (* Output a symbol *) @@ -99,10 +91,10 @@ let reg_r7 = check_phys_reg 5 "%r7" (* Output a stack reference *) -let emit_stack r = +let emit_stack env r = match r.loc with Stack s -> - let ofs = slot_offset s (register_class r) in `{emit_int ofs}(%r15)` + let ofs = slot_offset env s (register_class r) in `{emit_int ofs}(%r15)` | _ -> fatal_error "Emit.emit_stack" @@ -168,7 +160,7 @@ let emit_set_comp cmp res = (* Record live pointers at call points *) -let record_frame_label live dbg = +let record_frame_label env live dbg = let lbl = new_label() in let live_offset = ref [] in Reg.Set.iter @@ -176,67 +168,49 @@ let record_frame_label live dbg = | {typ = Val; loc = Reg r} -> live_offset := (r lsl 1) + 1 :: !live_offset | {typ = Val; loc = Stack s} as reg -> - live_offset := slot_offset s (register_class reg) :: !live_offset + live_offset := slot_offset env s (register_class reg) :: !live_offset | {typ = Addr} as r -> Misc.fatal_error ("bad GC root " ^ Reg.name r) | _ -> ()) live; - record_frame_descr ~label:lbl ~frame_size:(frame_size()) + record_frame_descr ~label:lbl ~frame_size:(frame_size env) ~live_offset:!live_offset dbg; lbl -let record_frame live dbg = - let lbl = record_frame_label live dbg in +let record_frame env live dbg = + let lbl = record_frame_label env live dbg in `{emit_label lbl}:` -(* Record calls to caml_call_gc, emitted out of line. *) - -type gc_call = - { gc_lbl: label; (* Entry label *) - gc_return_lbl: label; (* Where to branch after GC *) - gc_frame_lbl: label } (* Label of frame descriptor *) - -let call_gc_sites = ref ([] : gc_call list) - let emit_call_gc gc = `{emit_label gc.gc_lbl}:`; emit_call "caml_call_gc"; `{emit_label gc.gc_frame_lbl}: brcl 15, {emit_label gc.gc_return_lbl}\n` -(* Record calls to caml_ml_array_bound_error, emitted out of line. *) - -type bound_error_call = - { bd_lbl: label; (* Entry label *) - bd_frame: label } (* Label of frame descriptor *) - -let bound_error_sites = ref ([] : bound_error_call list) -let bound_error_call = ref 0 - -let bound_error_label dbg = +let bound_error_label env dbg = if !Clflags.debug then begin let lbl_bound_error = new_label() in - let lbl_frame = record_frame_label Reg.Set.empty (Dbg_other dbg) in - bound_error_sites := - { bd_lbl = lbl_bound_error; bd_frame = lbl_frame } :: !bound_error_sites; + let lbl_frame = record_frame_label env Reg.Set.empty (Dbg_other dbg) in + env.bound_error_sites <- + { bd_lbl = lbl_bound_error; bd_frame = lbl_frame; } + :: env.bound_error_sites; lbl_bound_error end else begin - if !bound_error_call = 0 then bound_error_call := new_label(); - !bound_error_call + match env.bound_error_call with + | None -> let lbl = new_label() in + env.bound_error_call <- Some lbl; + lbl + | Some lbl -> lbl end let emit_call_bound_error bd = `{emit_label bd.bd_lbl}:`; emit_call "caml_ml_array_bound_error"; `{emit_label bd.bd_frame}:\n` -let emit_call_bound_errors () = - List.iter emit_call_bound_error !bound_error_sites; - if !bound_error_call > 0 then begin - `{emit_label !bound_error_call}:`; emit_call "caml_ml_array_bound_error"; - end - -(* Record floating-point and large integer literals *) - -let float_literals = ref ([] : (int64 * int) list) -let int_literals = ref ([] : (nativeint * int) list) +let emit_call_bound_errors env = + List.iter emit_call_bound_error env.bound_error_sites; + match env.bound_error_call with + | None -> () + | Some lbl -> + `{emit_label lbl}:`; emit_call "caml_ml_array_bound_error" (* Masks for conditional branches after comparisons *) @@ -298,22 +272,17 @@ let name_for_specific = function Imultaddf -> "madbr" | Imultsubf -> "msdbr" -(* Name of current function *) -let function_name = ref "" -(* Entry point for tail recursive calls *) -let tailrec_entry_point = ref 0 - (* Output the assembly code for an instruction *) -let emit_instr i = +let emit_instr env i = emit_debug_info i.dbg; match i.desc with Lend -> () | Lprologue -> - assert (!prologue_required); - let n = frame_size() in + assert (env.f.fun_prologue_required); + let n = frame_size env in emit_stack_adjust n; - if !contains_calls then + if env.f.fun_contains_calls then ` stg %r14, {emit_int(n - size_addr)}(%r15)\n` | Lop(Imove | Ispill | Ireload) -> let src = i.arg.(0) and dst = i.res.(0) in @@ -324,13 +293,13 @@ let emit_instr i = | {loc = Reg _; typ = Float}, {loc = Reg _; typ = Float} -> ` ldr {emit_reg dst}, {emit_reg src}\n` | {loc = Reg _; typ = (Val | Int | Addr)}, {loc = Stack _} -> - ` stg {emit_reg src}, {emit_stack dst}\n` + ` stg {emit_reg src}, {emit_stack env dst}\n` | {loc = Reg _; typ = Float}, {loc = Stack _} -> - ` std {emit_reg src}, {emit_stack dst}\n` + ` std {emit_reg src}, {emit_stack env dst}\n` | {loc = Stack _; typ = (Val | Int | Addr)}, {loc = Reg _} -> - ` lg {emit_reg dst}, {emit_stack src}\n` + ` lg {emit_reg dst}, {emit_stack env src}\n` | {loc = Stack _; typ = Float}, {loc = Reg _} -> - ` ldy {emit_reg dst}, {emit_stack src}\n` + ` ldy {emit_reg dst}, {emit_stack env src}\n` | (_, _) -> fatal_error "Emit: Imove" end @@ -340,36 +309,36 @@ let emit_instr i = end else if n >= -0x8000_0000n && n <= 0x7FFF_FFFFn then begin ` lgfi {emit_reg i.res.(0)}, {emit_nativeint n}\n`; end else begin - let lbl = new_label() in - int_literals := (n, lbl) :: !int_literals; - ` lgrl {emit_reg i.res.(0)}, {emit_label lbl}\n`; + let n_lbl = new_label() in + env.int_literals <- {n; n_lbl} :: env.int_literals; + ` lgrl {emit_reg i.res.(0)}, {emit_label n_lbl}\n`; end - | Lop(Iconst_float f) -> + | Lop(Iconst_float fl) -> let lbl = new_label() in - float_literals := (f, lbl) :: !float_literals; + env.float_literals <- { fl; lbl } :: env.float_literals; ` larl %r1, {emit_label lbl}\n`; ` ld {emit_reg i.res.(0)}, 0(%r1)\n` | Lop(Iconst_symbol s) -> emit_load_symbol_addr i.res.(0) s | Lop(Icall_ind) -> ` basr %r14, {emit_reg i.arg.(0)}\n`; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Icall_imm { func; }) -> emit_call func; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` | Lop(Itailcall_ind) -> - let n = frame_size() in - if !contains_calls then + let n = frame_size env in + if env.f.fun_contains_calls then ` lg %r14, {emit_int(n - size_addr)}(%r15)\n`; emit_stack_adjust (-n); ` br {emit_reg i.arg.(0)}\n` | Lop(Itailcall_imm { func; }) -> - if func = !function_name then - ` brcl 15, {emit_label !tailrec_entry_point}\n` + if func = env.f.fun_name then + ` brcl 15, {emit_label env.f.fun_tailrec_entry_point_label}\n` else begin - let n = frame_size() in - if !contains_calls then + let n = frame_size env in + if env.f.fun_contains_calls then ` lg %r14, {emit_int(n - size_addr)}(%r15)\n`; emit_stack_adjust (-n); if !pic_code then @@ -383,14 +352,14 @@ let emit_instr i = else begin emit_load_symbol_addr reg_r7 func; emit_call "caml_c_call"; - `{record_frame i.live (Dbg_other i.dbg)}\n` + `{record_frame env i.live (Dbg_other i.dbg)}\n` end | Lop(Istackoffset n) -> emit_stack_adjust n; - stack_offset := !stack_offset + n + env.stack_offset <- env.stack_offset + n - | Lop(Iload(chunk, addr)) -> + | Lop(Iload(chunk, addr, _mut)) -> let loadinstr = match chunk with Byte_unsigned -> "llgc" @@ -424,19 +393,40 @@ let emit_instr i = let lbl_after_alloc = new_label() in let lbl_call_gc = new_label() in let lbl_frame = - record_frame_label i.live (Dbg_alloc dbginfo) + record_frame_label env i.live (Dbg_alloc dbginfo) in - call_gc_sites := + env.call_gc_sites <- { gc_lbl = lbl_call_gc; gc_return_lbl = lbl_after_alloc; - gc_frame_lbl = lbl_frame } :: !call_gc_sites; + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; ` lay %r11, {emit_int(-n)}(%r11)\n`; let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in ` clg %r11, {emit_int offset}(%r10)\n`; ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) `{emit_label lbl_after_alloc}:`; ` la {emit_reg i.res.(0)}, 8(%r11)\n` - + | Lop(Ipoll { return_label }) -> + let offset = Domainstate.(idx_of_field Domain_young_limit) * 8 in + ` clg %r11, {emit_int offset}(%r10)\n`; + let lbl_call_gc = new_label () in + let label_after_gc = match return_label with + | None -> new_label() + | Some(lbl) -> lbl in + let lbl_frame = + record_frame_label env i.live (Dbg_alloc []) + in + begin match return_label with + | None -> ` brcl 4, {emit_label lbl_call_gc}\n`; (* less than *) + | Some return_label -> ` brcl 10, {emit_label return_label}\n`; (* greater or equal *) + end; + env.call_gc_sites <- + { gc_lbl = lbl_call_gc; + gc_return_lbl = label_after_gc; + gc_frame_lbl = lbl_frame; } :: env.call_gc_sites; + begin match return_label with + | None -> `{emit_label label_after_gc}:`; + | Some _ -> ` brcl 15, {emit_label lbl_call_gc}\n`; (* unconditional *) + end | Lop(Iintop Imulh) -> (* Hacker's Delight section 8.3: mul-high-signed(a, b) = mul-high-unsigned(a, b) @@ -480,7 +470,7 @@ let emit_instr i = ` lghi {emit_reg i.res.(0)}, 0\n`; `{emit_label lbl}:\n` | Lop(Iintop (Icheckbound)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in ` clgr {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n`; ` brcl 12, {emit_label lbl}\n` (* branch if unsigned le *) | Lop(Iintop op) -> @@ -500,7 +490,7 @@ let emit_instr i = ` lghi {emit_reg i.res.(0)}, 0\n`; `{emit_label lbl}:\n` | Lop(Iintop_imm(Icheckbound, n)) -> - let lbl = bound_error_label i.dbg in + let lbl = bound_error_label env i.dbg in if n >= 0 then begin ` clgfi {emit_reg i.arg.(0)}, {emit_int n}\n`; ` brcl 12, {emit_label lbl}\n` (* branch if unsigned le *) @@ -539,16 +529,17 @@ let emit_instr i = | Lop(Iintoffloat) -> (* rounding method #5 = round toward 0 *) ` cgdbr {emit_reg i.res.(0)}, 5, {emit_reg i.arg.(0)}\n` + | Lop(Iopaque) -> + assert (i.arg.(0).loc = i.res.(0).loc) | Lop(Ispecific sop) -> assert (i.arg.(2).loc = i.res.(0).loc); let instr = name_for_specific sop in ` {emit_string instr} {emit_reg i.res.(0)}, {emit_reg i.arg.(0)}, {emit_reg i.arg.(1)}\n` - | Lop (Iname_for_debugger _) -> () | Lreloadretaddr -> - let n = frame_size() in + let n = frame_size env in ` lg %r14, {emit_int(n - size_addr)}(%r15)\n` | Lreturn -> - let n = frame_size() in + let n = frame_size env in emit_stack_adjust (-n); ` br %r14\n` | Llabel lbl -> @@ -617,9 +608,9 @@ let emit_instr i = (* each trap occupies 16 bytes on the stack *) let delta = 16 * delta_traps in emit_stack_adjust delta; - stack_offset := !stack_offset + delta + env.stack_offset <- env.stack_offset + delta | Lpushtrap { lbl_handler; } -> - stack_offset := !stack_offset + 16; + env.stack_offset <- env.stack_offset + 16; emit_stack_adjust 16; ` larl %r14, {emit_label lbl_handler}\n`; ` stg %r14, 0(%r15)\n`; @@ -628,7 +619,7 @@ let emit_instr i = | Lpoptrap -> ` lg %r13, {emit_int size_addr}(%r15)\n`; emit_stack_adjust (-16); - stack_offset := !stack_offset - 16 + env.stack_offset <- env.stack_offset - 16 | Lraise k -> begin match k with | Lambda.Raise_regular-> @@ -636,10 +627,10 @@ let emit_instr i = ` lghi %r1, 0\n`; ` stg %r1, {emit_int offset}(%r10)\n`; emit_call "caml_raise_exn"; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n` + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_reraise -> emit_call "caml_raise_exn"; - `{record_frame Reg.Set.empty (Dbg_raise i.dbg)}\n` + `{record_frame env Reg.Set.empty (Dbg_raise i.dbg)}\n` | Lambda.Raise_notrace -> ` lg %r1, 0(%r13)\n`; ` lgr %r15, %r13\n`; @@ -651,53 +642,41 @@ let emit_instr i = (* Emit a sequence of instructions *) -let rec emit_all i = +let rec emit_all env i = match i with {desc = Lend} -> () | _ -> - emit_instr i; - emit_all i.next + emit_instr env i; + emit_all env i.next (* Emission of a function declaration *) let fundecl fundecl = - function_name := fundecl.fun_name; - tailrec_entry_point := fundecl.fun_tailrec_entry_point_label; - stack_offset := 0; - call_gc_sites := []; - bound_error_sites := []; - bound_error_call := 0; - float_literals := []; - int_literals := []; - for i = 0 to Proc.num_register_classes - 1 do - num_stack_slots.(i) <- fundecl.fun_num_stack_slots.(i); - done; - prologue_required := fundecl.fun_prologue_required; - contains_calls := fundecl.fun_contains_calls; + let env = mk_env fundecl in ` .globl {emit_symbol fundecl.fun_name}\n`; emit_debug_info fundecl.fun_dbg; ` .type {emit_symbol fundecl.fun_name}, @function\n`; emit_string code_space; ` .align 8\n`; `{emit_symbol fundecl.fun_name}:\n`; - emit_all fundecl.fun_body; + emit_all env fundecl.fun_body; (* Emit the glue code to call the GC *) - List.iter emit_call_gc !call_gc_sites; + List.iter emit_call_gc env.call_gc_sites; (* Emit the glue code to handle bound errors *) - emit_call_bound_errors(); + emit_call_bound_errors env; (* Emit the numeric literals *) - if !float_literals <> [] || !int_literals <> [] then begin + if env.float_literals <> [] || env.int_literals <> [] then begin emit_string rodata_space; ` .align 8\n`; List.iter - (fun (f, lbl) -> + (fun {fl; lbl} -> `{emit_label lbl}:`; - emit_float64_directive ".quad" f) - !float_literals; + emit_float64_directive ".quad" fl) + env.float_literals; List.iter - (fun (n, lbl) -> - `{emit_label lbl}: .quad {emit_nativeint n}\n`) - !int_literals + (fun {n; n_lbl} -> + `{emit_label n_lbl}: .quad {emit_nativeint n}\n`) + env.int_literals end (* Emission of data *) diff --git a/asmcomp/s390x/proc.ml b/asmcomp/s390x/proc.ml index d9aa9ea3..1319359f 100644 --- a/asmcomp/s390x/proc.ml +++ b/asmcomp/s390x/proc.ml @@ -209,16 +209,6 @@ let max_register_pressure = function Iextcall _ -> [| 4; 7 |] | _ -> [| 9; 15 |] -(* Pure operations (without any side effect besides updating their result - registers). *) - -let op_is_pure = function - | Icall_ind | Icall_imm _ | Itailcall_ind | Itailcall_imm _ - | Iextcall _ | Istackoffset _ | Istore _ | Ialloc _ - | Iintop(Icheckbound) | Iintop_imm(Icheckbound, _) -> false - | Ispecific(Imultaddf | Imultsubf) -> true - | _ -> true - (* Layout of the stack *) let frame_required fd = diff --git a/asmcomp/s390x/scheduling.ml b/asmcomp/s390x/scheduling.ml index a766d6a3..a3098470 100644 --- a/asmcomp/s390x/scheduling.ml +++ b/asmcomp/s390x/scheduling.ml @@ -35,7 +35,7 @@ inherit Schedgen.scheduler_generic method oper_latency = function Ireload -> 4 - | Iload(_, _) -> 4 + | Iload(_, _, _) -> 4 | Iconst_float _ -> 4 (* turned into a load *) | Iintop(Imul) -> 10 | Iintop_imm(Imul, _) -> 10 @@ -49,7 +49,7 @@ method! reload_retaddr_latency = 4 (* Issue cycles. Rough approximations. *) method oper_issue_cycles = function - | Ialloc _ -> 4 + | Ialloc _ | Ipoll _ -> 4 | Iintop(Imulh) -> 15 | Iintop(Idiv|Imod) -> 20 | Iintop(Icomp _) -> 4 diff --git a/asmcomp/s390x/selection.ml b/asmcomp/s390x/selection.ml index 604fd7a3..96bd6a99 100644 --- a/asmcomp/s390x/selection.ml +++ b/asmcomp/s390x/selection.ml @@ -114,4 +114,5 @@ method! insert_op_debug env op dbg rs rd = end -let fundecl f = (new selector)#emit_fundecl f +let fundecl ~future_funcnames f = + (new selector)#emit_fundecl ~future_funcnames f diff --git a/asmcomp/schedgen.ml b/asmcomp/schedgen.ml index e138930e..942e35e8 100644 --- a/asmcomp/schedgen.ml +++ b/asmcomp/schedgen.ml @@ -121,7 +121,7 @@ let rec longest_path critical_outputs node = node.length <- List.fold_left (fun len (son, delay) -> - max len (longest_path critical_outputs son + delay)) + Int.max len (longest_path critical_outputs son + delay)) 0 sons end; node.length @@ -135,7 +135,7 @@ let rec remove_instr node = function (* We treat Lreloadretaddr as a word-sized load *) -let some_load = (Iload(Cmm.Word_int, Arch.identity_addressing)) +let some_load = (Iload(Cmm.Word_int, Arch.identity_addressing, Mutable)) (* The generic scheduler *) @@ -154,7 +154,7 @@ method oper_in_basic_block = function | Itailcall_imm _ -> false | Iextcall _ -> false | Istackoffset _ -> false - | Ialloc _ -> false + | Ialloc _ | Ipoll _ -> false | _ -> true (* Determine whether an instruction ends a basic block or not *) @@ -181,7 +181,7 @@ method is_store = function | _ -> false method is_load = function - Iload(_, _) -> true + Iload(_, _, _) -> true | _ -> false method is_checkbound = function diff --git a/asmcomp/selectgen.ml b/asmcomp/selectgen.ml index 4571c340..d2498276 100644 --- a/asmcomp/selectgen.ml +++ b/asmcomp/selectgen.ml @@ -85,6 +85,7 @@ let oper_result_type = function | Cintoffloat -> typ_int | Craise _ -> typ_void | Ccheckbound -> typ_void + | Copaque -> typ_val (* Infer the size in bytes of the result of an expression whose evaluation may be deferred (cf. [emit_parts]). *) @@ -322,7 +323,7 @@ method is_simple_expr = function | Cop(op, args, _) -> begin match op with (* The following may have side effects *) - | Capply _ | Cextcall _ | Calloc | Cstore _ | Craise _ -> false + | Capply _ | Cextcall _ | Calloc | Cstore _ | Craise _ | Copaque -> false (* The remaining operations are simple if their args are *) | Cload _ | Caddi | Csubi | Cmuli | Cmulhi | Cdivi | Cmodi | Cand | Cor | Cxor | Clsl | Clsr | Casr | Ccmpi _ | Caddv | Cadda | Ccmpa _ | Cnegf @@ -361,7 +362,7 @@ method effects_of exp = | Cop (op, args, _) -> let from_op = match op with - | Capply _ | Cextcall _ -> EC.arbitrary + | Capply _ | Cextcall _ | Copaque -> EC.arbitrary | Calloc -> EC.none | Cstore _ -> EC.effect_only Effect.Arbitrary | Craise _ | Ccheckbound -> EC.effect_only Effect.Raise @@ -414,9 +415,9 @@ method mark_instr = function self#mark_call | Iop (Itailcall_ind | Itailcall_imm _) -> self#mark_tailcall - | Iop (Ialloc _) -> - self#mark_call (* caml_alloc*, caml_garbage_collection *) - | Iop (Iintop(Icheckbound) | Iintop_imm(Icheckbound, _)) -> + | Iop (Ialloc _) | Iop (Ipoll _) -> + self#mark_call (* caml_alloc*, caml_garbage_collection (incl. polls) *) + | Iop (Iintop (Icheckbound) | Iintop_imm(Icheckbound, _)) -> self#mark_c_tailcall (* caml_ml_array_bound_error *) | Iraise raise_kind -> begin match raise_kind with @@ -442,9 +443,9 @@ method select_operation op args _dbg = (Icall_ind, args) | (Cextcall(func, ty_res, ty_args, alloc), _) -> Iextcall { func; ty_res; ty_args; alloc; }, args - | (Cload (chunk, _mut), [arg]) -> + | (Cload (chunk, mut), [arg]) -> let (addr, eloc) = self#select_addressing chunk arg in - (Iload(chunk, addr), [eloc]) + (Iload(chunk, addr, mut), [eloc]) | (Cstore (chunk, init), [arg1; arg2]) -> let (addr, eloc) = self#select_addressing chunk arg1 in let is_assign = @@ -555,12 +556,15 @@ method insert_debug _env desc dbg arg res = method insert _env desc arg res = instr_seq <- instr_cons desc arg res instr_seq -method extract = +method extract_onto o = let rec extract res i = if i == dummy_instr - then res - else extract {i with next = res} i.next in - extract (end_instr ()) instr_seq + then res + else extract {i with next = res} i.next in + extract o instr_seq + +method extract = + self#extract_onto (end_instr ()) (* Insert a sequence of moves from one pseudoreg set to another. *) @@ -569,7 +573,7 @@ method insert_move env src dst = self#insert env (Iop Imove) [|src|] [|dst|] method insert_moves env src dst = - for i = 0 to min (Array.length src) (Array.length dst) - 1 do + for i = 0 to Stdlib.Int.min (Array.length src) (Array.length dst) - 1 do self#insert_move env src.(i) dst.(i) done @@ -674,6 +678,13 @@ method emit_expr (env:environment) exp = dbg, Cconst_int (1, dbg), dbg, Cconst_int (0, dbg), dbg)) + | Cop(Copaque, args, dbg) -> + begin match self#emit_parts_list env args with + None -> None + | Some (simple_args, env) -> + let rs = self#emit_tuple env simple_args in + Some (self#insert_op_debug env Iopaque dbg rs rs) + end | Cop(op, args, dbg) -> begin match self#emit_parts_list env args with None -> None @@ -1150,7 +1161,7 @@ method private emit_tail_sequence env exp = (* Sequentialization of a function definition *) -method emit_fundecl f = +method emit_fundecl ~future_funcnames f = current_function_name := f.Cmm.fun_name; let rargs = List.map @@ -1162,13 +1173,23 @@ method emit_fundecl f = List.fold_right2 (fun (id, _ty) r env -> env_add id r env) f.Cmm.fun_args rargs env_empty in - self#insert_moves env loc_arg rarg; self#emit_tail env f.Cmm.fun_body; let body = self#extract in - instr_iter (fun instr -> self#mark_instr instr.Mach.desc) body; + instr_seq <- dummy_instr; + self#insert_moves env loc_arg rarg; + let polled_body = + if Polling.requires_prologue_poll ~future_funcnames + ~fun_name:f.Cmm.fun_name body + then + instr_cons (Iop(Ipoll { return_label = None })) [||] [||] body + else + body + in + let body_with_prologue = self#extract_onto polled_body in + instr_iter (fun instr -> self#mark_instr instr.Mach.desc) body_with_prologue; { fun_name = f.Cmm.fun_name; fun_args = loc_arg; - fun_body = body; + fun_body = body_with_prologue; fun_codegen_options = f.Cmm.fun_codegen_options; fun_dbg = f.Cmm.fun_dbg; fun_num_stack_slots = Array.make Proc.num_register_classes 0; diff --git a/asmcomp/selectgen.mli b/asmcomp/selectgen.mli index c657e109..d7147192 100644 --- a/asmcomp/selectgen.mli +++ b/asmcomp/selectgen.mli @@ -63,7 +63,7 @@ class virtual selector_generic : object (* The following methods must or can be overridden by the processor description *) method is_immediate : Mach.integer_operation -> int -> bool - (* Must be overriden to indicate whether a constant is a suitable + (* Must be overridden to indicate whether a constant is a suitable immediate operand to the given integer arithmetic instruction. The default implementation handles shifts by immediate amounts, but produces no immediate operations otherwise. *) @@ -139,12 +139,14 @@ class virtual selector_generic : object above; overloading this is useful if Ispecific instructions need marking *) - (* The following method is the entry point and should not be overridden. *) - method emit_fundecl : Cmm.fundecl -> Mach.fundecl + (* The following method is the entry point and should not be overridden *) + method emit_fundecl : future_funcnames:Misc.Stdlib.String.Set.t + -> Cmm.fundecl -> Mach.fundecl (* The following methods should not be overridden. They cannot be declared "private" in the current implementation because they are not always applied to "self", but ideally they should be private. *) + method extract_onto : Mach.instruction -> Mach.instruction method extract : Mach.instruction method insert : environment -> Mach.instruction_desc -> Reg.t array -> Reg.t array -> unit diff --git a/asmcomp/selection.mli b/asmcomp/selection.mli index 3c055fe0..0a0680bd 100644 --- a/asmcomp/selection.mli +++ b/asmcomp/selection.mli @@ -16,4 +16,5 @@ (* Selection of pseudo-instructions, assignment of pseudo-registers, sequentialization. *) -val fundecl: Cmm.fundecl -> Mach.fundecl +val fundecl: future_funcnames:Misc.Stdlib.String.Set.t + -> Cmm.fundecl -> Mach.fundecl diff --git a/asmcomp/spill.ml b/asmcomp/spill.ml index 870c46f6..195974b6 100644 --- a/asmcomp/spill.ml +++ b/asmcomp/spill.ml @@ -124,13 +124,15 @@ let add_reloads regset i = (fun r i -> instr_cons (Iop Ireload) [|spill_reg r|] [|r|] i) regset i -let reload_at_exit = ref [] +let reload_at_exit : (int, Reg.Set.t) Hashtbl.t = Hashtbl.create 20 -let find_reload_at_exit k = - try - List.assoc k !reload_at_exit - with - | Not_found -> Misc.fatal_error "Spill.find_reload_at_exit" +let get_reload_at_exit k = + match Hashtbl.find_opt reload_at_exit k with + | None -> Reg.Set.empty + | Some s -> s + +let set_reload_at_exit k s = + Hashtbl.replace reload_at_exit k s let rec reload i before = incr current_date; @@ -169,7 +171,7 @@ let rec reload i before = let date_ifso = !current_date in current_date := date_fork; let (new_ifnot, after_ifnot) = reload ifnot at_fork in - current_date := max date_ifso !current_date; + current_date := Int.max date_ifso !current_date; let (new_next, finally) = reload i.next (Reg.Set.union after_ifso after_ifnot) in let new_i = @@ -189,7 +191,7 @@ let rec reload i before = current_date := date_fork; let (new_c, after_c) = reload c at_fork in after_cases := Reg.Set.union !after_cases after_c; - date_join := max !date_join !current_date; + date_join := Int.max !date_join !current_date; new_c) cases in current_date := !date_join; @@ -199,31 +201,32 @@ let rec reload i before = i.arg i.res new_next), finally) | Icatch(rec_flag, handlers, body) -> - let new_sets = List.map - (fun (nfail, _) -> nfail, ref Reg.Set.empty) handlers in - let previous_reload_at_exit = !reload_at_exit in - reload_at_exit := new_sets @ !reload_at_exit ; let (new_body, after_body) = reload body before in let rec fixpoint () = - let at_exits = List.map (fun (nfail, set) -> (nfail, !set)) new_sets in + let at_exits = + List.map (fun (nfail, _) -> (nfail, get_reload_at_exit nfail)) + handlers in let res = - List.map2 (fun (nfail', handler) (nfail, at_exit) -> + List.map2 + (fun (nfail', handler) (nfail, at_exit) -> assert(nfail = nfail'); - reload handler at_exit) handlers at_exits in + reload handler at_exit) + handlers at_exits in match rec_flag with | Cmm.Nonrecursive -> res | Cmm.Recursive -> - let equal = List.for_all2 (fun (nfail', at_exit) (nfail, new_set) -> - assert(nfail = nfail'); - Reg.Set.equal at_exit !new_set) - at_exits new_sets in + let equal = + List.for_all2 + (fun (nfail', _) (nfail, at_exit) -> + assert(nfail = nfail'); + Reg.Set.equal at_exit (get_reload_at_exit nfail)) + handlers at_exits in if equal then res else fixpoint () in let res = fixpoint () in - reload_at_exit := previous_reload_at_exit; let union = List.fold_left (fun acc (_, after_handler) -> Reg.Set.union acc after_handler) after_body res in @@ -235,8 +238,8 @@ let rec reload i before = (Icatch(rec_flag, new_handlers, new_body)) i.arg i.res new_next, finally) | Iexit nfail -> - let set = find_reload_at_exit nfail in - set := Reg.Set.union !set before; + set_reload_at_exit nfail + (Reg.Set.union (get_reload_at_exit nfail) before); (i, Reg.Set.empty) | Itrywith(body, handler) -> let (new_body, after_body) = reload body before in @@ -268,17 +271,15 @@ let rec reload i before = NB ter: is it the same thing for catch bodies ? *) -(* CR mshinwell for pchambart: Try to test the new algorithms for dealing - with Icatch. *) +let spill_at_exit : (int, Reg.Set.t) Hashtbl.t = Hashtbl.create 20 -let spill_at_exit = ref [] -let find_spill_at_exit k = - try - let used, set = List.assoc k !spill_at_exit in - used := true; - set - with - | Not_found -> Misc.fatal_error "Spill.find_spill_at_exit" +let get_spill_at_exit k = + match Hashtbl.find_opt spill_at_exit k with + | None -> Reg.Set.empty + | Some s -> s + +let set_spill_at_exit k s = + Hashtbl.replace spill_at_exit k s let spill_at_raise = ref Reg.Set.empty let inside_loop = ref false @@ -301,16 +302,13 @@ let rec spill i finally = let before1 = Reg.diff_set_array after i.res in (instr_cons i.desc i.arg i.res new_next, Reg.add_set_array before1 i.res) - | Iop _ -> + | Iop op -> let (new_next, after) = spill i.next finally in let before1 = Reg.diff_set_array after i.res in let before = - match i.desc with - Iop(Icall_ind) | Iop(Icall_imm _) | Iop(Iextcall _) | Iop(Ialloc _) - | Iop(Iintop (Icheckbound)) | Iop(Iintop_imm(Icheckbound, _)) -> - Reg.Set.union before1 !spill_at_raise - | _ -> - before1 in + if operation_can_raise op + then Reg.Set.union before1 !spill_at_raise + else before1 in (instr_cons_debug i.desc i.arg i.res i.dbg (add_spills (Reg.inter_set_array after i.res) new_next), before) @@ -357,45 +355,30 @@ let rec spill i finally = let (new_next, at_join) = spill i.next finally in let saved_inside_catch = !inside_catch in inside_catch := true ; - let previous_spill_at_exit = !spill_at_exit in - let spill_at_exit_add at_exits = List.map2 - (fun (nfail,_) at_exit -> nfail, (ref false, at_exit)) - handlers at_exits - in - let rec fixpoint at_exits = - let spill_at_exit_add = spill_at_exit_add at_exits in - spill_at_exit := spill_at_exit_add @ !spill_at_exit; + let rec fixpoint () = let res = - List.map (fun (_, handler) -> spill handler at_join) handlers - in - spill_at_exit := previous_spill_at_exit; - match rec_flag with - | Cmm.Nonrecursive -> - res - | Cmm.Recursive -> - let equal = - List.for_all2 - (fun (_new_handler, new_at_exit) (_, (used, at_exit)) -> - Reg.Set.equal at_exit new_at_exit || not !used) - res spill_at_exit_add in - if equal - then res - else fixpoint (List.map snd res) + List.map (fun (_, handler) -> spill handler at_join) handlers in + let update changed (k, _handler) (_new_handler, before_handler) = + if Reg.Set.equal before_handler (get_spill_at_exit k) + then changed + else (set_spill_at_exit k before_handler; true) in + let changed = + List.fold_left2 update false handlers res in + if rec_flag = Cmm.Recursive && changed + then fixpoint () + else res in - let res = fixpoint (List.map (fun _ -> Reg.Set.empty) handlers) in + let res = fixpoint () in inside_catch := saved_inside_catch ; - let spill_at_exit_add = spill_at_exit_add (List.map snd res) in - spill_at_exit := spill_at_exit_add @ !spill_at_exit; let (new_body, before) = spill body at_join in - spill_at_exit := previous_spill_at_exit; let new_handlers = List.map2 - (fun (nfail, _) (handler, _) -> nfail, handler) + (fun (nfail, _) (new_handler, _) -> (nfail, new_handler)) handlers res in (instr_cons (Icatch(rec_flag, new_handlers, new_body)) i.arg i.res new_next, before) | Iexit nfail -> - (i, find_spill_at_exit nfail) + (i, get_spill_at_exit nfail) | Itrywith(body, handler) -> let (new_next, at_join) = spill i.next finally in let (new_handler, before_handler) = spill handler at_join in @@ -414,18 +397,17 @@ let reset () = spill_env := Reg.Map.empty; use_date := Reg.Map.empty; current_date := 0; - destroyed_at_fork := [] + destroyed_at_fork := []; + Hashtbl.clear reload_at_exit; + Hashtbl.clear spill_at_exit let fundecl f = reset (); - let (body1, _) = reload f.fun_body Reg.Set.empty in let (body2, tospill_at_entry) = spill body1 Reg.Set.empty in let new_body = add_spills (Reg.inter_set_array tospill_at_entry f.fun_args) body2 in - spill_env := Reg.Map.empty; - use_date := Reg.Map.empty; - destroyed_at_fork := []; + reset (); { fun_name = f.fun_name; fun_args = f.fun_args; fun_body = new_body; diff --git a/boot/menhir/menhirLib.ml b/boot/menhir/menhirLib.ml index 8e1dc20f..f1782933 100644 --- a/boot/menhir/menhirLib.ml +++ b/boot/menhir/menhirLib.ml @@ -43,7 +43,7 @@ let rec uniq1 cmp x ys = [] | y :: ys -> if cmp x y = 0 then - uniq1 compare x ys + uniq1 cmp x ys else y :: uniq1 cmp y ys @@ -85,7 +85,6 @@ let rec foldr f xs accu = accu | Cons (x, xs) -> f x (foldr f xs accu) - end module Convert = struct (******************************************************************************) @@ -291,9 +290,9 @@ module type INCREMENTAL_ENGINE = sig | Rejected (* [offer] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [InputNeeded env]. [offer] expects the - old checkpoint as well as a new token and produces a new checkpoint. It does not - raise any exception. *) + itself with a checkpoint of the form [InputNeeded env]. [offer] expects + the old checkpoint as well as a new token and produces a new checkpoint. + It does not raise any exception. *) val offer: 'a checkpoint -> @@ -302,10 +301,30 @@ module type INCREMENTAL_ENGINE = sig (* [resume] allows the user to resume the parser after it has suspended itself with a checkpoint of the form [AboutToReduce (env, prod)] or - [HandlingError env]. [resume] expects the old checkpoint and produces a new - checkpoint. It does not raise any exception. *) + [HandlingError env]. [resume] expects the old checkpoint and produces a + new checkpoint. It does not raise any exception. *) + + (* The optional argument [strategy] influences the manner in which [resume] + deals with checkpoints of the form [ErrorHandling _]. Its default value + is [`Legacy]. It can be briefly described as follows: + + - If the [error] token is used only to report errors (that is, if the + [error] token appears only at the end of a production, whose semantic + action raises an exception) then the simplified strategy should be + preferred. (This includes the case where the [error] token does not + appear at all in the grammar.) + + - If the [error] token is used to recover after an error, or if + perfect backward compatibility is required, the legacy strategy + should be selected. + + More details on these strategies appear in the file [Engine.ml]. *) + + type strategy = + [ `Legacy | `Simplified ] val resume: + ?strategy:strategy -> 'a checkpoint -> 'a checkpoint @@ -315,7 +334,8 @@ module type INCREMENTAL_ENGINE = sig type supplier = unit -> token * position * position - (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) + (* A pair of a lexer and a lexing buffer can be easily turned into a + supplier. *) val lexer_lexbuf_to_supplier: (Lexing.lexbuf -> token) -> @@ -330,9 +350,11 @@ module type INCREMENTAL_ENGINE = sig (* [loop supplier checkpoint] begins parsing from [checkpoint], reading tokens from [supplier]. It continues parsing until it reaches a checkpoint of the form [Accepted v] or [Rejected]. In the former case, it - returns [v]. In the latter case, it raises the exception [Error]. *) + returns [v]. In the latter case, it raises the exception [Error]. + The optional argument [strategy], whose default value is [Legacy], + is passed to [resume] and influences the error-handling strategy. *) - val loop: supplier -> 'a checkpoint -> 'a + val loop: ?strategy:strategy -> supplier -> 'a checkpoint -> 'a (* [loop_handle succeed fail supplier checkpoint] begins parsing from [checkpoint], reading tokens from [supplier]. It continues parsing until @@ -341,10 +363,10 @@ module type INCREMENTAL_ENGINE = sig observed first). In the former case, it calls [succeed v]. In the latter case, it calls [fail] with this checkpoint. It cannot raise [Error]. - This means that Menhir's traditional error-handling procedure (which pops - the stack until a state that can act on the [error] token is found) does - not get a chance to run. Instead, the user can implement her own error - handling code, in the [fail] continuation. *) + This means that Menhir's error-handling procedure does not get a chance + to run. For this reason, there is no [strategy] parameter. Instead, the + user can implement her own error handling code, in the [fail] + continuation. *) val loop_handle: ('a -> 'answer) -> @@ -1012,6 +1034,7 @@ module type MONOLITHIC_ENGINE = sig exception Error val entry: + (* strategy: *) [ `Legacy | `Simplified ] -> (* see [IncrementalEngine] *) state -> (Lexing.lexbuf -> token) -> Lexing.lexbuf -> @@ -1137,6 +1160,74 @@ module Make (T : TABLE) = struct (* ------------------------------------------------------------------------ *) + (* As of 2020/12/16, we introduce a choice between multiple error handling + strategies. *) + + (* Regardless of the strategy, when a syntax error is encountered, the + function [initiate] is called, a [HandlingError] checkpoint is produced, + and (after resuming) the function [error] is called. This function checks + whether the current state allows shifting, reducing, or neither, when the + lookahead token is [error]. Its behavior, then, depends on the strategy, + as follows. *) + + (* In the legacy strategy, which until now was the only strategy, + + - If shifting is possible, then a [Shifting] checkpoint is produced, + whose field [please_discard] is [true], so (after resuming) an + [InputNeeded] checkpoint is produced, and (after a new token + has been provided) the parser leaves error-handling mode and + returns to normal mode. + + - If reducing is possible, then one or more reductions are performed. + Default reductions are announced via [AboutToReduce] checkpoints, + whereas ordinary reductions are performed silently. (It is unclear + why this is so.) The parser remains in error-handling mode, so + another [HandlingError] checkpoint is produced, and the function + [error] is called again. + + - If neither action is possible and if the stack is nonempty, then a + cell is popped off the stack, then a [HandlingError] checkpoint is + produced, and the function [error] is called again. + + - If neither action is possible and if the stack is empty, then the + parse dies with a [Reject] checkpoint. *) + + (* The simplified strategy differs from the legacy strategy as follows: + + - When shifting, a [Shifting] checkpoint is produced, whose field + [please_discard] is [false], so the parser does not request another + token, and the parser remains in error-handling mode. (If the + destination state of this shift transition has a default reduction, + then the parser will perform this reduction as its next step.) + + - When reducing, all reductions are announced by [AboutToReduce] + checkpoints. + + - If neither shifting [error] nor reducing on [error] is possible, + then the parser dies with a [Reject] checkpoint. (The parser does + not attempt to pop cells off the stack one by one.) + + This simplified strategy is appropriate when the grammar uses the [error] + token in a limited way, where the [error] token always appears at the end + of a production whose semantic action raises an exception (whose purpose + is to signal a syntax error and perhaps produce a custom message). Then, + the parser must not request one token past the syntax error. (In a REPL, + that would be undesirable.) It must perform as many reductions on [error] + as possible, then (if possible) shift the [error] token and move to a new + state where a default reduction will be possible. (Because the [error] + token always appears at the end of a production, no other action can + exist in that state, so a default reduction must exist.) The semantic + action raises an exception, and that is it. *) + + (* Let us note that it is also possible to perform no error handling at + all, or to perform customized error handling, by stopping as soon as + the first [ErrorHandling] checkpoint appears. *) + + type strategy = + [ `Legacy | `Simplified ] + + (* ------------------------------------------------------------------------ *) + (* In the code-based back-end, the [run] function is sometimes responsible for pushing a new cell on the stack. This is motivated by code sharing concerns. In this interpreter, there is no such concern; [run]'s caller @@ -1222,8 +1313,9 @@ module Make (T : TABLE) = struct (* Note that, if [please_discard] was true, then we have just called [discard], so the lookahead token cannot be [error]. *) - (* Returning [HandlingError env] is equivalent to calling [error env] - directly, except it allows the user to regain control. *) + (* Returning [HandlingError env] is like calling [error ~strategy env] + directly, except it allows the user to regain control and choose an + error-handling strategy. *) if env.error then begin if log then @@ -1374,7 +1466,7 @@ module Make (T : TABLE) = struct (* [error] handles errors. *) - and error env = + and error ~strategy env = assert env.error; (* Consult the column associated with the [error] pseudo-token in the @@ -1384,39 +1476,64 @@ module Make (T : TABLE) = struct env.current (* determines a row *) T.error_terminal (* determines a column *) T.error_value - error_shift (* shift continuation *) - error_reduce (* reduce continuation *) - error_fail (* failure continuation *) + (error_shift ~strategy) (* shift continuation *) + (error_reduce ~strategy) (* reduce continuation *) + (error_fail ~strategy) (* failure continuation *) env - and error_shift env please_discard terminal value s' = - - (* Here, [terminal] is [T.error_terminal], - and [value] is [T.error_value]. *) - + and error_shift ~strategy env please_discard terminal value s' = assert (terminal = T.error_terminal && value = T.error_value); (* This state is capable of shifting the [error] token. *) if log then Log.handling_error env.current; + + (* In the simplified strategy, we change [please_discard] to [false], + which means that we won't request the next token and (therefore) + we will remain in error-handling mode after shifting the [error] + token. *) + + let please_discard = + match strategy with `Legacy -> please_discard | `Simplified -> false + in + shift env please_discard terminal value s' - and error_reduce env prod = + and error_reduce ~strategy env prod = (* This state is capable of performing a reduction on [error]. *) if log then Log.handling_error env.current; - reduce env prod - (* Intentionally calling [reduce] instead of [announce_reduce]. - It does not seem very useful, and it could be confusing, to - expose the reduction steps taken during error handling. *) - and error_fail env = + (* In the legacy strategy, we call [reduce] instead of [announce_reduce], + apparently in an attempt to hide the reduction steps performed during + error handling. This seems inconsistent, as the default reduction steps + are still announced. In the simplified strategy, all reductions are + announced. *) + + match strategy with + | `Legacy -> + reduce env prod + | `Simplified -> + announce_reduce env prod + + and error_fail ~strategy env = - (* This state is unable to handle errors. Attempt to pop a stack - cell. *) + (* This state is unable to handle errors. In the simplified strategy, we + die immediately. In the legacy strategy, we attempt to pop a stack + cell. (This amounts to forgetting part of what we have just read, in + the hope of reaching a state where we can shift the [error] token and + resume parsing in normal mode. Forgetting past input is not appropriate + when the goal is merely to produce a good syntax error message.) *) + + match strategy with + | `Simplified -> + Rejected + | `Legacy -> + + (* Attempt to pop a stack cell. *) let cell = env.stack in let next = cell.next in @@ -1526,9 +1643,11 @@ module Make (T : TABLE) = struct | _ -> invalid_arg "offer expects InputNeeded" - let resume : 'a . 'a checkpoint -> 'a checkpoint = function + let resume : 'a . ?strategy:strategy -> 'a checkpoint -> 'a checkpoint = + fun ?(strategy=`Legacy) checkpoint -> + match checkpoint with | HandlingError env -> - Obj.magic error env + Obj.magic error ~strategy env | Shifting (_, env, please_discard) -> Obj.magic run env please_discard | AboutToReduce (env, prod) -> @@ -1572,8 +1691,8 @@ module Make (T : TABLE) = struct All of the cheating resides in the types assigned to [offer] and [handle] above. *) - let rec loop : 'a . supplier -> 'a checkpoint -> 'a = - fun read checkpoint -> + let rec loop : 'a . ?strategy:strategy -> supplier -> 'a checkpoint -> 'a = + fun ?(strategy=`Legacy) read checkpoint -> match checkpoint with | InputNeeded _ -> (* The parser needs a token. Request one from the lexer, @@ -1581,14 +1700,14 @@ module Make (T : TABLE) = struct checkpoint. Then, repeat. *) let triple = read() in let checkpoint = offer checkpoint triple in - loop read checkpoint + loop ~strategy read checkpoint | Shifting _ | AboutToReduce _ | HandlingError _ -> (* The parser has suspended itself, but does not need new input. Just resume the parser. Then, repeat. *) - let checkpoint = resume checkpoint in - loop read checkpoint + let checkpoint = resume ~strategy checkpoint in + loop ~strategy read checkpoint | Accepted v -> (* The parser has succeeded and produced a semantic value. Return this semantic value to the user. *) @@ -1597,9 +1716,9 @@ module Make (T : TABLE) = struct (* The parser rejects this input. Raise an exception. *) raise Error - let entry (s : state) lexer lexbuf : semantic_value = + let entry strategy (s : state) lexer lexbuf : semantic_value = let initial = lexbuf.Lexing.lex_curr_p in - loop (lexer_lexbuf_to_supplier lexer lexbuf) (start s initial) + loop ~strategy (lexer_lexbuf_to_supplier lexer lexbuf) (start s initial) (* ------------------------------------------------------------------------ *) @@ -1615,6 +1734,8 @@ module Make (T : TABLE) = struct loop_handle succeed fail read checkpoint | Shifting _ | AboutToReduce _ -> + (* Which strategy is passed to [resume] here is irrelevant, + since this checkpoint is not [HandlingError _]. *) let checkpoint = resume checkpoint in loop_handle succeed fail read checkpoint | HandlingError _ @@ -1648,6 +1769,8 @@ module Make (T : TABLE) = struct loop_handle_undo succeed fail read (inputneeded, checkpoint) | Shifting _ | AboutToReduce _ -> + (* Which strategy is passed to [resume] here is irrelevant, + since this checkpoint is not [HandlingError _]. *) let checkpoint = resume checkpoint in loop_handle_undo succeed fail read (inputneeded, checkpoint) | HandlingError _ @@ -1681,6 +1804,8 @@ module Make (T : TABLE) = struct Some env | AboutToReduce _ -> (* The parser wishes to reduce. Just follow. *) + (* Which strategy is passed to [resume] here is irrelevant, + since this checkpoint is not [HandlingError _]. *) shifts (resume checkpoint) | HandlingError _ -> (* The parser fails, which means it rejects the terminal symbol @@ -1965,9 +2090,6 @@ let update buffer x = | Two (_, x1), x2 -> Two (x1, x2) -(* [show f buffer] prints the contents of the buffer. The function [f] is - used to print an element. *) - let show f buffer : string = match !buffer with | Zero -> @@ -1981,9 +2103,6 @@ let show f buffer : string = (* In the most likely case, we have read two tokens. *) Printf.sprintf "after '%s' and before '%s'" (f valid) (f invalid) -(* [last buffer] returns the last element of the buffer (that is, the invalid - token). *) - let last buffer = match !buffer with | Zero -> @@ -1994,8 +2113,6 @@ let last buffer = | Two (_, invalid) -> invalid -(* [wrap buffer lexer] *) - open Lexing let wrap lexer = @@ -2006,7 +2123,156 @@ let wrap lexer = update buffer (lexbuf.lex_start_p, lexbuf.lex_curr_p); token +let wrap_supplier supplier = + let buffer = ref Zero in + buffer, + fun () -> + let (_token, pos1, pos2) as triple = supplier() in + update buffer (pos1, pos2); + triple + (* -------------------------------------------------------------------------- *) + +let extract text (pos1, pos2) : string = + let ofs1 = pos1.pos_cnum + and ofs2 = pos2.pos_cnum in + let len = ofs2 - ofs1 in + try + String.sub text ofs1 len + with Invalid_argument _ -> + (* In principle, this should not happen, but if it does, let's make this + a non-fatal error. *) + "???" + +let sanitize text = + String.map (fun c -> + if Char.code c < 32 then ' ' else c + ) text + +(* If we were willing to depend on [Str], we could implement [compress] as + follows: + + let compress text = + Str.global_replace (Str.regexp "[ \t\n\r]+") " " text + + *) + +let rec compress n b i j skipping = + if j < n then + let c, j = Bytes.get b j, j + 1 in + match c with + | ' ' | '\t' | '\n' | '\r' -> + let i = if not skipping then (Bytes.set b i ' '; i + 1) else i in + let skipping = true in + compress n b i j skipping + | _ -> + let i = Bytes.set b i c; i + 1 in + let skipping = false in + compress n b i j skipping + else + Bytes.sub_string b 0 i + +let compress text = + let b = Bytes.of_string text in + let n = Bytes.length b in + compress n b 0 0 false + +let shorten k text = + let n = String.length text in + if n <= 2 * k + 3 then + text + else + String.sub text 0 k ^ + "..." ^ + String.sub text (n - k) k + +let is_digit c = + let c = Char.code c in + Char.code '0' <= c && c <= Char.code '9' + +exception Copy + +let expand f text = + let n = String.length text in + let b = Buffer.create n in + let rec loop i = + if i < n then begin + let c, i = text.[i], i + 1 in + loop ( + try + if c <> '$' then raise Copy; + let j = ref i in + while !j < n && is_digit text.[!j] do incr j done; + if i = !j then raise Copy; + let k = int_of_string (String.sub text i (!j - i)) in + Buffer.add_string b (f k); + !j + with Copy -> + (* We reach this point if either [c] is not '$' or [c] is '$' + but is not followed by an integer literal. *) + Buffer.add_char b c; + i + ) + end + else + Buffer.contents b + in + loop 0 +end +module LexerUtil = struct +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) + +open Lexing +open Printf + +let init filename lexbuf = + lexbuf.lex_curr_p <- { + pos_fname = filename; + pos_lnum = 1; + pos_bol = 0; + pos_cnum = 0 + }; + lexbuf + +let read filename = + let c = open_in filename in + let text = really_input_string c (in_channel_length c) in + close_in c; + let lexbuf = Lexing.from_string text in + text, init filename lexbuf + +let newline lexbuf = + let pos = lexbuf.lex_curr_p in + lexbuf.lex_curr_p <- { pos with + pos_lnum = pos.pos_lnum + 1; + pos_bol = pos.pos_cnum; + } + +let is_dummy (pos1, pos2) = + pos1 == dummy_pos || pos2 == dummy_pos + +let range ((pos1, pos2) as range) = + if is_dummy range then + sprintf "At an unknown location:\n" + else + let file = pos1.pos_fname in + let line = pos1.pos_lnum in + let char1 = pos1.pos_cnum - pos1.pos_bol in + let char2 = pos2.pos_cnum - pos1.pos_bol in (* yes, [pos1.pos_bol] *) + sprintf "File \"%s\", line %d, characters %d-%d:\n" + file line char1 char2 + (* use [char1 + 1] and [char2 + 1] if *not* using Caml mode *) end module Printers = struct (******************************************************************************) @@ -3133,8 +3399,14 @@ module Make type item = int * int + let low_bits = + 10 + + let low_limit = + 1 lsl low_bits + let export t : item = - (t lsr 7, t mod 128) + (t lsr low_bits, t mod low_limit) let items s = (* Map [s] to its LR(0) core. *) @@ -3513,5 +3785,5 @@ module MakeEngineTable (T : TableFormat.TABLES) = struct end end module StaticVersion = struct -let require_20190924 = () +let require_20201216 = () end diff --git a/boot/menhir/menhirLib.mli b/boot/menhir/menhirLib.mli index fa523f59..98db99e6 100644 --- a/boot/menhir/menhirLib.mli +++ b/boot/menhir/menhirLib.mli @@ -222,9 +222,9 @@ module type INCREMENTAL_ENGINE = sig | Rejected (* [offer] allows the user to resume the parser after it has suspended - itself with a checkpoint of the form [InputNeeded env]. [offer] expects the - old checkpoint as well as a new token and produces a new checkpoint. It does not - raise any exception. *) + itself with a checkpoint of the form [InputNeeded env]. [offer] expects + the old checkpoint as well as a new token and produces a new checkpoint. + It does not raise any exception. *) val offer: 'a checkpoint -> @@ -233,10 +233,30 @@ module type INCREMENTAL_ENGINE = sig (* [resume] allows the user to resume the parser after it has suspended itself with a checkpoint of the form [AboutToReduce (env, prod)] or - [HandlingError env]. [resume] expects the old checkpoint and produces a new - checkpoint. It does not raise any exception. *) + [HandlingError env]. [resume] expects the old checkpoint and produces a + new checkpoint. It does not raise any exception. *) + + (* The optional argument [strategy] influences the manner in which [resume] + deals with checkpoints of the form [ErrorHandling _]. Its default value + is [`Legacy]. It can be briefly described as follows: + + - If the [error] token is used only to report errors (that is, if the + [error] token appears only at the end of a production, whose semantic + action raises an exception) then the simplified strategy should be + preferred. (This includes the case where the [error] token does not + appear at all in the grammar.) + + - If the [error] token is used to recover after an error, or if + perfect backward compatibility is required, the legacy strategy + should be selected. + + More details on these strategies appear in the file [Engine.ml]. *) + + type strategy = + [ `Legacy | `Simplified ] val resume: + ?strategy:strategy -> 'a checkpoint -> 'a checkpoint @@ -246,7 +266,8 @@ module type INCREMENTAL_ENGINE = sig type supplier = unit -> token * position * position - (* A pair of a lexer and a lexing buffer can be easily turned into a supplier. *) + (* A pair of a lexer and a lexing buffer can be easily turned into a + supplier. *) val lexer_lexbuf_to_supplier: (Lexing.lexbuf -> token) -> @@ -261,9 +282,11 @@ module type INCREMENTAL_ENGINE = sig (* [loop supplier checkpoint] begins parsing from [checkpoint], reading tokens from [supplier]. It continues parsing until it reaches a checkpoint of the form [Accepted v] or [Rejected]. In the former case, it - returns [v]. In the latter case, it raises the exception [Error]. *) + returns [v]. In the latter case, it raises the exception [Error]. + The optional argument [strategy], whose default value is [Legacy], + is passed to [resume] and influences the error-handling strategy. *) - val loop: supplier -> 'a checkpoint -> 'a + val loop: ?strategy:strategy -> supplier -> 'a checkpoint -> 'a (* [loop_handle succeed fail supplier checkpoint] begins parsing from [checkpoint], reading tokens from [supplier]. It continues parsing until @@ -272,10 +295,10 @@ module type INCREMENTAL_ENGINE = sig observed first). In the former case, it calls [succeed v]. In the latter case, it calls [fail] with this checkpoint. It cannot raise [Error]. - This means that Menhir's traditional error-handling procedure (which pops - the stack until a state that can act on the [error] token is found) does - not get a chance to run. Instead, the user can implement her own error - handling code, in the [fail] continuation. *) + This means that Menhir's error-handling procedure does not get a chance + to run. For this reason, there is no [strategy] parameter. Instead, the + user can implement her own error handling code, in the [fail] + continuation. *) val loop_handle: ('a -> 'answer) -> @@ -943,6 +966,7 @@ module type MONOLITHIC_ENGINE = sig exception Error val entry: + (* strategy: *) [ `Legacy | `Simplified ] -> (* see [IncrementalEngine] *) state -> (Lexing.lexbuf -> token) -> Lexing.lexbuf -> @@ -1066,12 +1090,20 @@ type 'a buffer which internally relies on [lexer] and updates [buffer] on the fly whenever a token is demanded. *) +(* The type of the buffer is [(position * position) buffer], which means that + it stores two pairs of positions, which are the start and end positions of + the last two tokens. *) + open Lexing val wrap: (lexbuf -> 'token) -> (position * position) buffer * (lexbuf -> 'token) +val wrap_supplier: + (unit -> 'token * position * position) -> + (position * position) buffer * (unit -> 'token * position * position) + (* [show f buffer] prints the contents of the buffer, producing a string that is typically of the form "after '%s' and before '%s'". The function [f] is used to print an element. The buffer MUST be nonempty. *) @@ -1084,6 +1116,76 @@ val show: ('a -> string) -> 'a buffer -> string val last: 'a buffer -> 'a (* -------------------------------------------------------------------------- *) + +(* [extract text (pos1, pos2)] extracts the sub-string of [text] delimited + by the positions [pos1] and [pos2]. *) + +val extract: string -> position * position -> string + +(* [sanitize text] eliminates any special characters from the text [text]. + A special character is a character whose ASCII code is less than 32. + Every special character is replaced with a single space character. *) + +val sanitize: string -> string + +(* [compress text] replaces every run of at least one whitespace character + with exactly one space character. *) + +val compress: string -> string + +(* [shorten k text] limits the length of [text] to [2k+3] characters. If the + text is too long, a fragment in the middle is replaced with an ellipsis. *) + +val shorten: int -> string -> string + +(* [expand f text] searches [text] for occurrences of [$k], where [k] + is a nonnegative integer literal, and replaces each such occurrence + with the string [f k]. *) + +val expand: (int -> string) -> string -> string +end +module LexerUtil : sig +(******************************************************************************) +(* *) +(* Menhir *) +(* *) +(* François Pottier, Inria Paris *) +(* Yann Régis-Gianas, PPS, Université Paris Diderot *) +(* *) +(* Copyright Inria. All rights reserved. This file is distributed under the *) +(* terms of the GNU Library General Public License version 2, with a *) +(* special exception on linking, as described in the file LICENSE. *) +(* *) +(******************************************************************************) + +open Lexing + +(* [init filename lexbuf] initializes the lexing buffer [lexbuf] so + that the positions that are subsequently read from it refer to the + file [filename]. It returns [lexbuf]. *) + +val init: string -> lexbuf -> lexbuf + +(* [read filename] reads the entire contents of the file [filename] and + returns a pair of this content (a string) and a lexing buffer that + has been initialized, based on this string. *) + +val read: string -> string * lexbuf + +(* [newline lexbuf] increments the line counter stored within [lexbuf]. It + should be invoked by the lexer itself every time a newline character is + consumed. This allows maintaining a current the line number in [lexbuf]. *) + +val newline: lexbuf -> unit + +(* [range (startpos, endpos)] prints a textual description of the range + delimited by the start and end positions [startpos] and [endpos]. + This description is one line long and ends in a newline character. + This description mentions the file name, the line number, and a range + of characters on this line. The line number is correct only if [newline] + has been correctly used, as described dabove. *) + +val range: position * position -> string end module Printers : sig (******************************************************************************) @@ -1701,5 +1803,5 @@ module MakeEngineTable and type nonterminal = int end module StaticVersion : sig -val require_20190924 : unit +val require_20201216: unit end diff --git a/boot/menhir/parser.ml b/boot/menhir/parser.ml index 6b6fc220..9cb0883b 100644 --- a/boot/menhir/parser.ml +++ b/boot/menhir/parser.ml @@ -2,7 +2,7 @@ (* This generated code requires the following version of MenhirLib: *) let () = - MenhirLib.StaticVersion.require_20190924 + MenhirLib.StaticVersion.require_20201216 module MenhirBasics = struct @@ -16,7 +16,7 @@ module MenhirBasics = struct | VAL | UNDERSCORE | UIDENT of ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) # 22 "parsing/parser.ml" ) @@ -28,7 +28,7 @@ module MenhirBasics = struct | THEN | STRUCT | STRING of ( -# 689 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * Location.t * string option) # 34 "parsing/parser.ml" ) @@ -41,20 +41,20 @@ module MenhirBasics = struct | RBRACKET | RBRACE | QUOTED_STRING_ITEM of ( -# 693 "parsing/parser.mly" - (string * Location.t * string * Location.t * string option) +# 747 "parsing/parser.mly" + (string * Location.t * string * Location.t * string option) # 47 "parsing/parser.ml" ) | QUOTED_STRING_EXPR of ( -# 691 "parsing/parser.mly" - (string * Location.t * string * Location.t * string option) +# 745 "parsing/parser.mly" + (string * Location.t * string * Location.t * string option) # 52 "parsing/parser.ml" ) | QUOTE | QUESTION | PRIVATE | PREFIXOP of ( -# 675 "parsing/parser.mly" +# 729 "parsing/parser.mly" (string) # 60 "parsing/parser.ml" ) @@ -64,7 +64,7 @@ module MenhirBasics = struct | PERCENT | OR | OPTLABEL of ( -# 668 "parsing/parser.mly" +# 722 "parsing/parser.mly" (string) # 70 "parsing/parser.ml" ) @@ -82,12 +82,12 @@ module MenhirBasics = struct | MATCH | LPAREN | LIDENT of ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) # 88 "parsing/parser.ml" ) | LETOP of ( -# 633 "parsing/parser.mly" +# 687 "parsing/parser.mly" (string) # 93 "parsing/parser.ml" ) @@ -107,39 +107,39 @@ module MenhirBasics = struct | LBRACE | LAZY | LABEL of ( -# 638 "parsing/parser.mly" +# 692 "parsing/parser.mly" (string) # 113 "parsing/parser.ml" ) | INT of ( -# 637 "parsing/parser.mly" +# 691 "parsing/parser.mly" (string * char option) # 118 "parsing/parser.ml" ) | INITIALIZER | INHERIT | INFIXOP4 of ( -# 631 "parsing/parser.mly" +# 685 "parsing/parser.mly" (string) # 125 "parsing/parser.ml" ) | INFIXOP3 of ( -# 630 "parsing/parser.mly" +# 684 "parsing/parser.mly" (string) # 130 "parsing/parser.ml" ) | INFIXOP2 of ( -# 629 "parsing/parser.mly" +# 683 "parsing/parser.mly" (string) # 135 "parsing/parser.ml" ) | INFIXOP1 of ( -# 628 "parsing/parser.mly" +# 682 "parsing/parser.mly" (string) # 140 "parsing/parser.ml" ) | INFIXOP0 of ( -# 627 "parsing/parser.mly" +# 681 "parsing/parser.mly" (string) # 145 "parsing/parser.ml" ) @@ -147,7 +147,7 @@ module MenhirBasics = struct | IN | IF | HASHOP of ( -# 686 "parsing/parser.mly" +# 740 "parsing/parser.mly" (string) # 153 "parsing/parser.ml" ) @@ -160,7 +160,7 @@ module MenhirBasics = struct | FUN | FOR | FLOAT of ( -# 616 "parsing/parser.mly" +# 670 "parsing/parser.mly" (string * char option) # 166 "parsing/parser.ml" ) @@ -174,7 +174,7 @@ module MenhirBasics = struct | ELSE | DOWNTO | DOTOP of ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) # 180 "parsing/parser.ml" ) @@ -182,14 +182,14 @@ module MenhirBasics = struct | DOT | DONE | DOCSTRING of ( -# 709 "parsing/parser.mly" +# 764 "parsing/parser.mly" (Docstrings.docstring) # 188 "parsing/parser.ml" ) | DO | CONSTRAINT | COMMENT of ( -# 708 "parsing/parser.mly" +# 763 "parsing/parser.mly" (string * Location.t) # 195 "parsing/parser.ml" ) @@ -200,7 +200,7 @@ module MenhirBasics = struct | COLON | CLASS | CHAR of ( -# 596 "parsing/parser.mly" +# 650 "parsing/parser.mly" (char) # 206 "parsing/parser.ml" ) @@ -213,7 +213,7 @@ module MenhirBasics = struct | ASSERT | AS | ANDOP of ( -# 634 "parsing/parser.mly" +# 688 "parsing/parser.mly" (string) # 219 "parsing/parser.ml" ) @@ -228,7 +228,7 @@ include MenhirBasics let _eRR = MenhirBasics.Error -# 18 "parsing/parser.mly" +# 25 "parsing/parser.mly" open Asttypes @@ -381,14 +381,14 @@ let mkexp_cons ~loc consloc args = mkexp ~loc (mkexp_cons_desc consloc args) let mkpat_cons_desc consloc args = - Ppat_construct(mkrhs (Lident "::") consloc, Some args) + Ppat_construct(mkrhs (Lident "::") consloc, Some ([], args)) let mkpat_cons ~loc consloc args = mkpat ~loc (mkpat_cons_desc consloc args) let ghexp_cons_desc consloc args = Pexp_construct(ghrhs (Lident "::") consloc, Some args) let ghpat_cons_desc consloc args = - Ppat_construct(ghrhs (Lident "::") consloc, Some args) + Ppat_construct(ghrhs (Lident "::") consloc, Some ([], args)) let rec mktailexp nilloc = let open Location in function [] -> @@ -437,110 +437,146 @@ let unclosed opening_name opening_loc closing_name closing_loc = let expecting loc nonterm = raise Syntaxerr.(Error(Expecting(make_loc loc, nonterm))) +(* Using the function [not_expecting] in a semantic action means that this + syntactic form is recognized by the parser but is in fact incorrect. This + idiom is used in a few places to produce ad hoc syntax error messages. *) + +(* This idiom should be used as little as possible, because it confuses the + analyses performed by Menhir. Because Menhir views the semantic action as + opaque, it believes that this syntactic form is correct. This can lead + [make generate-parse-errors] to produce sentences that cause an early + (unexpected) syntax error and do not achieve the desired effect. This could + also lead a completion system to propose completions which in fact are + incorrect. In order to avoid these problems, the productions that use + [not_expecting] should be marked with AVOID. *) + let not_expecting loc nonterm = raise Syntaxerr.(Error(Not_expecting(make_loc loc, nonterm))) -let dotop ~left ~right ~assign ~ext ~multi = - let assign = if assign then "<-" else "" in - let mid = if multi then ";.." else "" in - String.concat "" ["."; ext; left; mid; right; assign] -let paren = "(",")" -let brace = "{", "}" -let bracket = "[", "]" -let lident x = Lident x -let ldot x y = Ldot(x,y) -let dotop_fun ~loc dotop = - ghexp ~loc (Pexp_ident (ghloc ~loc dotop)) +(* Helper functions for desugaring array indexing operators *) +type paren_kind = Paren | Brace | Bracket -let array_function ~loc str name = - ghloc ~loc (Ldot(Lident str, - (if !Clflags.unsafe then "unsafe_" ^ name else name))) +(* We classify the dimension of indices: Bigarray distinguishes + indices of dimension 1,2,3, or more. Similarly, user-defined + indexing operator behave differently for indices of dimension 1 + or more. +*) +type index_dim = + | One + | Two + | Three + | Many +type ('dot,'index) array_family = { -let array_get_fun ~loc = - ghexp ~loc (Pexp_ident(array_function ~loc "Array" "get")) -let string_get_fun ~loc = - ghexp ~loc (Pexp_ident(array_function ~loc "String" "get")) + name: + Lexing.position * Lexing.position -> 'dot -> assign:bool -> paren_kind + -> index_dim -> Longident.t Location.loc + (* + This functions computes the name of the explicit indexing operator + associated with a sugared array indexing expression. -let array_set_fun ~loc = - ghexp ~loc (Pexp_ident(array_function ~loc "Array" "set")) -let string_set_fun ~loc = - ghexp ~loc (Pexp_ident(array_function ~loc "String" "set")) + For instance, for builtin arrays, if Clflags.unsafe is set, + * [ a.[index] ] => [String.unsafe_get] + * [ a.{x,y} <- 1 ] => [ Bigarray.Array2.unsafe_set] -let multi_indices ~loc = function - | [a] -> false, a - | l -> true, mkexp ~loc (Pexp_array l) + User-defined indexing operator follows a more local convention: + * [ a .%(index)] => [ (.%()) ] + * [ a.![1;2] <- 0 ] => [(.![;..]<-)] + * [ a.My.Map.?(0) => [My.Map.(.?())] + *); -let index_get ~loc get_fun array index = - let args = [Nolabel, array; Nolabel, index] in - mkexp ~loc (Pexp_apply(get_fun, args)) + index: + Lexing.position * Lexing.position -> paren_kind -> 'index + -> index_dim * (arg_label * expression) list + (* + [index (start,stop) paren index] computes the dimension of the + index argument and how it should be desugared when transformed + to a list of arguments for the indexing operator. + In particular, in both the Bigarray case and the user-defined case, + beyond a certain dimension, multiple indices are packed into a single + array argument: + * [ a.(x) ] => [ [One, [Nolabel, <>] ] + * [ a.{1,2} ] => [ [Two, [Nolabel, <<1>>; Nolabel, <<2>>] ] + * [ a.{1,2,3,4} ] => [ [Many, [Nolabel, <<[|1;2;3;4|]>>] ] ] + *); -let index_set ~loc set_fun array index value = - let args = [Nolabel, array; Nolabel, index; Nolabel, value] in - mkexp ~loc (Pexp_apply(set_fun, args)) +} -let array_get ~loc = index_get ~loc (array_get_fun ~loc) -let string_get ~loc = index_get ~loc (string_get_fun ~loc) -let dotop_get ~loc path (left,right) ext array index = - let multi, index = multi_indices ~loc index in - index_get ~loc - (dotop_fun ~loc (path @@ dotop ~left ~right ~ext ~multi ~assign:false)) - array index +let bigarray_untuplify = function + { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist + | exp -> [exp] -let array_set ~loc = index_set ~loc (array_set_fun ~loc) -let string_set ~loc = index_set ~loc (string_set_fun ~loc) -let dotop_set ~loc path (left,right) ext array index value= - let multi, index = multi_indices ~loc index in - index_set ~loc - (dotop_fun ~loc (path @@ dotop ~left ~right ~ext ~multi ~assign:true)) - array index value +let builtin_arraylike_name loc _ ~assign paren_kind n = + let opname = if assign then "set" else "get" in + let opname = if !Clflags.unsafe then "unsafe_" ^ opname else opname in + let prefix = match paren_kind with + | Paren -> Lident "Array" + | Bracket -> Lident "String" + | Brace -> + let submodule_name = match n with + | One -> "Array1" + | Two -> "Array2" + | Three -> "Array3" + | Many -> "Genarray" in + Ldot(Lident "Bigarray", submodule_name) in + ghloc ~loc (Ldot(prefix,opname)) +let builtin_arraylike_index loc paren_kind index = match paren_kind with + | Paren | Bracket -> One, [Nolabel, index] + | Brace -> + (* Multi-indices for bigarray are comma-separated ([a.{1,2,3,4}]) *) + match bigarray_untuplify index with + | [x] -> One, [Nolabel, x] + | [x;y] -> Two, [Nolabel, x; Nolabel, y] + | [x;y;z] -> Three, [Nolabel, x; Nolabel, y; Nolabel, z] + | coords -> Many, [Nolabel, ghexp ~loc (Pexp_array coords)] -let bigarray_function ~loc str name = - ghloc ~loc (Ldot(Ldot(Lident "Bigarray", str), name)) +let builtin_indexing_operators : (unit, expression) array_family = + { index = builtin_arraylike_index; name = builtin_arraylike_name } -let bigarray_untuplify = function - { pexp_desc = Pexp_tuple explist; pexp_loc = _ } -> explist - | exp -> [exp] +let paren_to_strings = function + | Paren -> "(", ")" + | Bracket -> "[", "]" + | Brace -> "{", "}" + +let user_indexing_operator_name loc (prefix,ext) ~assign paren_kind n = + let name = + let assign = if assign then "<-" else "" in + let mid = match n with + | Many | Three | Two -> ";.." + | One -> "" in + let left, right = paren_to_strings paren_kind in + String.concat "" ["."; ext; left; mid; right; assign] in + let lid = match prefix with + | None -> Lident name + | Some p -> Ldot(p,name) in + ghloc ~loc lid + +let user_index loc _ index = + (* Multi-indices for user-defined operators are semicolon-separated + ([a.%[1;2;3;4]]) *) + match index with + | [a] -> One, [Nolabel, a] + | l -> Many, [Nolabel, mkexp ~loc (Pexp_array l)] + +let user_indexing_operators: + (Longident.t option * string, expression list) array_family + = { index = user_index; name = user_indexing_operator_name } -let bigarray_get ~loc arr arg = - let mkexp, ghexp = mkexp ~loc, ghexp ~loc in - let bigarray_function = bigarray_function ~loc in - let get = if !Clflags.unsafe then "unsafe_get" else "get" in - match bigarray_untuplify arg with - [c1] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array1" get)), - [Nolabel, arr; Nolabel, c1])) - | [c1;c2] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array2" get)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2])) - | [c1;c2;c3] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array3" get)), - [Nolabel, arr; Nolabel, c1; Nolabel, c2; Nolabel, c3])) - | coords -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Genarray" "get")), - [Nolabel, arr; Nolabel, ghexp(Pexp_array coords)])) +let mk_indexop_expr array_indexing_operator ~loc + (array,dot,paren,index,set_expr) = + let assign = match set_expr with None -> false | Some _ -> true in + let n, index = array_indexing_operator.index loc paren index in + let fn = array_indexing_operator.name loc dot ~assign paren n in + let set_arg = match set_expr with + | None -> [] + | Some expr -> [Nolabel, expr] in + let args = (Nolabel,array) :: index @ set_arg in + mkexp ~loc (Pexp_apply(ghexp ~loc (Pexp_ident fn), args)) -let bigarray_set ~loc arr arg newval = - let mkexp, ghexp = mkexp ~loc, ghexp ~loc in - let bigarray_function = bigarray_function ~loc in - let set = if !Clflags.unsafe then "unsafe_set" else "set" in - match bigarray_untuplify arg with - [c1] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array1" set)), - [Nolabel, arr; Nolabel, c1; Nolabel, newval])) - | [c1;c2] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array2" set)), - [Nolabel, arr; Nolabel, c1; - Nolabel, c2; Nolabel, newval])) - | [c1;c2;c3] -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Array3" set)), - [Nolabel, arr; Nolabel, c1; - Nolabel, c2; Nolabel, c3; Nolabel, newval])) - | coords -> - mkexp(Pexp_apply(ghexp(Pexp_ident(bigarray_function "Genarray" "set")), - [Nolabel, arr; - Nolabel, ghexp(Pexp_array coords); - Nolabel, newval])) +let indexop_unclosed_error loc_s s loc_e = + let left, right = paren_to_strings s in + unclosed left loc_s right loc_e let lapply ~loc p1 p2 = if !Clflags.applicative_functors @@ -672,6 +708,7 @@ let extra_rhs_core_type ct ~pos = type let_binding = { lb_pattern: pattern; lb_expression: expression; + lb_is_pun: bool; lb_attributes: attributes; lb_docs: docs Lazy.t; lb_text: text Lazy.t; @@ -680,13 +717,13 @@ type let_binding = type let_bindings = { lbs_bindings: let_binding list; lbs_rec: rec_flag; - lbs_extension: string Asttypes.loc option; - lbs_loc: Location.t } + lbs_extension: string Asttypes.loc option } -let mklb first ~loc (p, e) attrs = +let mklb first ~loc (p, e, is_pun) attrs = { lb_pattern = p; lb_expression = e; + lb_is_pun = is_pun; lb_attributes = attrs; lb_docs = symbol_docs_lazy loc; lb_text = (if first then empty_text_lazy @@ -694,17 +731,18 @@ let mklb first ~loc (p, e) attrs = lb_loc = make_loc loc; } -let mklbs ~loc ext rf lb = - { - lbs_bindings = [lb]; - lbs_rec = rf; - lbs_extension = ext ; - lbs_loc = make_loc loc; - } - let addlb lbs lb = + if lb.lb_is_pun && lbs.lbs_extension = None then syntax_error (); { lbs with lbs_bindings = lb :: lbs.lbs_bindings } +let mklbs ext rf lb = + let lbs = { + lbs_bindings = []; + lbs_rec = rf; + lbs_extension = ext; + } in + addlb lbs lb + let val_of_let_bindings ~loc lbs = let bindings = List.map @@ -793,7 +831,7 @@ let mk_directive ~loc name arg = } -# 797 "parsing/parser.ml" +# 835 "parsing/parser.ml" module Tables = struct @@ -1303,22 +1341,22 @@ module Tables = struct Obj.repr () and default_reduction = - (16, "\000\000\000\000\000\000\002\247\002\246\002\245\002\244\002\243\002\198\002\242\002\241\002\240\002\239\002\238\002\237\002\236\002\235\002\234\002\233\002\232\002\231\002\230\002\229\002\228\002\227\002\226\002\225\002\224\002\197\002\223\002\222\002\221\002\220\002\219\002\218\002\217\002\216\002\215\002\214\002\213\002\212\002\211\002\210\002\209\002\208\002\207\002\206\002\205\002\204\002\203\002\202\002\201\002\200\002\199\000\000\000\000\000*\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003<\001\168\001\147\001\165\001\164\001\163\001\169\001\173\000\000\003=\001\167\001\166\001\148\001\171\001\162\001\161\001\160\001\159\001\158\001\156\001\172\001\170\000\000\000\000\000\000\000\220\000\000\000\000\001\151\000\000\000\000\000\000\001\153\000\000\000\000\000\000\001\155\001\177\001\174\001\157\001\149\001\175\001\176\000\000\003;\003:\003>\000\000\000\000\000\024\001B\000\188\000\000\000\216\000\217\000\023\000\000\000\000\001\199\001\198\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0037\000\000\0032\000\000\000\000\0034\000\000\0036\000\000\0033\0035\000\000\003-\000\000\003,\003(\0022\000\000\003+\000\000\0023\000\000\000\000\000\000\000\000\000j\000\000\000\000\000h\000\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\184\001N\000\000\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000\000\001L\000\000\000\000\001O\001M\001U\000A\002\134\000\000\001\018\000\000\000\000\000\000\000\015\000\014\000\000\000\000\000\000\000\000\002\179\000\000\002e\002f\000\000\002c\002d\000\000\000\000\000\000\000\000\000\000\001e\001d\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\016\003\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000g\000\000\000\231\000\000\002h\002g\000\000\000\000\000\000\001\181\000\000\000\000\000%\000\000\000\000\000\000\000\000\000\000\001T\000\000\001S\000\000\001C\001R\000\000\001A\000b\000\030\000\000\000\000\001|\000\025\000\000\000\000\000\000\000\000\003'\000(\000\000\000\000\000\031\000\026\000\000\000\000\000\000\000\201\000\000\000\000\000\000\000\203\002<\002.\000\000\000\"\000\000\002/\000\000\000\000\001\178\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\017\000\000\003\018\000\000\000y\000\000\000\000\000!\000\000\000\000\000\000\000#\000\000\000$\000\000\000&\000\000\000\000\000'\002$\002#\000\000\000\000\000\000\000\000\000\000\000\000\000c\000\000\002\184\000f\000i\000d\002\173\003?\002\174\001\239\002\176\000\000\000\000\002\181\002b\002\183\000\000\000\000\000\000\002\190\002\187\000\000\000\000\000\000\001\236\001\222\000\000\000\000\000\000\000\000\001\226\000\000\001\221\000\000\001\238\002\196\000\000\001\237\000q\001\229\000\000\000o\000\000\002\189\002\188\000\000\001\232\000\000\000\000\001\228\000\000\000\000\001\224\001\223\000\000\002\186\000\000\002j\002i\000\000\000\000\002F\002\185\002\182\000\000\000\000\000\000\000\000\001\183\001-\001.\002l\000\000\002m\002k\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001o\000\000\000\000\000\000\000\000\000\000\000\000\003T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002,\000\000\000\000\002-\000\000\000\000\001n\000\000\000\000\000\000\001K\001t\001J\001r\002 \002\031\000\000\001m\001l\000\000\000\205\000\000\000\000\001^\000\000\000\000\001b\000\000\001\203\001\202\000\000\000\000\001\201\001\200\001a\001_\000\000\001c\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\138\001P\002\143\002\141\000\000\000\000\000\000\002\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\172\000\000\002\171\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\250\000\000\000\000\000\000\000\000\000\000\000\000\000\239\001\249\000\240\000\000\000\000\000\000\001~\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\234\000\000\000\235\000\000\000\000\000\000\002\151\000\000\000\000\000\000\002r\002q\000\000\000\000\000\000\000\000\003@\002\153\002\140\002\139\000\000\000\000\000\169\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\168\000\000\000\000\000\000\002M\002L\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\002\250\000\000\003$\000\000\000\000\003#\000\000\000\000\000\000\000\000\000\000\000\195\000\194\000\244\000\000\002\251\002\252\000\000\000\000\000p\000\000\002\191\002\175\000\000\002\194\000\000\002\193\002\192\000\000\000\000\000\000\000\000\000\000\000\000\000\248\000\000\000\000\002&\000\000\000\000\000\000\000\247\000\000\000\000\000\246\000\245\000\000\000\000\000\000\000\000\000\250\000\000\000\000\000\249\000\000\001\235\000\000\000\000\001\246\000\000\000\000\001\248\000\000\000\000\001\244\001\243\001\241\001\242\000\000\000\000\000\000\000\000\000\000\001\024\000\018\000\252\000\000\000\000\000\000\002t\002s\000\000\000\000\002\130\002\129\000\000\000\000\000\000\000\000\002~\002}\000\000\000\000\002@\000\000\000\000\002|\002{\000\000\000\000\002\128\002\127\002\147\000\000\000\000\000\000\000\000\000\000\002x\000\000\000\000\000\000\000\000\000\000\002v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\"\002!\000\167\000\000\002w\000\000\000\000\002u\000\000\000\000\002y\000\000\000z\000{\000\000\000\000\000\000\000\000\000\138\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\198\000\199\000\131\000\000\000\130\000\000\000\000\0010\000\000\0011\001/\002(\000\000\000\000\002)\002'\000\000\000\000\000\000\000\000\000\000\001\003\000\000\000\000\001\004\000\000\000\000\000\170\000\000\001\006\001\005\000\000\000\000\002\155\002\148\000\000\002\164\000\000\002\165\002\163\000\000\002\169\000\000\002\170\002\168\000\000\000\000\002\150\002\149\000\000\000\000\000\000\002\016\000\000\001\197\000\000\000\000\000\000\002I\002\015\000\000\002\159\002\158\000\000\000\000\000\000\001Q\000\000\002\132\000\000\002\133\002\131\000\000\002\157\002\156\000\000\000\000\000\000\002C\002\146\000\000\002\145\002\144\000\000\002\167\002\166\000\128\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\001X\000\000\000\000\000\000\000k\000\000\000\000\000l\000\000\000\000\000\000\000\000\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000u\000\000\000\228\000\226\000\000\000\000\000\000\000\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\000m\000\000\000\000\002\014\000\000\000\000\000\251\001\195\000\000\000\237\000\238\001\002\000\000\000\000\000\000\000\000\000\000\001\210\001\204\000\000\001\209\000\000\001\207\000\000\001\208\000\000\001\205\000\000\000\000\001\206\000\000\001\144\000\000\000\000\000\000\001\143\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001s\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\014\003\t\000\000\000\000\003\b\000\000\000\000\000\000\000\000\000\000\001\255\000\000\000\000\000\000\000\000\000\000\000\000\003\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\128\000\000\002\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\249\000\000\000\000\002N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\146\000\000\000\000\000\000\001\145\000\000\000\000\000\000\000\000\000\000\001g\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\002\\\000\000\000\000\000\000\002Z\000\000\000\000\000\000\002Y\000\000\001Z\000\000\000\000\000\000\000\000\002_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003H\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000\000\000\000\000\000\000\001{\000\000\001z\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\002\012\000\000\002\011\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\000\000O\000M\000\000\000R\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\000\000\000\000\000J\000\000\000Q\000P\000\000\000K\000L\000\000\001!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\000`\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\n\002`\002R\000\000\002X\002S\002^\002]\002[\001\027\000\000\002P\000\000\000\000\000\000\000\000\000\000\002\029\000\000\000\000\001\020\002T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\139\001\135\000\000\000\000\000\000\000\210\000\000\000\000\002\019\002\029\000\000\000\000\001\022\002\017\002\018\000\000\000\000\000\000\000\000\000\000\001\142\001\138\001\134\000\000\000\000\000\211\000\000\000\000\001\141\001\137\001\133\001\131\002U\002Q\002a\001\026\001\252\002O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003C\000\000\000\000\003E\000\000\0006\000\000\000\000\003K\000\000\003J\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\000\000\000\000\003D\000\000\000\000\000\000\002\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001?\000\000\000\000\001=\001;\000\000\0007\000\000\000\000\003N\000\000\003M\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\000\000\000\000\001<\001:\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000\000\000\000\000\000\000\000\000\000\000\0003\000\000\000\000\000W\000\000\0001\000\255\000\000\000@\000-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\253\000\000\000V\000U\000\000\000\000\000[\000Z\000\000\000\000\001\185\000\000\0005\000\000\000\000\000\000\0004\000\000\000\000\000\000\0008\000\000\000Y\000\\\000\000\000:\000;\000\000\001#\000\000\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\003\012\003\003\000\000\000\000\003\007\002\248\003\002\003\011\003\n\001\031\000\000\000\000\003\000\000\000\003\004\003\001\003\r\001\251\000\000\000\000\002\254\000\000\000\191\002\253\000\000\000\000\000\222\000\000\000\000\001\030\001\029\000\000\001\\\001[\000\000\000\000\002\195\002\178\000\000\000B\000\000\000\000\000C\000\000\000\000\000\142\000\141\002\162\000\000\002\161\002\160\002\142\000\000\000\000\000\000\000\000\002\135\000\000\002\137\000\000\002\136\000\000\002o\002n\000\000\002p\000\000\000\000\000\134\000\000\000\000\002\004\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\003\006\002\024\002\025\002\020\002\022\002\021\002\023\000\000\000\000\000\000\000\190\000\000\000\000\002\029\000\000\000\214\000\000\000\000\000\000\000\000\003\005\000\000\000\187\000\000\000\000\000\000\000\000\0018\0012\000\000\000\000\0013\000\029\000\000\000\028\000\000\000\000\000\202\000\000\000\000\000\000\000 \000\027\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\000\001\140\001\136\000\000\001\132\003&\000\000\002\029\000\000\000\213\000\000\000\000\000\000\000\000\002W\002\028\002\026\002\027\000\000\000\000\000\000\002\029\000\000\000\212\000\000\000\000\000\000\000\000\002V\000\000\001i\001h\000\000\000\022\000\000\003F\000\000\000+\000\000\000\000\000\000\000\000\000\137\000\000\000\218\000\001\000\000\000\000\000\221\000\002\000\000\000\000\000\000\001E\001F\000\003\000\000\000\000\000\000\000\000\001H\001I\001G\000\019\001D\000\020\000\000\001\211\000\000\000\004\000\000\001\212\000\000\000\005\000\000\001\213\000\000\000\000\001\214\000\006\000\000\000\007\000\000\001\215\000\000\000\b\000\000\001\216\000\000\000\t\000\000\001\217\000\000\000\000\001\218\000\n\000\000\000\000\001\219\000\011\000\000\000\000\000\000\000\000\000\000\003\025\003\020\003\021\003\024\003\022\000\000\003\029\000\012\000\000\003\028\000\000\001%\000\000\000\000\003\026\000\000\003\027\000\000\000\000\000\000\000\000\001)\001*\000\000\000\000\001(\001'\000\r\000\000\000\000\000\000\0039\000\000\0038") + (16, "\000\000\000\000\000\000\002\253\002\252\002\251\002\250\002\249\002\204\002\248\002\247\002\246\002\245\002\244\002\243\002\242\002\241\002\240\002\239\002\238\002\237\002\236\002\235\002\234\002\233\002\232\002\231\002\230\002\203\002\229\002\228\002\227\002\226\002\225\002\224\002\223\002\222\002\221\002\220\002\219\002\218\002\217\002\216\002\215\002\214\002\213\002\212\002\211\002\210\002\209\002\208\002\207\002\206\002\205\000\000\000\000\000*\000\186\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003B\001\172\001\151\001\169\001\168\001\167\001\173\001\177\000\000\003C\001\171\001\170\001\152\001\175\001\166\001\165\001\164\001\163\001\162\001\160\001\176\001\174\000\000\000\000\000\000\000\220\000\000\000\000\001\155\000\000\000\000\000\000\001\157\000\000\000\000\000\000\001\159\001\181\001\178\001\161\001\153\001\179\001\180\000\000\003A\003@\003D\000\000\000\000\000\024\001E\000\188\000\000\000\216\000\217\000\023\000\000\000\000\001\203\001\202\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\0038\000\000\000\000\003:\000\000\003<\000\000\0039\003;\000\000\0033\000\000\0032\003.\0027\000\000\0031\000\000\0028\000\000\000\000\000\000\000\000\000j\000\000\000\000\000h\000\000\000\000\001C\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\184\001Q\000\000\000\000\000\000\000\000\000\000\000\000\002\"\000\000\000\000\000\000\000\000\000\000\000\000\000e\000\000\000\000\000\000\000\000\001O\000\000\000\000\001R\001P\001X\000A\002\140\000\000\001\021\000\000\000\000\000\000\000\015\000\014\000\000\000\000\000\000\000\000\002\185\000\000\002k\002l\000\000\002i\002j\000\000\000\000\000\000\000\000\000\000\001h\001g\000\000\002\183\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\223\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\022\003\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000g\000\000\000\231\000\000\002n\002m\000\000\000\000\000\000\001\185\000\000\000\000\000%\000\000\000\000\000\000\000\000\000\000\001W\000\000\001V\000\000\001F\001U\000\000\001D\000b\000\030\000\000\000\000\001\128\000\025\000\000\000\000\000\000\000\000\003-\000(\000\000\000\000\000\031\000\026\000\000\000\000\000\000\000\201\000\000\000\000\000\000\000\203\002A\0023\000\000\000\"\000\000\0024\000\000\000\000\001\182\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\017\003\023\000\000\003\024\000\000\000y\000\000\000\000\000!\000\000\000\000\000\000\000#\000\000\000$\000\000\000&\000\000\000\000\000'\002)\002(\000\000\000\000\000\000\000\000\000\000\000\000\000c\000\000\002\190\000f\000i\000d\002\179\003E\002\180\001\244\002\182\000\000\000\000\002\187\002h\002\189\000\000\000\000\000\000\002\196\002\193\000\000\000\000\000\000\001\240\001\226\000\000\000\000\000\000\000\000\001\230\000\000\001\225\000\000\001\243\002\202\000\000\000\000\000\000\000\000\001\130\000\000\000\000\001\242\002\188\000q\000\000\000\000\000p\000\000\002\197\002\181\000\000\001\236\000\000\000\000\002\200\000\000\002\199\002\198\000\000\001\232\000\000\000\000\001\228\001\227\001\241\001\233\000\000\000o\000\000\002\195\002\194\000\000\002\192\000\000\002p\002o\000\000\000\000\002K\002\191\000\000\000\000\000\000\000\000\001\187\0010\0011\002r\000\000\002s\002q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\204\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001r\000\000\000\000\000\000\000\000\000\000\000\000\003\\\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0030\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\000\000\000\001N\001x\001M\001u\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0021\000\000\000\000\0022\002%\002$\000\000\001p\001o\000\000\000\205\000\000\000\000\001a\000\000\000\000\001e\000\000\001\207\001\206\000\000\000\000\001\205\001\204\001d\001b\000\000\001f\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\144\001S\002\149\002\147\000\000\000\000\000\000\002\160\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\178\000\000\002\177\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\255\000\000\000\000\000\000\000\000\000\000\000\000\000\239\001\254\000\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\234\000\000\000\235\000\000\000\000\000\000\002\157\000\000\000\000\000\000\002\128\002w\000\000\000\000\000\000\000\000\003F\002\159\002\146\002\145\000\000\000\000\000\169\000\000\000\000\000\000\000\000\000\000\000\183\000\000\000\000\000\000\000\168\000\000\000\000\000\000\002R\002Q\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\243\000\000\003\000\000\000\003*\000\000\000\000\003)\000\000\000\000\000\000\000\000\000\000\000\195\000\194\000\244\000\000\003\001\003\002\000\000\000\000\000\000\000\000\000\000\000\000\000\250\000\000\000\000\002+\000\000\000\000\000\000\000\249\000\000\000\000\000\248\000\247\000\000\000\000\000\000\000\000\000\252\000\000\000\000\000\251\000\000\001\239\000\000\000\000\001\251\000\000\000\000\001\253\000\000\000\000\001\249\001\248\001\246\001\247\000\000\000\000\000\000\000\245\000\000\000\000\001\027\000\018\000\254\000\000\000\000\000\000\002\130\002y\000\000\000\000\002\129\002x\000\000\000\000\000\000\000\000\002\132\002{\000\000\000\000\002E\000\000\000\000\002\136\002\127\000\000\000\000\002\134\002}\002\153\000\000\000\000\000\000\000\000\000\000\002\131\000\000\000\000\000\000\000\000\000\000\002\135\000\000\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002'\002&\000\167\000\000\002z\000\000\000\000\002~\000\000\000\000\002|\000\000\000z\000{\000\000\000\000\000\000\000\000\000\138\000\196\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\198\000\199\000\131\000\000\000\130\000\000\000\000\0013\000\000\0014\0012\002-\000\000\000\000\002.\002,\000\000\000\000\000\000\000\000\000\000\001\006\000\000\000\000\001\007\000\000\000\000\000\170\000\000\001\t\001\b\000\000\000\000\002\161\002\154\000\000\002\170\000\000\002\171\002\169\000\000\002\175\000\000\002\176\002\174\000\000\000\000\002\156\002\155\000\000\000\000\000\000\002\021\000\000\001\201\000\000\000\000\000\000\002N\002\020\000\000\002\165\002\164\000\000\000\000\000\000\001T\000\000\002\138\000\000\002\139\002\137\000\000\002\163\002\162\000\000\000\000\000\000\002H\002\152\000\000\002\151\002\150\000\000\002\173\002\172\000\128\000\000\000\000\000\000\000\000\000\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\000\000\001[\000\000\000\000\000\000\000k\000\000\000\000\000l\000\000\000\000\000\000\000\000\001z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\225\000\000\000\000\000u\000\000\000\228\000\226\000\000\000\000\000\000\000\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000~\000m\000\000\000\000\002\019\000\000\000\000\000\253\001\199\000\000\000\237\000\238\001\004\000\000\000\000\000\000\000\000\000\000\001\214\001\208\000\000\001\213\000\000\001\211\000\000\001\212\000\000\001\209\000\000\000\000\001\210\000\000\001\148\000\000\000\000\000\000\001\147\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\017\003\015\000\000\000\000\003\014\000\000\000\000\000\000\000\000\000\000\002\004\000\000\000\000\000\000\000\000\000\000\000\000\003\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\132\000\000\002\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\255\000\000\000\000\002S\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\150\000\000\000\000\000\000\001\149\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001w\000\000\000\000\000\000\000\000\001j\000\000\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\019\002a\000\000\000\000\000\000\002_\000\000\000\000\000\000\002^\000\000\001]\000\000\000\000\000\000\000\000\002e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003N\000\000\000\000\000\000\000\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000E\000\000\000\000\000\000\000\000\001\127\000\000\001~\000\000\000\000\000\000\000\000\000H\000\000\000\000\000\000\002\017\000\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\000\000\000\000\000\000\000O\000M\000\000\000R\000\000\000\000\000\000\000\000\000\000\000G\000\000\000\000\000\000\000\000\000\000\000\000\000J\000\000\000Q\000P\000\000\000K\000L\000\000\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\015\000a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000^\000\000\000`\000_\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\r\002f\002W\000\000\002]\002X\002d\002c\002b\002`\001\030\000\000\002U\000\000\000\000\000\000\000\000\000\000\002\"\000\000\000\000\001\023\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\143\001\139\000\000\000\000\000\000\000\210\000\000\000\000\002\024\002\"\000\000\000\000\001\025\002\022\002\023\000\000\000\000\000\000\000\000\000\000\001\146\001\142\001\138\000\000\000\000\000\211\000\000\000\000\001\145\001\141\001\137\001\135\002Z\002V\002g\001\029\002\001\002T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003I\000\000\000\000\003K\000\000\0006\000\000\000\000\003Q\000\000\003P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003H\000\000\000\000\003J\000\000\000\000\000\000\002\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\000\000\001@\001>\000\000\0007\000\000\000\000\003T\000\000\003S\000\000\000\000\000\000\001<\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001A\000\000\000\000\001?\001=\000\000\000\000\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000X\000\000\000\000\000\000\000\000\000\000\000\000\0003\000\000\000\000\000W\000\000\0001\001\001\000\000\000@\000-\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\000\000\000V\000U\000\000\000\000\000[\000Z\000\000\000\000\001\189\000\000\0005\000\000\000\000\000\000\0004\000\000\000\000\000\000\0008\000\000\000Y\000\\\000\000\000:\000;\000\000\001&\000\000\000\000\000\000\000\000\000\000\000\000\000>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\011\003\018\003\t\000\000\000\000\003\r\002\254\003\b\003\017\003\016\001\"\000\000\000\000\003\006\000\000\003\n\003\007\003\019\002\000\000\000\000\000\003\004\000\000\000\191\003\003\000\000\000\000\000\222\000\000\000\000\001!\001 \000\000\001_\001^\000\000\000\000\002\201\002\184\000\000\000B\000\000\000\000\000C\000\000\000\000\000\142\000\141\002\168\000\000\002\167\002\166\002\148\000\000\000\000\000\000\000\000\002\141\000\000\002\143\000\000\002\142\000\000\002u\002t\000\000\002v\000\000\000\000\000\134\000\000\000\000\002\t\000\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\000\003\012\002\029\002\030\002\025\002\027\002\026\002\028\000\000\000\000\000\000\000\190\000\000\000\000\002\"\000\000\000\214\000\000\000\000\000\000\000\000\003\011\000\000\000\187\000\000\000\000\000\000\000\000\001;\0015\000\000\000\000\0016\000\029\000\000\000\028\000\000\000\000\000\202\000\000\000\000\000\000\000 \000\027\000\000\000\000\000\000\000\021\000\000\000\000\000\000\000\000\001\144\001\140\000\000\001\136\003,\000\000\002\"\000\000\000\213\000\000\000\000\000\000\000\000\002\\\002!\002\031\002 \000\000\000\000\000\000\002\"\000\000\000\212\000\000\000\000\000\000\000\000\002[\000\000\001l\001k\000\000\000\022\000\000\003L\000\000\000+\000\000\000\000\000\000\000\000\000\137\000\000\000\218\000\001\000\000\000\000\000\221\000\002\000\000\000\000\000\000\001H\001I\000\003\000\000\000\000\000\000\000\000\001K\001L\001J\000\019\001G\000\020\000\000\001\215\000\000\000\004\000\000\001\216\000\000\000\005\000\000\001\217\000\000\000\000\001\218\000\006\000\000\000\007\000\000\001\219\000\000\000\b\000\000\001\220\000\000\000\t\000\000\001\221\000\000\000\000\001\222\000\n\000\000\000\000\001\223\000\011\000\000\000\000\000\000\000\000\000\000\003\031\003\026\003\027\003\030\003\028\000\000\003#\000\012\000\000\003\"\000\000\001(\000\000\000\000\003 \000\000\003!\000\000\000\000\000\000\000\000\001,\001-\000\000\000\000\001+\001*\000\r\000\000\000\000\000\000\003?\000\000\003>") and error = - (124, "'\225 \197\138\173\2433\208\020\015\228\000\003\142\0026\016\004\\(\223\018}\000@\248\000\000\024\224}\246D\b/\227P\000L\028\030\227\139\002\131@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155\175\2437\252\149\031\226\017\007\158\007\223d@\130\2545\000\004\193\193\2388\176(4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\002\012\\ \000\016\000\000\000\000\000\001\000@@@ \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\132\128 \128\b \002\020\000\016\000b\000\002\000\bH\002\b\000\130\000!\000\001\000\006 \000 \000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000$\128\004\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\bH\002(\000\194\t!\192\001\016\006a\016a\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\001\000\012\\(\000\016\b\002\000\001\000\003\000\bp\016 \197\194\000\001\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001f\017`0\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\001\000\016\000\000\000@\000\000\001 \000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bP\t\026\000\001$!\192\192\018\001!\018\000\016}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\0000\000\002H\000L\000\000\b\000\000\000\000\000\128\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\000\128\193#\144\000\001\128\000\001\140\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235w\253\155\239\247\255\252\157?\230!\003\158@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\163a\136G\226\173\245#\211\230/\144@\025\174\184\018\016\132@\b\012\0189\000\000\024\000\000\024\192#a\000E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\004\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\136G\224,\229\"\211\227!\176@\025,\184\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\131\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\167\225 \197\138\173\2437\208\020\015\226\000\003\142\n~\018\012X\170\2233=\001@\254 \0008\224\167\225\"\197\138\173\2433\208\020\015\230\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\005\002\000@\000\000\129\000\000\000\016\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004\\(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\026\000\000\020@\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\004\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\022\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\011\184\000\131!!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000@\000\000@\000\002\000\000\000\001\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\002\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000 \000\000\000\017 \000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\020\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\003!\000@\192\004\193&\144\001\001\128\000\001\004\0002\016\004\b\000L\018i\000\016\024\000\000\016@\003!\000@\128\004\193\"\144\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\027P\144\020\193&\176\001\001\148 mU\000\000\016\000\b\000@\000\001\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\145\181\t\001L\018o\000\016\027A\006\213P\001\000\000\000\000\000\128\"\128\000\000\000\000\000\000\b2\016\132\b\000L\018-\000\016\026\000\000\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\016\000\004\000\000\000\020\000LQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147!\027@\128\020\193&\208\001\001\180\000MU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\017\180\b\001L\018m\000\016\027@\004\213P\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\016\000\004\000\000\000\020\000LQ\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016$\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\018\000\000\000\000\004\000\000\000\000\000HQ\b2\016$\b\000L\018-\000\016\026\000\000\020@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\000\000\004\129\016\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\016\000\000\004\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\001\001\144\000M\021\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016D\012\130L\018m\000\016\026\000\000\016@\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\003\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\000@\b\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\0000\000\007\129\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\001@0\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\001\"\001LH\002\168\000\131\001!\192\001\016\007`\018 \004\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\018 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\017\000v\016\"\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\000&\000@P \132\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\016&\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\002E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000@\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\001!\000D\000\128\193#\144\000\001\128\000\001\140\012\000\001\016\000\000\000\000\000\0000\001\005\002@\000#a\000E\194\141\241'\208\004\015\130\000\001\142\0026\016\004X(\223\018}\000@\248 \000\024\224#a\000E\130\141\241#\208\004\015\130\000\001\142\000\018\016\004D\b\012\018y\000\000\024\000\000\024\192\001!\000D\000\128\193'\144\000\001\128\000\001\140\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\001!\000D\000\128\193#\144\000\001\128\000\001\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237s\251\255\182\031}\183\255\223\001\000\000\000\000\000\192#\128\000\000\000\000\000\000\n6\024\132~*\223R=>b\249\004\001\154\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\004\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b2\016\132\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\016\000L\017\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\001\000\000\000\000\001\000\000@\000\000\000\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\144\005\r\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018+\000\016\024\000\000\016@\002\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\128\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\004\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\018\016\004D\b\012\018y\000\000\024\000\000\024\192\001!\000D\000\128\193'\144\000\001\128\000\001\140\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\196\148\187\131\232>\022\028\015\251`w\219~p\240\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\215?\191\251a\247\219\127\252\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\215?\191\251a\247\219\127\252\252IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237s\251\255\182\031}\183\255\207\196\148\187\131\232>\022\028\015\251`w\219~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\127[\188~\171\255s\253\255\214\255x\183\255\239}\246D\b/\227P\000L\028\030\227\139\002\131B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193&\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\003)\000P\144\004\193&\176\001\001\144\000m\021\b:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\000\000\000\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000 \000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000L\017\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\b\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0002\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\bH\002(\000\130\001!\128\001\144\006`\000 \004\132\128\"\128\b\"\018\024\012\025\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\129\003\224\012\004\004\003\224 \016\000X 0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\t\176>\000\192@@>\002\001\000\005\134\003\163a\011E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\248\000\t\016>\000\192@@>\002\001\000\005\130\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\b\016>\000\192@@>\002\001\000\005\130\003\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\252[\219\189\127\139\237s\251\255\182\031}\183\255\223\197\189\187\215\248\190\215?\191\249a\247\139\127\252\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\016@\000\000\001\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\001L\018+\000\016\024\000\000P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\001L\018+\000\016\024\000\000P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\016\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2402\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\b#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\018\016\132@\b\012\0189\000\000\024\000\000\024\192\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\028\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\002E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192@\000\000\000\000\000\000\000\000\003\000\000P\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b\016\000\016\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\0000\000\005\000\000\000\001\000\000\000\000\000\192#\128\000\000\000\000\000\000\012\000\001\016\000\000\000\000\000\0000\001\005\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\t\016>\000\192@@>\006\001\000\005\130\003\128\000\016\000\000\000\000\000\000\000@\000\000\000\000\b\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\144\006`\000 \004\001\000@@\000 \193\000\000\000\016\000\000\000\000\004\000\000\000\000\001\000\000@\000\000\001\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\144\006`\000 \004\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\128\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000@\000\128\000\000\000@\000\003\000\000`\000\000\197\194\128\001\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\017\000\000\000\000\004\000\000 \000\000\000\001\000\000\001\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000@\000\002\000\000\000\000\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\bX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bX\n(\000\130\005!\192\001\144\006`\016!\004\003\000\000`\000\000\197\194\128\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\bX\002(\000\130\005!\192\001\144\006`\016!\004\133\128\162\128\b0R\028\000\025\000f\001\002\016@\000\000\000\000\000\000\000@\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\004@\128\004\193&\208\001\001\128\000\001\004\0002\016D\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\024\000\000\016@\132\128\"\128\b \018\024\000\025\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\017@\196\148\187\131\232>\022\028\015\249`w\139~p\248\000\b\128>\000\192@@>\002\001\000\007\194\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000@\004\000\000\000@\000\000\000\000\000\000\000\001\000\000\000@\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\007`\000 \000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\000\000\000\000\004\000\000\000\000\000\000\000\0000\000@\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\003!\000@\128\004\193\"\208\001\001\160\000\001\004\001\000\000 \000\000\000\000@\000\000\000\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\001\002\000@@\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\bH\002(\000\130\t!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\132\129\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000`\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\128\000\132\128\"\128\b \018\028\000\017\000f\016\002\016\000\016\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\bH\002(\000\130\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000x\002/\001\130\012} \001\016\006\000\000 \000\132\128\"\128\b \002\016\000\016\000f\000\002\000\000\016\000\000\004\000\000\000@\000\000\000\000\000\000\128\001\000\000\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0008\000@\004\000\000\000@\000\000\000\000\000\000\000\003\000\004\000\000\000\000\004\000\000\000\000\000\000\000\0000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\020\000\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\132\128\"\128\b \002\024\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@@ \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \002\028\000\016\000f\000\006\000\000\136\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\b@\000\b\000\000(!@@\000\000 \016\000\000\132\000\000\128\000\002\130\016\004\000\000\002\001\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\004\000\000\002\001\000\000\000\128\000\000\000\004\004\000@\000\000\000\000\000\000\000\b\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\004\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\001 \016\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\018\001\000\000\000\016\000\004\000 \005\016`\000\000\000\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000@\000\000\000\000 \000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\004\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002\168\000\130!!\192A\016\007`\016 \004\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\198\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\000\b@\000\b\000\000 !\128@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\bX\n\168\000\131\004!\192\001\016\007`\000`\004\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\002\000\000\000\000\004\000\000\000\000\000@\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\133\128\170\128\b0B\028\000\017\000v\000\002\000HX\n\168\000\131\004!\192\001\016\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130\000!\192\001\000\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\016\000\016\000f\000\002\000@ \000\002H\000L\000@\b\000\000\000\000\000\128\002\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\016\000\016\000f\000\002\000@ \000\002H\000L\000@\b\000\000\000\000\000\128\002\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\0002\000\007\129\000\012\\(\000\016\b\002\000\001\000\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bZ\002(\000\130\t!\160\001\016\014`\016 \004\132\128\"\128\012 \018\028\000\017\000f\001\006\016HH\002(\000\130\001!\192\001\016\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016!\004\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\132\128\"\128\b \002\016\000\016\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000v\001\002\000@\018\000\000\128\000\b\000(\000\000\b\002\000\001\000\001 \000\000\000\000\128\002\128\000\000\128 \000\016\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\012 \018\028\000\017\000f\001\006\016HH\002(\000\130\001!\192\001\016\006`\016!\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\000\000\000\000\000\000\b\128\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\b@\000\b\000\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\016\012\000\000\002\001\000\000\b@\000\b\000\000 !\000\192\000\000 \016\000\000\b\000\000\000\000@@\004\000\000\000\000\000\000\b\000\000\000\000\000\004\004\000@\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000$\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\004\000\000\000\000\000\000\b\000\000\000\000\128\000\004\000@\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\003\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\003\128\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \r\016`\000\000@\000\000\000\128\001\000\000@\002\000\209\006\000\000\004\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\0002\016D\012\128L\018m\000\016\024\000\000\016@}\246D\b/\227P\000L\028\030\227\139\002\131@2\016D\b\000L\018m\000\016\024\000\000\016@\003!\004@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\b\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193\"\176\001\001\128\000\001\004\0002\144\005\t\001L\018+\000\016\024\000\000\016@\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\169*\212\024\162\211?\188\017\001\230\001\007\141HZ\146\173A\138-3\251\193\016\030`\016x\212\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\003!\004@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\b\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\016\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\198\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000@0\000\007\001 \r\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000@2\144\005\t\000L\018+\000\016\025\000\000P@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\0002\144\005\t\000L\018+\000\016\025\000\000P@\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\003!\004@\192\004\193&\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\016\006`\000 \004\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\000\006`\000 \000\132\128\"\128\b \018\016\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\144\006`\000 \004\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\016\000f\000\002\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007`\002 \004\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\193\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\b\000\000\000\128\004\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\000@\128\004\193\"\208\001\001\160\000\001\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\240\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \018\028\000\017\000v\000\006\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\012 \018\028\000\017\000v\000\006\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\132\128\"\128\b \018\024\000\017\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000 \000\000\000\000\000\000\001\000\000\000\000\000\000\000\002\000\000\000\000\000\003\000\000`\000\000\197\198\000\001 \000 \000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\016\000\000\000@\000\000\001 \000\000\000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000@\000\000\001\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\129\000\012\\(\000\016\b\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\132\128\"\128\b \002\024\000\016\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\130\b \002\024\000\016\000v\001\018\000@2\000\007\129\000\012\\(\000\016\b\002\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\132\128\"\128\b \002\024\000\016\000f\000\002\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\000!\000\001\000\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\012\000 \000\000\b\000\000\000\000\128\000\136\007\224,$\000\003\226 \016@\024(\176\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\192\000\000\000\000\000\000\000\000\b\000\b\000~\002\194@\000>\"\001\004\001\130\139\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\004\000H\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000\192\000\000\000\000\000\000\000\000\002~\018\012X\170\2233=\001P\254@\0008\224\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000Z\018\b\000\130\r!\001\001\016\014@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\000\001\016\006A\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\016\000\016\000`\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\b\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002~\018\012X\170\2233=\001P\254@\0008\224'\225 \197\138\173\2433\208\021\015\228\000\003\142\000H\002\b\000\130\001!\000\001\016\006@\000 \000\004\128 \128\b \018\016\000\017\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\128\001\016\006@\000 \000\004\128 \128\b \018\016\000\017\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\024\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") + (124, "'\225 \197\138\173\2433\208\020\015\228\000\003\142\0026\016\004\\(\223\018}\000@\248\000\000\024\224}\246D\b/\227P\000L\028\030\227\139\002\131@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235f\245\155\175\2437\252\149\031\226\017\007\158\007\223d@\130\2545\000\004\193\193\2388\176(4\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\000\000\000\004\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\016(\176\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\002\012\\ \000\016\000\000\000\000\000\001\000@@@ \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\132\128 \128\b \002\020\000\016\000b\000\002\000\bH\002\b\000\130\000!\000\001\000\006 \000 \000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000 \000\002\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\002\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000$\128\004\000\000\000\128\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\bH\002(\000\194\t!\192\001\016\006a\016a\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\000\007\001\000\012\\(\000\016\b\002\000\001\000\003\000\bp\016 \197\194\000\001\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\128\187\128\b2R\028\012\017 v\001f\017`0\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\018\000\002\000\000\000\001\000\016\000\000\000@\000\000\001 \000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bP\t\026\000\001$!\192\192\018\001!\018\000\016}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000$\193\004\192\004\000\128\000\000\000\000\b\0000\000\002H\016L\000@\b\000\000\000\000\000\128\003\000\000$\129\004\192\000\000\128\000\000\000\000\b\0000\000\002H\000L\000\000\b\000\000\000\000\000\128\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004}\246D\b/\227P\000L\028\030\227\139\002\131B~\018-X\170\2233=\001@\254\000\000x\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\000\128\193#\144\000\001\128\000\001\140\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\175\235w\253\155\239\247\255\252\157?\230!\003\158@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\163a\136G\226\173\245#\211\230/\144@\025\174\184\018\016\132@\b\012\0189\000\000\024\000\000\024\192#a\000E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\004\000(!@\192\000\000 \016\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131!\136G\224,\229\"\211\227!\176@\025,\184\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\131\000\000\000@\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\167\225 \197\138\173\2437\208\020\015\226\000\003\142\n~\018\012X\170\2233=\001@\254 \0008\224\167\225\"\197\138\173\2433\208\020\015\230\000\003\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\005\002\000@\000\000\129\000\000\000\016\000\000\000\000\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004\\(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\128\004\193\"\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\026\000\000\020@\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\003\000\002p\016\000\197\194\000\001\000\000\000\000\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\004\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\128\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\022\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\011\184\000\131!!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\012X\011\184\000\131%!\192\193\018\007`\022!\022\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000@\000\000@\000\002\000\000\000\001\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\002\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000 \000\000\000\017 \000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000@\000\002\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\003\184\000\131!!\192\193\018\007`\022!\020\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\0000\000\007\001\000\012\\ \000\016\000\000\000\000@\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000 \000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000 \000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\001\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\0002\016\004\b\000L\018-\000\016\026\000\000\016@\003!\000@\192\004\193&\144\001\001\128\000\001\004\0002\016\004\b\000L\018i\000\016\024\000\000\016@\003!\000@\128\004\193\"\144\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147)\027P\144\020\193&\176\001\001\148 mU\000\000\016\000\b\000@\000\001\000\000\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\145\181\t\001L\018o\000\016\027A\006\213P\001\000\000\000\000\000\128\"\128\000\000\000\000\000\000\b2\016\132\b\000L\018-\000\016\026\000\000\144@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\144\000\027\000\000\016\000\004\000\000\000\020\000LQ\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\147!\027@\128\020\193&\208\001\001\180\000MU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t2\017\180\b\001L\018m\000\016\027@\004\213P\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000@\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\001\000\000\016\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\000\001\176\000\001\000\000@\000\000\001@\004\197\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\002@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001 \000\000\000\000@\000\000\000\000\004\133\016\131!\002@\128\004\193\"\208\001\001\160\000\001D\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\016\000\000\000\000@\000\000\000\000\004\129\016\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\016\000\000\004\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\t\001\144\000M\021\128\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016D\012\130L\018m\000\016\026\000\000\016@\001\002\000@@\000\129\004\000\000\016\000\000\000\b\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\003\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\b\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\000@\b\000\000\000\002\000\000\000\000\000\000\000\000\000\000\003\000\000$\128\004\192\000\000\128\000\000\000\000\b\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\016\000\0000\000\007\129\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\000\"\001@0\000\007\001\000\012\\ \000\016\000\000\000\000\000\196\128*\128\b0\018\028\000\017\000v\001\"\001LH\002\168\000\131\001!\192\001\016\007`\018 \004\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\018 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\001\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\001\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\003 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\000\000\000\000\000\000\000\000\000\000\016\016\016\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\017\000v\016\"\000@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\t!\192\001\016\007a\002 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012H\002\168\000\131\001!\192\001\016\007`\002 \004\000\128\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\b\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\000&\000@P \132\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\025\000v\016&\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\004\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\002E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\128\000\016\000\000\000\000\000\000\000@\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\001!\000D\000\128\193#\144\000\001\128\000\001\140\012\000\001\016\000\000\000\000\000\0000\001\005\002@\000#a\000E\194\141\241'\208\004\015\130\000\001\142\0026\016\004X(\223\018}\000@\248 \000\024\224#a\000E\130\141\241#\208\004\015\130\000\001\142\000\018\016\004D\b\012\018y\000\000\024\000\000\024\192\001!\000D\000\128\193'\144\000\001\128\000\001\140\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\001!\000D\000\128\193#\144\000\001\128\000\001\140\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237s\251\255\182\031}\183\255\223\001\000\000\000\000\000\192#\128\000\000\000\000\000\000\n6\024\132~*\223R=>b\249\004\001\154\235\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\000\000\000\000\004\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n6\016\132X(\223\018=\000@\248\000\000\024\224\163a\bE\130\141\241#\208\004\015\128\000\001\142\b2\016\132\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\004\000\000\000\016\000L\017\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224#a\000E\194\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018}\000@\248\000\000\024\224#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\016\004\012\000L\018m\000\016\026\000\000\017@\003!\000@\128\004\193&\208\001\001\160\000\001\020\0002\016\004\b\000L\018-\000\016\026\000\000\017@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\001\000\000\000\000\001\000\000@\000\000\000\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\0002\144\005\r\000L\018k\000\016\024\000\000\016@\003)\000P\144\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018+\000\016\024\000\000\016@\002\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\128\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\001\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\0026\016\004X(\223\018=\000@\248\000\000\024\224\003!\000@\192\004\193&\208\001\001\160\000\001\004\0002\016\004\b\000L\018m\000\016\026\000\000\016@\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\018\016\004D\b\012\018y\000\000\024\000\000\024\192\001!\000D\000\128\193'\144\000\001\128\000\001\140\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\196\148\187\131\232>\022\028\015\251`w\219~p\240\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\215?\191\251a\247\219\127\252\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\012\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\197\189\187\215\248\190\215?\191\251a\247\219\127\252\252IK\184>\131\225a\192\255\182\007}\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237s\251\255\182\031}\183\255\207\196\148\187\131\232>\022\028\015\251`w\219~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\127[\188~\171\255s\253\255\214\255x\183\255\239}\246D\b/\227P\000L\028\030\227\139\002\131B6\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193&\208\001\001\128\000\001\004\0002\016\004\b\000L\018-\000\016\024\000\000\016@\135\169\"\208\152$\211>\176\025\001\246\000o\021H:\024\132~\002\206R->2\027\004\001\146\203\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\0002\016\004\b\000L\018)\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b0\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\001\144\000\000\000\000@\000\000\001\000\000\000\000\131\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000 \000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\128\000\025\000\000\000\000\004\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000%\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b8\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\016\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\193\016\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\131!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000H\017\b2\016\004\b\000L\018-\000\016\026\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\128\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\144\006`\000 \004\132\128\"\128\b\"\018\024\012\025\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\000\000\000\000\000\000\000\000\000\128\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\t\176>\000\192@@>\002\001\000\005\134\003\163a\011E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\016\004@\b\012\0189\000\000\024\000\000\024\192\197\189\187\215\248\190\215?\191\251a\247\219\127\253\240\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\001\000\000\000\000\000\192\002\128\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\b\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\001\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000P\000\000\000\000\000\000\000\000\b\000(\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\2426\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\012[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\197\189\187\215\248\190\223?\191\251a\247\219\127\252\2426\016\004X(\223\018=\000@\248\000\000\024\224\196\148\187\131\232>\022\028\015\249`w\139~p\252[\219\189\127\139\237\243\251\255\182\031}\183\255\207#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\197\189\187\215\248\190\215?\191\251a\247\219\127\253\252[\219\189\127\139\237s\251\255\150\031x\183\255\207\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\131\161\136G\224,\229\"\211\227!\176@\025,\176\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\0002\144\005\t\001L\018+\000\016\024\000\000P@\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\016\000\000\000\001\004\000\000\000\016\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\020\193\"\176\001\001\128\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\001\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015#a\000E\130\141\241#\208\004\015\128\000\001\142\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\004\129\016#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\1306\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016\004\b\000L\018-\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129!\bD\000\128\193#\144\000\001\128\000\001\140\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\206\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0026\016$X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001!\000D\000\128\193#\144\000\001\128\000\001\140\004\000\000\000\000\000\000\000\000\0000\000\005\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\017\000\000\000\000\000\000\000\000\016\000\000\000\b\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\129\000\001\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\003\000\000P\000\000\000\016\000\000\000\000\012\0028\000\000\000\000\000\000\000\192\000\017\000\000\000\000\000\000\003\000\016P$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\251`w\219~p\240\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\145\003\224\012\004\004\003\224`\016\000X 8\000\001\000\000\000\000\000\000\000\004\000\000\000\000\000\128\000\000\000\000\000@\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\128\004\000\b\000\000\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\004\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\025\000f\000\002\000@\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000@\000\000\000\000\016\000\004\000\000\000\016\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\025\000f\000\002\000@\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000@\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\004\000\b\000\000\000\004\000\0000\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\001\016\000\000\000\000@\000\002\000\000\000\000\016\000\000\017\000\000\000\000\004\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@@\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\000\000\000\000\004\000\000 \000\000\000\001\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\162\128\b0R\028\000\025\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\128\162\128\b R\028\000\025\000f\001\002\016@0\000\006\000\000\012\\(\000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\133\128\"\128\b R\028\000\025\000f\001\002\016HX\n(\000\131\005!\192\001\144\006`\016!\004\000\000\000\000\000\000\000\004\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002\016D\b\000L\018m\000\016\024\000\000\016@\003!\004@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\128\000\001\004\bH\002(\000\130\001!\128\001\144\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\148\187\131\232>\022\028\015\249`w\139~p\244\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\020\012IK\184>\131\225a\192\255\150\007x\183\231\015\128\000\136\003\224\012\004\004\003\224 \016\000| 0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\004\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000v\000\002\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000@\000\000\000\000@\000\000\000\000\000\000\000\003\000\004\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@0\000\000\000\000\000\000@\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\001\000\000@\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\0002\016\004\b\000L\018-\000\016\026\000\000\016@\016\000\002\000\000\000\000\004\000\000\000\000\000H\017\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\223d@\130\2545\000\004\193\193\2388\176(4'\225\"\213\138\173\2433\208\020\015\224\000\007\142\000\016 \004\004\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016\000\000\001\000\000\000\000\000\132\128\"\128\b \146\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\192\004\000\000\000\000\000\000\000\000\000\000\000\000\000\012\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\018(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \018\028\000\017\000v\000\006\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\b\000\bH\002(\000\130\001!\192\001\016\006a\000!\000\001\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\132\128\"\128\b \018\028\000\017\000f\000\002\000\bH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \000\132\128\"\128\b \018\024\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\128\"\240\024 \199\210\000\017\000`\000\002\000\bH\002(\000\130\000!\000\001\000\006`\000 \000\001\000\000\000@\000\000\004\000\000\000\000\000\000\b\000\016\000\000\004\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \130\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \130\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\128\004\000@\000\000\004\000\000\000\000\000\000\000\000\016\000\000\004\000\004\000@\000\000\000\000\000\000\000\001\000\000\000\000\000@\004\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000v\000\018\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\004\000\000\000\000\004\000\000\000\000\000\000\000\0000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\020\000\b\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\b!\128\001\000\006a\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\003\000\000\000\000\000\000\004\000\000\000\000\000\000\000\0000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\196\128\"\128\b0\002\028\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\016\000\004\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\132\128\"\128\b \002\024\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000@@@ \193\004\000\000\016\000\000\000\000\000\016\004\004\000\002\012\016@\000\001\000\000\000\000\000\001\000@@\000 \193\000\000\000\016\000\000\000\000\012H\002(\000\131\000!\192\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\004\000\b\000`\000\000\b\000\000\000\000\001 \000\000\000\000\128\006\000\000\000\128\000\000\000\000\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\132\128\"\128\012 \002\028\000\016\000f\000\006\000\000\136\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000@\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000 \000\002H\000@\000\000\b\000\000\000\000\000\128\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\b@\000\b\000\000(!@@\000\000 \016\000\000\132\000\000\128\000\002\130\016\004\000\000\002\001\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\016\004\000\000\002\001\000\000\000\128\000\000\000\004\004\000@\000\000\000\000\000\000\000\b\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\004\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\001 \016\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\018\001\000\000\000\016\000\004\000 \005\016`\000\000\000\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\b\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000@\000\000\000\000 \000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\004\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\001\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002\168\000\130!!\192A\016\007`\016 \004\132\000\000\128\000\002\002\028\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\198\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\016\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\000\b@\000\b\000\000 !\128@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\004\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000@\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000Q\002\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\bX\n\168\000\131\004!\192\001\016\007`\000`\004\003\000\000`\000\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\001@\000\000\002\000\000\000\000\004\000\000\000\000\000@\016\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\0000\000\006\000\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\133\128\170\128\b0B\028\000\017\000v\000\002\000HX\n\168\000\131\004!\192\001\016\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130\000!\192\001\000\007`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001 \r\\ \000\016\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\000\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\128\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \004\002\000\000$\128\004\192\004\000\128\000\000\000\000\b\000 \000\002H\000L\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\007`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\016 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\000!\000\001\000\006`\000 \004\002\000\000$\128\004\192\004\000\128\000\000\000\000\b\000 \000\002H\000L\000\000\b\000\000\000\000\000\128\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\003 \000x\016\000\197\194\128\001\000\128 \000\016\0000\000'\001\000\012\\ \000\016\000\000\000\001@\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\133\160\"\128\b \146\026\000\017\000\230\001\002\000HH\002(\000\194\001!\192\001\016\006`\016a\004\132\128\"\128\b \018\028\000\017\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\016@\018\000\000\000\000\b\000 \000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000HH\002(\000\130\000!\000\001\000\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\007`\016 \004\001 \000\b\000\000\128\002\128\000\000\128 \000\016\000\018\000\000\000\000\b\000(\000\000\b\002\000\001\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\194\001!\192\001\016\006`\016a\004\132\128\"\128\b \018\028\000\017\000f\001\002\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\004\000\000\000\000\000\000\000\000\136\000\000\004\000\004\000`\000\000\000\000\000\000\000\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\000\000\128\000\002\130\020\012\000\000\002\001\000\000\b@\000\b\000\000(!\000\192\000\000 \016\000\000\132\000\000\128\000\002\002\016\012\000\000\002\001\000\000\000\128\000\000\000\004\004\000@\000\000\000\000\000\000\128\000\000\000\000\000@@\004\000\000\000\000\000\000\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000@@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\192\192\000\000 \016\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\002@\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\128\000\004\000@\000\000\000\000\000\000\128\000\000\000\b\000\000@\004\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\0008\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\b\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\128\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\0008\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\001\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\0026\016\004X(\223\018=\000@\248\000\000\024\224\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241'\208\004\015\128\000\001\142\0026\016\004X(\223\018=\000@\248\000\000\024\224\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000@\002\000\209\006\000\000\004\000\000\000\b\000\016\000\004\000 \r\016`\000\000@\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\003!\004@\200\004\193&\208\001\001\128\000\001\004\007\223d@\130\2545\000\004\193\193\2388\176(4\003!\004@\128\004\193&\208\001\001\128\000\001\004\0002\016D\b\000L\018-\000\016\024\000\000\016@\003!\000@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\128\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000@\000\000\000\000\000\000\128\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\004\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193&\176\001\001\128\000\001\004\0002\144\005\t\000L\018+\000\016\024\000\000\016@\003)\000P\144\020\193\"\176\001\001\128\000\001\004\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000@\016\000\004\000 \r\016 \000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bZ\146\173A\138-3\251\193\016\030`\016x\212\133\169*\212\024\162\211?\188\017\001\230\001\007\141@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002\168\000\130!!\192\193\016\006`\016`\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\016\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\128*\128\b\"\018\028\012\017\000f\001\006\001@2\016D\b\000L\018-\000\016\024\000\000\016@\003!\000@\128\004\193\"\208\001\001\128\000\001\004\000\000\000\000\000\000\000\000\128\000\128\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\001\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\004\000 \r\016 \000\000@\000\000\000\000\132\000\000\128\000\002\002\028\012\000\000\002\001\000\001\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\`\000\016\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\b@\000\b\000\000 !\128\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\128\000\002\002\024\012\000\000\002\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000\192\000\000 \016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\003\000\000p\018\000\213\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\001\000\000@\002\000\209\002\000\000\004\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000 \004\003)\000P\144\004\193\"\176\001\001\144\000\005\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\000\002\000HH\002(\000\130\001!\000\001\016\006`\000 \004\b\000\000\000\000\000@\006\000\000\000\000\000\000\000\000\128\000\000\000\000\004\000 \000\000\000\000\000\000\000\000\000\000\000\000\000@\002\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\003)\000P\144\004\193\"\176\001\001\144\000\005\004\bH\002(\000\130\001!\128\001\016\006`\000 \004\132\128\"\128\b \018\016\000\017\000f\000\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\016\000f\000\002\000\0002\016D\012\000L\018m\000\016\024\000\000\016@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\017\000f\000\002\000HH\002(\000\130\001!\128\001\016\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\000\001\016\006`\000 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\016\000f\000\002\000\bH\002(\000\130\001!\000\001\000\006`\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\016\000\025\000f\000\002\000@\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\000\006`\000 \000\132\128\"\128\b \018\016\000\016\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\196\128*\128\b0\146\028\000\017\000v\000\"\000L\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000L\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\128\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b@\000\b\000\000 !\000\192\000\000 \016\000\000\128\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\129\002\000@@\000\129\004\000\000\016\000\000\000\000\000\016 \004\000\000\b\016@\000\001\000\000\000\000\000\001\002\000@\000\000\129\000\000\000\016\000\000\000\000\000\000\000\128\000\000\b\000@\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\016\004\004\000\002\012\016\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\128\000\001\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\128\000\000\000\000\000\000\000\000\000\002@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b2\016\004\b\000L\018-\000\016\026\000\000\017@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012IK\184>\131\225a\192\255\150\007x\183\231\015\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\001 \000\b\000\000\128\002\000\000\000\128\000\000\016\000\018\000\000\000\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\194\001!\192\001\016\007`\000a\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\bH\002(\000\130\001!\192\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\132\128\"\130\b \018\024\000\017\000v\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\024\000\017\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\001!\128\001\016\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\002\000\000\000\000\000\000\000\016\000\000\000\000\000\000\000 \000\000\000\000\0000\000\006\000\000\012\\`\000\018\000\002\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\001\000\000\000\004\000\000\000\018\000\000\000\000\000\003\000\000`\000\000\197\194\000\001 \000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000@\000\000\016\000\000\000\000\004\000\000\000\016\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\128\000\000\000\000@\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000\000\007\001\000\012\\ \000\016\000\000\000\000\000\000\000\b\000\000\000\000\004\000\000\000\000\000@\000\000\000\000\000\000\004\004\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bH\002(\000\130\001!\192\001\016\006`\016 \004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003 \000x\016\000\197\194\128\001\000\128 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\000!\128\001\000\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\bH\002( \130\000!\128\001\000\007`\017 \004\003 \000x\016\000\197\194\128\001\000\128 \000\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \002\024\000\016\000f\001\002\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\018\000\000\128\000\b\000 \000\000\b\000\000\001\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\016\bH\002(\000\130\000!\128\001\000\006`\000!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\b\000\000\016\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\128\"\128\b \018\028\000\017\000f\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \002\016\000\016\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\192\002\000\000\000\128\000\000\000\b\000\b\128~\002\194@\000>\"\001\004\001\130\139\000\000\b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000\128\000\128\007\224,$\000\003\226 \016@\024(\176\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001 \000\000\000\000\128\002\000\000\000\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000p\016\000\197\194\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000#a\000E\130\141\241#\208\004\015\128\000\001\142\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\128\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003!\000@\128\004\193\"\208\001\001\160\000\001\004\000\000\000\000\000\000\000\000@\000\000\000@\004\129\016\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\000\000\000\000\000\192\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\016\000\000\000\016\000\000\000\000\012\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\000\016\000\000\000\000\004\000\000\000\000\000\000\000\000\000\005\161 \128\b \210\016\016\017\000\228\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\016\000\017\000d\016\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\000\001\000\006\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\000\000\128\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\225 \197\138\173\2433\208\021\015\228\000\003\142\002~\018\012X\170\2233=\001P\254@\0008\224\004\128 \128\b \018\016\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\128 \128\b \018\024\000\017\000d\000\002\000\000H\002\b\000\130\001!\000\001\016\006@\000 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000H\002\b\000\130\001!\128\001\016\006@\000 \000\004\128 \128\b \018\016\000\017\000d\000\002\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000@\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000") and start = 13 and action = - ((16, "C\170P\226Ff\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021HFf\000\000\000\000\020XFfC\170\020\182\000-\000[\\(\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\238\006\168\000\218\000\000\003\188\t|\000\000\001\208\003\232\nt\000\000\000\244\004\198\011l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\000\0046T\016\000\000\000\000\000\000\005.\000\000\000\000\000\000\005\022\005\b\000\000\000\000T\016H\254\020X\021\178^\128\020X\\\142P\226\020XR,\000\000\007\168\000\000Dp\007\214\000\000C\146\000\000\027\158\000\000\000\000\004\246\000\000\005.\000\000\000\000\000\000\002J\000\000C\146\000\000\006&v\246]\160d\194\000\000\132l\134\028\000\000LP_\014\000\000X\\\026\206K\200\005.p\026FfC\170\000\000\000\000P\226\020XS\148Dp\007\012v\246\000\000\128\178FfC\170P\226\020X\000\000\000\000\016x\023\022\001N\b\004\000\000\002\138\b\022\000\000\000\000\000\000\000\000\000\000\020X\000\000A\206i\164C\170\000\000\000\000P\206\020XZ\024W\200\000\000\004\002\000\000\000\000\005\242\000\000\000\000H\166\004\002\024\138\003\130\0020\000\000\000\000\003\172\000\000\021\178\006\212\006\160\020X\028\254\020XC\170C\170\000\000M\\M\\\020X\028\254A\248\020X\000\000\000\000\000\000P\226\020X\000\000\000\248\000\000W\200y\188zJ\000\000\b\004\000\000\n\196\000\000\000\000A\214T\016\134h\000\000h\142\134h\000\000h\142h\142\000b\006:\0008\000\000\020\190\000\000\007b\000\000\000\000\b\198\000\000\000\000\000\000h\142\005.\000\000\000\000V\222T\016T\132_\014\000\000\000\000N*\000b\000\000\000\000_\014\007\162T\016\000\000O _\014P\022\000\000\000\000\000\000\011\190\000\000h\142\000\000\001\000\1310\000\000T\016\005\216T\016\000\000\022\\\b\150\005.\000\000\000\000\023\224\000\000\006\208\000\000Y\128\011\230\000\000\b\162h\142\012\182\000\000\012\222\000\000\007\200\000\000\000\000\004\184\000\000\000\000\000\000\021 4W\200P\206\020XW\200\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000M:\027v\000\000\000\000\000\000\001\244&\174t<\000\000\000\000P\206\020XW\200\000\000\000\000{hW\200\136.zJ\000\000\136v\000\000W\200\000\000\000\000X\180\000\000\000\000\000\000\n.\000\000\022\168\000\000\000\000z\214\000\000\136\208{\030\000\000\137\018\t\002\000\000\000\000z\214\000\000\004\024\000\000\000\000DHt\200\000\000\000\000\000\000Bn\023|\019\252\023\174\000\000\000\000\000\000\000\000\004\250\000\000\000\000Z\204\b\254\011F\000\017T\016\002\204\011\148\000\000\000\000\t\156\011F\006\172\000\000i\186P\234M\\\020X\028\254\000-\000\018\0020\000\000\n\240\021\178\021\178\000-\000\018\000\018\021\178\000\000jL\0050Dp\b\004\000\236\137`\000\000T\016ebT\016_ f\002T\016\000\144T\016f\156\000\000\000\000\020d\0008_\192\b\022\0008`\024\000\000j\230\0050\000\000\021\178k\128\000\000\b*\t\014`\184\000\000\000\000\000\000\000\000\000\000\000\000\001B\000\000\000\000\003\144\000\000\007r\028\254\000\000\\\192A\248\000\000\031\138\000\000\000\000\021\178\002\152\000\000\000\000\000\000\000\000[\132\000\000\001\200\000\000UP\001\130\005\"\000\000\0226V\170P\226\020XG,P\226\020X\016x\016x\000\000\000\000\000\000\000\000\001\240\024&B\188\000\000Q\150RJM\\\020X\028\254\b`\021\178\000\000\004*\000\000R\254S\178{\182I~T\016\002\128\000\000P\226\020X\000\000u\016\020Xy\188W\200E\178\000\000P\226\020Xw\\\004~\000\000W\200A\012T\016\003x\006\172\011\196\000\000\000\000\000\000H\166\003\138\003\138\000\000\012\154p\156\000\000P\206\020XW\200\025R\000\000P\226\020X\016x\0226\016x\002\232\023\240\000\000\000\000\016x\012\148\000\000\r\000\000\000\016x\003\224\rX\000\000'\166\000\000\b\196\000\000\000\000\026\022\000\000\017p\023.\000\000\000\000\000\000\000\000\b\020\000\000\000\000\027\014\000\000\028\006\000\000\028\254\000\000\018h\024&\000\000\000\000\000\000Ff\000\000\000\000\000\000\000\000\029\246\000\000\030\238\000\000\031\230\000\000 \222\000\000!\214\000\000\"\206\000\000#\198\000\000$\190\000\000%\182\000\000&\174\000\000'\166\000\000(\158\000\000)\150\000\000*\142\000\000+\134\000\000,~\000\000-v\000\000.n\000\000/f\000\0000^\020XW\200ZJI\146\003\138\014,l\012W\200\000\000\000\000\000\000h\142\000\000\028\018\134\028\000\000\026\"T\016\029\220\r\198\000\000\000\000\000\000\000\000l\012\000\000\000\000\005\242\014\208\000\000B\170\000\000\000\000\135\176\000\000\bB\000\000\000\000K\200\003\138\014\140T\016\b`\000\000\000\000\007\006\005.\000\000T\016\n\146\000\000\000\000\014\244\000\000\000\000\000\000I\190T\016\0118\000\000\000\000\030*\000\000\000\000{\254\000\000\031\"|\138\000\000 \026|\210\000\000!\018\t\250\000\000\000\000\000\000\000\000\"\nW\200#\002p\234p\234\000\000\000\000\000\0001V\000\000\t\188\000\000\000\000\000\000q\140\000\000\000\000\002\138\023\248\000\000\b\226\000\000\000\000]bKl\000\000\000\000\n\180\000\000\000\000\000\000\rh\000\000\000\000\000\000\016x\004\216\024\232\000\000\t\218\000\000\005\208\000\0002N\000\000\012\142\000\000\006\200\000\0003F\000\000\015\138\007\192\000\0004>lt\000\000(\158\000\000\n\"\b\184\000\00056\000\000\r\178\t\176\000\0006.\000\000q\150\n\168\000\0007&\005\180\025\016\000\000\nX\011\160\000\0008\030\000\000\r\200\012\152\000\0009\022\000\000\r\172\r\144\000\000:\014\014\136\000\000;\006\015\128\019`\000\000\000\000\000\000\n\210\000\000\000\000\014`\000\000\000\000\015\156\000\000\011\002\000\000\000\000\000\000\015\028\000\000\015*\000\000\000\000J~\003\138\015\218p\156_\014\000b\000\000\000\000p\156\000\000\000\000\000\000p\156\000\000\015\208\000\000\000\000\000\000\000\000\000\000\000\000;\254W\200\000\000\000\000\016\014\000\000<\246\000\000=\238\000\000#\250\000\000\000\000\n\130\000\000\000\000W\200\000\000\000\000}j\011P\000\000\000\000G,\000\000\014\148\000\000\000\000V\020\000\000\014~\000\000\000\000\001\130\011\254\000\000\000\000\0226\022\028\b\004\000\000B>\000\000!,\023\176\021\220\000\000\000\000\014\002\000\000\000\000\001\238\025\030V\180\000\000\025\030\000\000\tX\000\000\000\000\014\142\000\000\000\000g>\t\004\004H\000\000\000\000\012H\000\000\000\000\014\192\000\000\000\000\000\000\020X\028\254\005\168\000\000\000\000\023&\003\130\0020\003\136\028\254w\228\021\178\001B\028\254xb\015\146\000\000\000\000\003\136\000\000H\232\019\248\021\204\000\000\007X\016\"\000\000\016$\000V_\014\006\196\000\000\016\n\015\170K\200\n|T\016\030\128\020F\r\018\004\248\000\000\031x\016\\\000\000\006\196\000\000\000\000\016\130_\014aX\000\000g\144_\014\016Z_\014m\012a\248\001N\016*\000\000\000\000\000\000\020X\128\252\000\000W\200p\234\000\000\000\000\016\156\000\000\000\000\000\000>\230\016\196y\188?\222h<\000\000\000\000HJ\000\000\005\128\000\000L\136\000\000\020X\000\000\021\178\006\026\000\000\128\178\000\000\020X\028\254\128\178\000\000\025D\023\022\001N\005.\130\144\021\178}\248p\234\000\000\005r\t\168\0020\003\136p\234\132\224\003\130\0020\003\136p\234\132\224\000\000\000\000\003\136p\234\000\000FfC\170W\200\027B\000\000\000\000FfC\170M\\\020X\028\254\128\178\000\000\020\182\000-\000[\015\240T\016\0120\016\190\131P\000\000p\234\000\000H\232\019\248\021\204x\186\023\228\0118~,\nZ\016\b\020Xp\234\000\000\020Xp\234\000\000h\142ff\019\134\002\222\001N\0008N\234\000\000\001N\0008N\234\000\000\025D\005r\n\160\0212\bZ\000\000N\234\000\000\0020\016\016\021\178p\234\134\222\003\130\0020\016 \021\178p\234\134\222\000\000\000\000\tX\000\000O\224\000\000\021\178\131\132N\234\000\000\b\242\000\000H\254\020X\021\178p\234\000\000H\232\019\248\021\204rFB\138\026\222\019\170\002\142\000\000\011vC\146\000\017\000\000\016\176\016b\024\196\020XT\184T\016\0120\000\000W\150\001N\005\204\r\216\000\000\n\024\000\000\016\188\016FT\016O(\000\000\0032\004\212\r\218\000\000\n\236\000\000\016\192\016JK\200\r\028T\016K\182O(\000\000UP\020X\024\196\016\232\011\028\001N\000\000\014\012\024\196T\016\012\208\000b\000\000T\016\n$\n\218\000\000\000\000mf\000\000\000\000\014b\024\196m\228O(\000\000\020XT\016\012\226T\016V\\O(\000\000\014\144\000\000\000\000O(\000\000\000\000W\150\000\000p\234\132\238\019\170\002\142\011v\016\218\016\140\024\196p\234\132\238\000\000\000\000\019\170\002\142\011v\016\230\016\138M\252LZ_\014\017\016M\252h\142\020\184\017\030M\252_\014\017 M\252n\132o\004\000\000\129\140\000\000\000\000p\234\134\236\019\170\002\142\011v\017\022\016\162M\252p\234\134\236\000\000\000\000\000\000ff\000\000\000\000\000\000\000\000\000\000\000\000N\234\000\000\133\128\020XDp\017 v\246\000\000\128\178\133\128\000\000\000\000\1358\020XDp\017*\016\188]\160\135\176\006\196\017l\000\000\000\000o\130rF\020X\000\000~\200\021\204\000\000\000\000\128\178\1358\000\000\000\000\000\000y6D\228I\154\006\196\017v\000\000\000\000\000\000rF\020X\000\000\006\196\017z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\014\168B\138\019\170\002\142\011v\017Xr\182\023\204\020XZ\024j\190\020(\001N\006\196\017Z\011l\000\000\000\000\017\b\000\000\000\000a\152\000\000\007\188\r\230\000\000\r\140\000\000\017`\016\244T\016d\240\017r\011\150\000\000\000\000\017\"\000\000\000\000\020F\0032\014\210\000\000\017~s8\137\172\003\138\017\028T\016\014 \000\000\000\000\017<\000\000\000\000\000\000a\152\000\000\0070\014\246\000\000\r\212\000\000\017\168\0176K\200\000\000\017\180s\186\137\248\003\138\017RT\016\015\024\000\000\000\000\017d\000\000\000\000\000\000\020X\000\000a\152\000\000\020z\020X\023\204\023\204u\168Ff\020X\128\252W\200\021\162\000\000\012V\001N\000\000\014\220\023\204T\016\014\186\b\004\000\000\020XW\200r\182\023\204\rh\023\204\000\000D\142Et\000\000bR\000\000\000\000b\238\000\000\000\000c\138\000\000\014\238\023\204d&\128\252W\200\021\162\000\000\000\"\000\000\000\000M\252\r\026\000\000\000\000d.\017\186\000\000a\152\000\000\023\204d.a\152\000\000\020XT\016a\152\000\000\015\136\000\000\000\000a\152\000\000\000\000j\190\000\000\129\192M\252\017r\023\204\130\\r\182\000\000p\234\133\142\019\170\002\142\011v\017\210r\182p\234\133\142\000\000\000\000\000\000\135\248P\206\000\000\000\000\000\000\000\000\000\000\000\000\132\022p\234\000\000\133\128\000\000\000\000\000\000\000\000p\234\135\248\000\000\018\014\000\000\000\000\132\022\018\020\000\000p\234\135\248\000\000\000\000\015\222\000\000\000\000i4\0032\000\000\000\000DH\000\000T\016\015\n\000\000j\190\015\240\000\000\000\000\000\000\015\156\000\000\000\000\000\000M\\\020X\028\254\006\178\000\000Z8\000\000\007p\000\000\000*\000\000\000\000\0184\000\000\018\\y\188\000\000@\214\018@\000\000\000\000\0182\026R\028B\021\204v0\023\228\020X\000\000\128\178\000\000\000\000\000\000\000\000\000\000\000\000\000\000v8\023\228\020X\000\000\015\190v\246\000\000\128\178\000\000\0184\026R\028B\128\178\000\000\018H\000\000\000\238\014\140\020X`\226\000\000\000\000\028\190y\242\000\000\000\000\017\214\000\000\018.T\016\000\000\015\170\012\166\000b\000\000\000\000T\016\004R\006B\000\000T\016\012\018\006\196\018\\\000\000\000\000\127\"\000\000\000\000]\160\000\000\128\178\000\000\018V\026R\029:N\234\000\000\000\000\000\000\000\000\015\214\127\188]\160\000\000\128\178\000\000\018`\026R\029:N\234\000\000\016\026\000\000\000\000\b\n\000\000p\234\000\000\018t\000\000\000\000\017\230\000\000\017\236\000\000\017\252\000\000\000\000\\\142\018\000\000\000\000\000%\182\\(\018\158\000\000\000\000\000\000\014z\011D]\232\018\164\000\000\000\000\000\000\000\000\000\000\000\000\018\022\000\000\023\228\000\000\018\030\000\000T\016\000\000\t\b\000\000\000\000\018 \000\000\000\000\0008\000\000\003\210\000\000\000\000\000\000\001\214\000\000\016\030\000\000\0180\000\000W\200\022\168\000\000\000\000\012<\018H\000\000\000\000\018B\r$G,\005.\128:\000\000\000\000\000\000\000\000\000\000YL\000\000\000\000\018\234\000\000\138<\000\000\016p\018\236\000\000\018\238\000\000G\224G\224[\190[\190\000\000\000\000p\234[\190\000\000\000\000\000\000p\234[\190\018Z\000\000\018f\000\000"), (16, "\t)\t)\000\006\001\002\001\190\t)\002\186\002\190\t)\002\234\002\130\t)\003\145\t)\018\158\002\246\t)\023\158\t)\t)\t)\025F\t)\t)\t)\001\210\004A\004A\004F\002\250\t)\003>\003B\t\242\t)\001\206\t)\023\162\003F\000\238\002\254\025J\t)\t)\003\214\003\218\t)\003\222\0032\003\234\003\242\006\214\007\018\t)\t)\002\178\001\206\006\242\003:\t)\t)\t)\b\026\b\030\b*\b>\001*\005v\t)\t)\t)\t)\t)\t)\t)\t)\t)\b\178\000\238\t)\015\154\t)\t)\003\145\b\190\b\214\t*\005\130\005\134\t)\t)\t)\r\190\t)\t)\t)\t)\002j\002\154\r\238\t)\006\178\t)\t)\0035\t)\t)\t)\t)\t)\t)\005\138\b2\t)\t)\t)\bJ\004r\t>\0035\t)\t)\t)\t)\012\245\012\245\023\166\n\206\004\154\012\245\n\218\012\245\012\245\000\238\012\245\012\245\012\245\012\245\004A\012\245\012\245\001f\012\245\012\245\012\245\003i\012\245\012\245\012\245\012\245\004A\012\245\015\250\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\007\190\007\030\007R\012\245\004\226\012\245\012\245\012\245\012\245\012\245\004A\012\245\012\245\004A\012\245\003\238\012\245\012\245\012\245\000\238\007\194\012\245\012\245\012\245\012\245\012\245\012\245\012\245\000\238\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\004A\012\245\012\245\007\138\012\245\012\245\001j\004A\007.\004A\012\245\012\245\012\245\012\245\012\245\004A\012\245\012\245\012\245\012\245\012\245\000\238\012\245\012\245\0076\012\245\012\245\000\238\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\012\245\b\"\004A\012\245\012\245\012\245\012\245\001\181\001\181\001\181\001f\015Z\001\181\003i\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\015\006\001\181\007\222\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\003\134\003\138\001\181\000\238\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\006\246\001\181\001\181\001\181\b\022\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\002f\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\027\187\001\181\001\181\018\142\007\250\007\030\007n\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\014\202\bb\001\181\005\186\001\181\001\181\007\254\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\182\001\181\001\181\001\181\001\181\001\181\n]\n]\002\225\007\138\r\025\n]\003\149\n]\n]\000\238\n]\n]\n]\n]\001\186\n]\n]\r\025\n]\n]\n]\000\238\n]\n]\n]\n]\002j\n]\000\n\n]\n]\n]\n]\n]\n]\n]\n]\024\222\007\030\b\174\n]\004A\n]\n]\n]\n]\n]\000\238\n]\n]\012\"\n]\003\018\n]\n]\n]\002\225\024\226\n]\n]\n]\n]\n]\n]\n]\004A\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\003\149\n]\n]\007\138\n]\n]\004A\004A\007\030\004A\n]\n]\n]\n]\n]\004\001\n]\n]\n]\n]\tV\000\238\t\134\n]\005\241\n]\n]\007\202\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\n]\003\146\n]\n]\n]\n]\n]\003\173\003\173\001r\007\138\006\242\003\173\t\022\003\173\003\173\000\238\003\173\003\173\003\173\003\173\000\238\003\173\003\173\006\137\003\173\003\173\003\173\000\238\003\173\003\173\003\173\003\173\001\130\003\173\006Z\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\006\137\007\030\004\001\003\173\004B\003\173\003\173\003\173\003\173\003\173\015J\003\173\003\173\006^\003\173\t\005\003\173\003\173\003\173\005\241\b\146\003\173\003\173\003\173\003\173\003\173\003\173\003\173\015R\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\b\213\tN\t~\007\138\003\173\003\173\003\150\003^\b\230\027\171\003\173\003\173\003\173\003\173\003\173\004R\003\173\003\173\003\173\003\173\tV\000\238\t\134\003\173\b\"\003\173\003\173\003b\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\000\238\003\173\003\173\003\173\003\173\003\173\003\161\003\161\018\250\b\234\t\006\003\161\005R\003\161\003\161\t\005\003\161\003\161\003\161\003\161\001\146\003\161\003\161\006\154\003\161\003\161\003\161\002N\003\161\003\161\003\161\003\161\019\002\003\161\001\198\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\006\237\b\213\004A\003\161\002R\003\161\003\161\003\161\003\161\003\161\b\029\003\161\003\161\001\218\003\161\007\"\003\161\003\161\003\161\006\237\004A\003\161\003\161\003\161\003\161\003\161\003\161\003\161\004A\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\000\238\tN\t~\001\234\003\161\003\161\004A\004A\007\030\007^\003\161\003\161\003\161\003\161\003\161\001\222\003\161\003\161\003\161\003\161\tV\004A\t\134\003\161\004r\003\161\003\161\016v\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\006\237\003\161\003\161\003\161\003\161\003\161\t\217\t\217\018\206\007\138\b&\t\217\006\158\t\217\t\217\001\238\t\217\t\217\t\217\t\217\000\238\t\217\t\217\006\149\t\217\t\217\t\217\000\238\t\217\t\217\t\217\t\217\004A\t\217\007\222\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\006\149\007\030\018\214\t\217\000\238\t\217\t\217\t\217\t\217\t\217\005\217\t\217\t\217\001\206\t\217\012\130\t\217\t\217\t\217\0152\016\146\t\217\t\217\t\217\t\217\t\217\t\217\t\217\000\238\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\026N\t\217\t\217\007\138\t\217\t\217\r\002\003j\003\018\004A\t\217\t\217\t\217\t\217\t\217\002v\t\217\t\217\t\217\t\217\t\217\000\238\t\217\t\217\004B\t\217\t\217\003n\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\000\238\004A\t\217\t\217\t\217\t\217\t\209\t\209\004\242\001f\003i\t\209\007\005\t\209\t\209\025.\t\209\t\209\t\209\t\209\003\158\t\209\t\209\003\162\t\209\t\209\t\209\003\137\t\209\t\209\t\209\t\209\b\241\t\209\004^\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\007\222\026R\015\162\t\209\001\206\t\209\t\209\t\209\t\209\t\209\005\209\t\209\t\209\000\238\t\209\012\154\t\209\t\209\t\209\022\130\011Z\t\209\t\209\t\209\t\209\t\209\t\209\t\209\000\238\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\006\210\t\209\t\209\022\138\t\209\t\209\002\214\004V\007\030\b\241\t\209\t\209\t\209\t\209\t\209\002\142\t\209\t\209\t\209\t\209\t\209\0252\t\209\t\209\b\021\t\209\t\209\025>\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\t\209\012\185\b\241\t\209\t\209\t\209\t\209\t\225\t\225\021\246\007\138\007\210\t\225\011b\t\225\t\225\006\242\t\225\t\225\t\225\t\225\012\185\t\225\t\225\012\189\t\225\t\225\t\225\000\238\t\225\t\225\t\225\t\225\005F\t\225\004\174\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\012\189\007\030\021\254\t\225\002\190\t\225\t\225\t\225\t\225\t\225\005\209\t\225\t\225\003\022\t\225\012\174\t\225\t\225\t\225\015\138\026\226\t\225\t\225\t\225\t\225\t\225\t\225\t\225\0112\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\017\242\t\225\t\225\007\138\t\225\t\225\003\n\001\206\0116\005J\t\225\t\225\t\225\t\225\t\225\003\026\t\225\t\225\t\225\t\225\t\225\000\238\t\225\t\225\004B\t\225\t\225\002&\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\190\004\214\t\225\t\225\t\225\t\225\t\193\t\193\000\238\0022\007\222\t\193\t\146\t\193\t\193\005\002\t\193\t\193\t\193\t\193\004V\t\193\t\193\000\238\t\193\t\193\t\193\012.\t\193\t\193\t\193\t\193\t\150\t\193\007\154\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\006F\t\001\n\162\t\193\0122\t\193\t\193\t\193\t\193\t\193\011N\t\193\t\193\007\158\t\193\012\206\t\193\t\193\t\193\004b\014\254\t\193\t\193\t\193\t\193\t\193\t\193\t\193\b\134\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\006\242\t\193\t\193\014\226\t\193\t\193\006\170\006\194\001\002\001\190\t\193\t\193\t\193\t\193\t\193\001\222\t\193\t\193\t\193\t\193\t\193\006U\t\193\t\193\000\238\t\193\t\193\005.\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\t\193\006U\t\001\t\193\t\193\t\193\t\193\t\201\t\201\003\134\003\138\006\242\t\201\012\006\t\201\t\201\027\139\t\201\t\201\t\201\t\201\018B\t\201\t\201\016\218\t\201\t\201\t\201\012z\t\201\t\201\t\201\t\201\001v\t\201\012\n\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\011\202\006\202\016F\t\201\012~\t\201\t\201\t\201\t\201\t\201\0186\t\201\t\201\014\230\t\201\012\226\t\201\t\201\t\201\018\218\t\146\t\201\t\201\t\201\t\201\t\201\t\201\t\201\018B\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\012\202\t\201\t\201\b\193\t\201\t\201\006\026\012.\001\002\001\190\t\201\t\201\t\201\t\201\t\201\003\022\t\201\t\201\t\201\t\201\t\201\006]\t\201\t\201\005\221\t\201\t\201\r\014\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\t\201\006]\000\238\t\201\t\201\t\201\t\201\n\001\n\001\003\134\017\234\011Z\n\001\012J\n\001\n\001\017\146\n\001\n\001\n\001\n\001\004\014\n\001\n\001\017\254\n\001\n\001\n\001\012z\n\001\n\001\n\001\n\001\001\134\n\001\012N\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\004\018\019\006\b\193\n\001\rf\n\001\n\001\n\001\n\001\n\001\b\189\n\001\n\001\000\238\n\001\012\246\n\001\n\001\n\001\r\134\0142\n\001\n\001\n\001\n\001\n\001\n\001\n\001\004A\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\015\182\n\001\n\001\011j\n\001\n\001\b!\014N\007\158\000\238\n\001\n\001\n\001\n\001\n\001\002\142\n\001\n\001\n\001\n\001\n\001\006e\n\001\n\001\014:\n\001\n\001\014R\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\n\001\006e\000\238\n\001\n\001\n\001\n\001\t\241\t\241\027F\001\222\006\174\t\241\b\189\t\241\t\241\000\238\t\241\t\241\t\241\t\241\006\190\t\241\t\241\r\138\t\241\t\241\t\241\006\254\t\241\t\241\t\241\t\241\001\150\t\241\002\253\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\004\210\t\002\011\142\t\241\018\150\t\241\t\241\t\241\t\241\t\241\014\134\t\241\t\241\019>\t\241\r\018\t\241\t\241\t\241\011\018\005&\t\241\t\241\t\241\t\241\t\241\t\241\t\241\021\214\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\b\217\t\241\t\241\n\206\t\241\t\241\n\218\015\014\002\190\022\030\t\241\t\241\t\241\t\241\t\241\018\190\t\241\t\241\t\241\t\241\t\241\004A\t\241\t\241\n\206\t\241\t\241\n\218\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\000\238\012\146\t\241\t\241\t\241\t\241\t\233\t\233\001\002\001\190\014\138\t\233\004\214\t\233\t\233\000\238\t\233\t\233\t\233\t\233\001\206\t\233\t\233\012\150\t\233\t\233\t\233\t\"\t\233\t\233\t\233\t\233\b\237\t\233\000\238\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\0056\b\217\017^\t\233\015\018\t\233\t\233\t\233\t\233\t\233\tj\t\233\t\233\019V\t\233\r&\t\233\t\233\t\233\002\154\005>\t\233\t\233\t\233\t\233\t\233\t\233\t\233\023\174\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\003\022\t\233\t\233\015\198\t\233\t\233\023\022\003}\023\178\0266\t\233\t\233\t\233\t\233\t\233\011Z\t\233\t\233\t\233\t\233\t\233\000\238\t\233\t\233\tr\t\233\t\233\012Z\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\001\002\001\190\t\233\t\233\t\233\t\233\t\249\t\249\022\002\012^\019\158\t\249\004\214\t\249\t\249\019^\t\249\t\249\t\249\t\249\012Z\t\249\t\249\012\006\t\249\t\249\t\249\t\130\t\249\t\249\t\249\t\249\004\214\t\249\012J\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\r6\022\142\012\222\t\249\019\026\t\249\t\249\t\249\t\249\t\249\005\213\t\249\t\249\r\"\t\249\r:\t\249\t\249\t\249\023J\014\190\t\249\t\249\t\249\t\249\t\249\t\249\t\249\018\254\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\018\210\t\249\t\249\014\194\t\249\t\249\b\025\021\250\005\225\b%\t\249\t\249\t\249\t\249\t\249\r!\t\249\t\249\t\249\t\249\t\249\n\186\t\249\t\249\n\162\t\249\t\249\012\146\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\n\242\014v\t\249\t\249\t\249\t\249\nI\nI\rr\014\238\019\178\nI\014b\nI\nI\000\238\nI\nI\nI\nI\019J\nI\nI\014z\nI\nI\nI\025\250\nI\nI\nI\nI\014\242\nI\015\026\nI\nI\nI\nI\nI\nI\nI\nI\007n\007\241\022^\nI\004B\nI\nI\nI\nI\nI\023.\nI\nI\015\030\nI\rF\nI\nI\nI\011\022\019\130\nI\nI\nI\nI\nI\nI\nI\022>\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\000\238\nI\nI\007n\nI\nI\022\134\004\213\024\246\b\021\nI\nI\nI\nI\nI\027B\nI\nI\nI\nI\nI\019\182\nI\nI\011F\nI\nI\r-\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\nI\023\"\014f\nI\nI\nI\nI\003\157\003\157\000\238\023\130\023\238\003\157\019^\003\157\003\157\000\238\003\157\003\157\003\157\003\157\025\018\003\157\003\157\007n\003\157\003\157\003\157\011v\003\157\003\157\003\157\003\157\007n\003\157\012\170\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\r~\001\206\022\190\003\157\0262\003\157\003\157\003\157\003\157\003\157\024\206\003\157\003\157\001\206\003\157\r\150\003\157\003\157\003\157\025\002\r\158\003\157\003\157\003\157\003\157\003\157\003\157\003\157\r\178\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\026\214\tN\t~\025\198\003\157\003\157\r\226\014\014\015f\002\006\003\157\003\157\003\157\003\157\003\157\026\170\003\157\003\157\003\157\003\157\tV\023\242\t\134\003\157\015\142\003\157\003\157\003\254\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\015\170\003\157\003\157\003\157\003\157\003\157\001\237\001\237\026B\025\022\001\222\001\237\015\174\002\190\001\237\015\214\002\130\001\237\tf\001\237\004Y\002\246\001\237\024\210\001\237\001\237\001\237\015\234\001\237\001\237\001\237\001\210\025\006\tn\016\002\002\250\001\237\001\237\001\237\001\237\001\237\tv\001\237\016\022\016B\016V\002\254\017V\001\237\001\237\001\237\001\237\001\237\026\218\0032\001\190\017b\001\237\006\022\001\237\001\237\002\178\002\226\018\006\003:\001\237\001\237\001\237\b\026\b\030\b*\018\030\012f\005v\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\018\166\tN\t~\018\170\001\237\001\237\018\226\018\230\019\014\019\018\005\130\005\134\001\237\001\237\001\237\019:\001\237\001\237\001\237\001\237\012n\019\230\012\190\001\237\019\234\001\237\001\237\020\014\001\237\001\237\001\237\001\237\001\237\001\237\005\138\b2\001\237\001\237\001\237\bJ\004r\020\018\020\"\001\237\001\237\001\237\001\237\n1\n1\0202\020>\020r\n1\020v\002\190\n1\020\194\002\130\n1\n1\n1\020\234\002\246\n1\020\238\n1\n1\n1\020\254\n1\n1\n1\001\210\021N\n1\021n\002\250\n1\n1\n1\n1\n1\n1\n1\021\174\021\210\021\226\002\254\022\n\n1\n1\n1\n1\n1\022\014\0032\001\190\022\026\n1\022*\n1\n1\002\178\022F\022V\003:\n1\n1\n1\b\026\b\030\b*\022j\n1\005v\n1\n1\n1\n1\n1\n1\n1\n1\n1\022\150\n1\n1\022\154\n1\n1\022\166\022\182\022\202\023\190\005\130\005\134\n1\n1\n1\024\022\n1\n1\n1\n1\n1\024>\n1\n1\024\166\n1\n1\024\182\n1\n1\n1\n1\n1\n1\005\138\b2\n1\n1\n1\bJ\004r\025R\025Z\n1\n1\n1\n1\n-\n-\025j\025v\025\218\n-\025\238\002\190\n-\026\030\002\130\n-\n-\n-\026&\002\246\n-\026b\n-\n-\n-\026\138\n-\n-\n-\001\210\026\194\n-\026\242\002\250\n-\n-\n-\n-\n-\n-\n-\026\254\027\006\027\015\002\254\027\031\n-\n-\n-\n-\n-\0272\0032\001\190\027N\n-\027k\n-\n-\002\178\027{\027\151\003:\n-\n-\n-\b\026\b\030\b*\027\203\n-\005v\n-\n-\n-\n-\n-\n-\n-\n-\n-\027\231\n-\n-\027\242\n-\n-\028'\028;\028C\028\127\005\130\005\134\n-\n-\n-\028\135\n-\n-\n-\n-\n-\000\000\n-\n-\000\000\n-\n-\000\000\n-\n-\n-\n-\n-\n-\005\138\b2\n-\n-\n-\bJ\004r\000\000\000\000\n-\n-\n-\n-\0029\0029\000\000\000\000\000\000\0029\000\000\002\190\0029\000\000\002\130\0029\tf\0029\000\000\002\246\0029\000\000\0029\0029\0029\000\000\0029\0029\0029\001\210\002\225\tn\000\000\002\250\0029\0029\0029\0029\0029\tv\0029\000\000\000\000\000\000\002\254\004A\0029\0029\0029\0029\0029\000\000\0032\001\190\000\000\0029\000\n\0029\0029\002\178\000\000\000\000\003:\0029\0029\0029\b\026\b\030\b*\000\000\012f\005v\0029\0029\0029\0029\0029\0029\0029\0029\0029\000\000\004\173\0029\002\225\0029\0029\004A\006\130\002\190\004A\005\130\005\134\0029\0029\0029\000\000\0029\0029\0029\0029\000\000\000\238\004A\0029\004\173\0029\0029\004A\0029\0029\0029\0029\0029\0029\005\138\b2\0029\0029\0029\bJ\004r\000\000\004A\0029\0029\0029\0029\004A\007\030\004A\003\n\004A\004A\004A\004A\004A\004A\004A\017\186\004A\000\238\004A\004A\000\000\004A\004A\004A\016\134\004A\004A\004A\004A\004A\004A\004A\004A\004A\000\000\004A\004A\000\000\000\000\004A\004A\000\238\004A\004A\004A\004A\004A\007\138\004A\004A\004A\004A\004A\004A\004A\004A\000\238\004A\004A\004A\004A\004A\004A\004A\004A\000\238\004A\004A\004A\004A\004A\004A\004A\004A\b\189\004N\004A\000\000\000\000\004A\004A\004A\000\238\004A\000\n\000\000\004A\004A\004A\004A\004A\004A\004A\004A\004A\000\000\021\198\004A\004A\002\225\002\225\007f\004A\004B\006\233\000\000\004A\004A\000\000\007n\016\138\0226\002\225\000\238\004A\004A\004A\007r\000\000\004A\004A\004A\004A\006\233\000\161\004A\000\161\006\233\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\000\161\022\234\000\161\000\161\000\000\000\161\000\161\000\000\000\000\000\161\000\161\000\000\000\161\000\161\000\161\000\161\000\000\000\161\004R\000\161\000\161\b\189\000\000\000\161\000\161\005\141\000\161\000\161\000\161\000\238\000\161\b\241\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\b\138\000\161\000\161\000\000\000\000\000\161\000\161\002\006\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\002\n\006\233\000\161\015\130\t\029\000\161\002\130\000\161\001\210\000\161\005\141\002\190\000\000\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\000\000\000\000\000\161\003\154\017\238\t\029\005\141\000\222\000\000\007\002\001\222\000\161\000\000\002\226\000\000\014\150\002\178\000\161\000\161\000\161\000\161\000\000\015\134\000\161\000\161\000\161\000\161\002)\002)\004Y\000\000\003\n\002)\000\000\002\190\002)\015\146\002\130\002)\001b\002)\000\000\002\246\002)\007\006\002)\002)\002)\000\000\002)\002)\002)\001\210\001z\000\000\001\138\002\250\002)\002)\002)\002)\002)\005\134\002)\000\000\000\000\000\000\002\254\b\169\002)\002)\002)\002)\002)\004Y\0032\b.\000\000\002)\000\000\002)\002)\002\178\000\000\006\"\003:\002)\002)\002)\b\026\b\030\b*\tN\t~\005v\002)\002)\002)\002)\002)\002)\002)\002)\002)\006&\tN\t~\b\169\002)\002)\000\000\tV\000\000\t\134\005\130\005\134\002)\002)\002)\000\000\002)\002)\002)\002)\tV\000\000\t\134\002)\b\169\002)\002)\000\000\002)\002)\002)\002)\002)\002)\005\138\b2\002)\002)\002)\bJ\004r\000\238\002\225\002)\002)\002)\002)\002E\002E\002\225\002\225\000\000\002E\000\000\000\000\002E\000\000\b\169\002E\000\000\002E\004\254\000\000\002E\b\169\002E\002E\002E\000\n\002E\002E\002E\000\000\027\215\000\000\000\000\000\n\002E\002E\002E\002E\002E\000\000\002E\002\225\006*\004\169\000\000\005\234\002E\002E\002E\002E\002E\000\000\0066\002\225\000\000\002E\006B\002E\002E\000\000\000\000\002\225\006~\002E\002E\002E\004\169\000\000\006\213\t\025\000\000\000\000\002E\002E\002E\002E\002E\002E\002E\002E\002E\000\000\tN\t~\000\000\002E\002E\006\134\014\174\000\000\002\190\006\213\t\025\002E\002E\002E\000\000\002E\002E\002E\002E\tV\002\190\t\134\002E\002\130\002E\002E\001\210\002E\002E\002E\002E\002E\002E\b\165\000\000\002E\002E\002E\000\000\021\182\000\000\000\000\002E\002E\002E\002E\002A\002A\000\000\022\242\003\n\002A\022\246\003\022\002A\000\000\002\178\002A\000\000\002A\000\000\017\134\002A\023&\002A\002A\002A\tZ\002A\002A\002A\012&\b\165\000\000\000\000\015\146\002A\002A\002A\002A\002A\rj\002A\rv\000\000\012B\0236\012R\002A\002A\002A\002A\002A\b\165\bf\001\190\001*\002A\000\000\002A\002A\005\134\002\225\002\225\014V\002A\002A\002A\014j\014~\014\142\000\000\000\000\000\000\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\tN\t~\b\165\002A\002A\000\n\004\254\000\000\001\206\b\165\000\000\002A\002A\002A\000\000\002A\002A\002A\002A\tV\000\000\t\134\002A\000\000\002A\002A\001\210\002A\002A\002A\002A\002A\002A\002\225\000\000\002A\002A\002A\000\000\018\174\000\000\000\000\002A\002A\002A\002A\002-\002-\000\000\000\000\002\154\002-\0196\003\022\002-\000\000\002\178\002-\000\000\002-\000\000\000\000\002-\019N\002-\002-\002-\012r\002-\002-\002-\002\225\002\225\016\178\000\000\000\000\002-\002-\002-\002-\002-\012\138\002-\012\162\000\000\000\000\002\225\r\006\002-\002-\002-\002-\002-\000\000\bf\014\206\000\000\002-\000\n\002-\002-\r\026\000\000\r.\014V\002-\002-\002-\014j\014~\014\142\000\000\000\000\000\000\002-\002-\002-\002-\002-\002-\002-\002-\002-\000\000\tN\t~\002\225\002-\002-\000\000\000\000\000\000\000\000\000\238\000\000\002-\002-\002-\000\000\002-\002-\002-\002-\tV\000\000\t\134\002-\000\000\002-\002-\000\000\002-\002-\002-\002-\002-\002-\000\000\000\000\002-\002-\002-\000\000\t:\000\000\000\000\002-\002-\002-\002-\002=\002=\000\000\000\000\000\000\002=\012}\006*\002=\000\000\005\234\002=\000\000\002=\000\000\000\000\002=\0066\002=\002=\002=\006B\002=\002=\002=\012}\012}\000\000\000\000\012}\002=\002=\002=\002=\002=\000\000\002=\b\021\000\000\000\000\b\021\000\000\002=\002=\002=\002=\002=\000\000\000\000\000\000\000\000\002=\000\000\002=\002=\000\000\000\000\000\000\022>\002=\002=\002=\000\000\000\000\000\000\000\000\000\000\000\238\002=\002=\002=\002=\002=\002=\002=\002=\002=\000\000\b\021\002=\000\000\002=\002=\000\000\000\000\000\000\000\000\000\000\000\000\002=\002=\002=\b\021\002=\002=\002=\002=\012}\000\000\004\253\002=\000\000\002=\002=\002\225\t\158\002=\002=\002=\002=\002=\004\253\n\230\002=\002=\002=\000\000\000\000\b\021\000\000\002=\002=\002=\002=\t%\t%\000\000\000\000\000\000\t%\000\000\000\000\t%\000\n\000\000\t%\000\000\t%\000\000\000\000\t\202\004\253\t%\t\238\t%\b\021\t%\t%\t%\002\225\000\000\000\000\000\000\017\"\n\002\n\026\n\"\n\n\n*\000\000\t%\002\225\002\225\000\000\000\000\000\000\t%\t%\n2\n:\t%\004\253\007\245\000\000\004\253\t%\000\000\nB\t%\000\000\000\000\000\000\000\000\t%\t%\000\238\000\000\000\000\000\000\000\000\000\000\002\246\t%\t%\t\210\n\018\nJ\nR\nb\t%\t%\002\166\012\193\t%\000\000\t%\nj\000\000\003Z\000\000\000\000\000\238\000\000\t%\t%\nr\000\000\t%\t%\t%\t%\003f\012\193\000\000\t%\000\000\t%\t%\002B\n\146\t%\n\154\nZ\t%\t%\000\000\000\000\t%\nz\t%\000\000\002F\000\000\005v\t%\t%\n\130\n\138\002q\002q\000\000\000\000\000\000\002q\012\133\006*\002q\000\000\005\234\002q\000\000\002q\000\000\005\130\002q\0066\002q\002q\002q\006B\002q\002q\002q\012\133\012\133\000\000\000\000\012\133\002q\002q\002q\002q\002q\000\000\002q\015\130\000\000\005\138\002\130\000\000\002q\002q\002q\002q\002q\000\000\000\000\000\000\000\000\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\000\238\002q\002q\t\210\002q\002q\002q\002q\002q\002q\000\000\015\134\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\015\146\002q\002q\002q\002q\012\133\000\000\001\206\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\026\014\000\000\002q\002q\002q\000\000\000\000\005\134\000\000\002q\002q\002q\002q\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002\190\002Y\000\000\000\000\002Y\000\000\002Y\003\170\000\000\002Y\002\154\002Y\002Y\002Y\025~\002Y\002Y\002Y\001\210\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\002Y\015\130\000\000\000\000\002\130\000\000\002Y\002Y\002Y\002Y\002Y\004\154\003\202\000\000\004\217\002Y\000\000\002Y\002Y\002\178\000\000\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\t\210\002Y\002Y\002Y\002Y\002Y\002Y\000\000\015\134\002Y\000\000\002Y\002Y\006\234\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\015\146\002Y\002Y\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\002Y\002Y\002Y\002Y\002Y\002Y\012\129\000\000\002Y\002Y\002Y\000\000\000\000\005\134\000\000\002Y\002Y\002Y\002Y\002e\002e\000\000\000\000\000\000\002e\012\129\012\129\002e\000\000\012\129\002e\000\000\002e\000\000\000\000\t\202\000\000\002e\002e\002e\021\026\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\n\n\002e\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\000\238\000\000\000\000\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\t\210\n\018\002e\002e\002e\002e\002e\000\000\012\129\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\000\238\b\t\002e\002e\002e\b\t\002e\002e\002e\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\000\000\011\154\000\000\000\000\002e\002e\002e\002e\002u\002u\000\000\000\000\000\000\002u\b\t\011\162\002u\000\000\011\174\002u\000\000\002u\000\000\000\000\002u\011\186\002u\002u\002u\011\198\002u\002u\002u\000\000\000\000\b\t\000\000\000\000\002u\002u\002u\002u\002u\000\000\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002u\000\000\000\000\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\002u\002u\002u\000\000\000\000\004\254\000\000\000\000\000\000\002u\002u\t\210\002u\002u\002u\002u\002u\002u\000\000\007\234\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\000\238\b\005\002u\002u\002u\b\005\002u\002u\002u\002u\000\000\007\238\000\000\002u\000\000\002u\002u\000\000\002u\002u\002u\002u\002u\002u\000\000\000\000\002u\002u\002u\000\000\007\165\000\000\000\000\002u\002u\002u\002u\002U\002U\007\222\000\000\000\000\002U\b\005\007\165\002U\000\000\005\234\002U\000\000\002U\000\000\000\238\002U\007\165\002U\002U\002U\007\165\002U\002U\002U\000\000\000\000\b\005\000\000\000\000\002U\002U\002U\002U\002U\000\000\002U\000\000\000\000\006\253\000\000\000\000\002U\002U\002U\002U\002U\000\000\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\006\253\002U\002U\002U\006\253\007\242\004\254\000\000\000\000\000\000\002U\002U\t\210\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\000\000\007\189\000\000\002U\002U\002U\000\000\002U\002U\002U\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\002U\002U\000\000\007\189\000\000\000\000\002U\002U\002U\002U\002a\002a\000\000\000\000\000\000\002a\005f\007\189\002a\000\000\005\234\002a\000\000\002a\000\000\000\000\t\202\007\189\002a\002a\002a\007\189\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\n\n\002a\000\000\002a\000\000\000\000\006\237\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\006\237\002a\002a\002a\006\237\000\000\000\000\000\000\000\000\000\000\002a\002a\t\210\n\018\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\000\000\000\238\000\000\002a\002a\002a\000\000\002a\002a\002a\002a\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\002a\002a\002a\002a\002a\002a\000\000\000\000\002a\002a\002a\000\000\007\217\000\000\000\000\002a\002a\002a\002a\002]\002]\000\000\000\000\000\000\002]\b&\006*\002]\000\000\005\234\002]\000\000\002]\000\000\000\000\t\202\007\217\002]\002]\002]\007\217\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\n\n\002]\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\002]\002]\000\000\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\t\210\n\018\002]\002]\002]\002]\002]\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\007\209\000\000\002]\002]\002]\000\000\002]\002]\002]\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\002]\002]\002]\002]\002]\002]\000\000\000\000\002]\002]\002]\000\000\007\209\000\000\000\000\002]\002]\002]\002]\002\133\002\133\000\000\000\000\000\000\002\133\000\000\011\222\002\133\000\000\007\209\002\133\000\000\002\133\000\000\000\000\t\202\007\209\002\133\002\133\002\133\007\209\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n2\n:\002\133\000\000\000\000\000\000\000\000\002\133\000\000\nB\002\133\000\000\000\000\000\000\000\000\002\133\002\133\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\t\210\n\018\nJ\nR\nb\002\133\002\133\000\000\000\000\002\133\000\000\002\133\nj\000\000\000\000\000\000\000\000\000\238\000\000\002\133\002\133\nr\000\000\002\133\002\133\002\133\002\133\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\nZ\002\133\002\133\000\000\000\000\002\133\nz\002\133\000\000\007\161\000\000\000\000\002\133\002\133\n\130\n\138\002m\002m\000\000\000\000\000\000\002m\000\000\007\161\002m\000\000\005\234\002m\000\000\002m\000\000\000\000\t\202\007\161\002m\002m\002m\007\161\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\n\n\002m\000\000\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\000\000\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\000\000\002m\002m\t\210\n\018\002m\002m\002m\002m\002m\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\000\238\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\002m\002m\002m\002m\002m\002m\000\000\000\000\002m\002m\002m\000\000\014&\000\000\000\000\002m\002m\002m\002m\002i\002i\000\000\000\000\000\000\002i\000\000\011\162\002i\000\000\011\174\002i\000\000\002i\000\000\000\000\t\202\011\186\002i\002i\002i\011\198\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\n\n\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\t\210\n\018\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\002i\002i\002i\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002}\002}\000\000\000\000\000\000\002}\000\000\002\006\002}\000\000\002\130\002}\000\000\002}\000\000\000\000\t\202\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\n2\n:\002}\000\000\027*\001\222\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\000\238\015\146\000\000\000\000\000\000\000\000\000\000\002}\002}\t\210\n\018\nJ\nR\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\000\000\005\134\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\002}\002}\002}\nZ\002}\002}\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002Q\002Q\000\000\000\000\000\000\002Q\000\000\003\022\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\t\202\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\n\n\002Q\000\000\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002Q\000\000\005\190\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\003\246\002Q\002Q\002Q\006N\000\000\004\002\000\000\000\000\000\000\002Q\002Q\t\210\n\018\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\002Q\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002M\002M\000\000\000\000\000\000\002M\000\000\002\190\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\t\202\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002M\000\000\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\n2\n:\002M\000\000\t\138\003\n\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\002M\000\238\011\254\000\000\012\014\000\000\000\000\000\000\002M\002M\t\210\n\018\nJ\nR\002M\002M\002M\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\002M\002M\002M\nZ\002M\002M\000\000\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\190\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\t\202\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\n2\n:\002\169\000\000\012\194\003\n\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\012\214\000\000\012\234\000\000\000\000\000\000\002\169\002\169\t\210\n\018\nJ\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\002\169\002\169\002\169\nZ\002\169\002\169\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002I\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\t\202\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002I\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\n2\n:\002I\000\000\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\002I\002I\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\t\210\n\018\nJ\nR\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\nZ\002I\002I\000\000\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002\129\002\129\000\000\000\000\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\t\202\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\n2\n:\002\129\000\000\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\t\210\n\018\nJ\nR\002\129\002\129\002\129\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\nZ\002\129\002\129\000\000\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002y\002y\000\000\000\000\000\000\002y\000\000\000\000\002y\000\000\000\000\002y\000\000\002y\000\000\000\000\t\202\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\n2\n:\002y\000\000\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\002y\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\t\210\n\018\nJ\nR\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\002y\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\nZ\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002\137\002\137\000\000\000\000\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\t\202\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n2\n:\002\137\000\000\000\000\000\000\000\000\002\137\000\000\nB\002\137\000\000\000\000\000\000\000\000\002\137\002\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\t\210\n\018\nJ\nR\nb\002\137\002\137\000\000\000\000\002\137\000\000\002\137\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\nr\000\000\002\137\002\137\002\137\002\137\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\002\137\002\137\002\137\nZ\002\137\002\137\000\000\000\000\002\137\nz\002\137\000\000\000\000\000\000\000\000\002\137\002\137\n\130\n\138\002\141\002\141\000\000\000\000\000\000\002\141\000\000\000\000\002\141\000\000\000\000\002\141\000\000\002\141\000\000\000\000\t\202\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002\141\000\000\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n2\n:\002\141\000\000\000\000\000\000\000\000\002\141\000\000\nB\002\141\000\000\000\000\000\000\000\000\002\141\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\t\210\n\018\nJ\nR\nb\002\141\002\141\000\000\000\000\002\141\000\000\002\141\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\nr\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\nZ\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\n\130\n\138\002\145\002\145\000\000\000\000\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\000\000\002\145\000\000\000\000\t\202\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\002\145\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n2\n:\002\145\000\000\000\000\000\000\000\000\002\145\000\000\nB\002\145\000\000\000\000\000\000\000\000\002\145\002\145\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\t\210\n\018\nJ\nR\nb\002\145\002\145\000\000\000\000\002\145\000\000\002\145\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\nr\000\000\002\145\002\145\002\145\002\145\000\000\000\000\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\nZ\002\145\002\145\000\000\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\002\145\002\145\n\130\n\138\b\225\b\225\000\000\000\000\000\000\b\225\000\000\000\000\b\225\000\000\000\000\b\225\000\000\b\225\000\000\000\000\t\202\000\000\b\225\b\225\b\225\000\000\b\225\b\225\b\225\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\b\225\000\000\000\000\000\000\000\000\000\000\b\225\b\225\n2\n:\b\225\000\000\000\000\000\000\000\000\b\225\000\000\nB\b\225\000\000\000\000\000\000\000\000\b\225\b\225\000\238\000\000\000\000\000\000\000\000\000\000\000\000\b\225\b\225\t\210\n\018\nJ\nR\nb\b\225\b\225\000\000\000\000\b\225\000\000\b\225\nj\000\000\000\000\000\000\000\000\000\000\000\000\b\225\b\225\nr\000\000\b\225\b\225\b\225\b\225\000\000\000\000\000\000\b\225\000\000\b\225\b\225\000\000\b\225\b\225\b\225\nZ\b\225\b\225\000\000\000\000\b\225\nz\b\225\000\000\000\000\000\000\000\000\b\225\b\225\n\130\n\138\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\t\202\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n2\n:\002\149\000\000\000\000\000\000\000\000\002\149\000\000\nB\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\t\210\n\018\nJ\nR\nb\002\149\002\149\000\000\000\000\002\149\000\000\002\149\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\nr\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\n\146\002\149\n\154\nZ\002\149\002\149\000\000\000\000\002\149\nz\002\149\000\000\000\000\000\000\000\000\002\149\002\149\n\130\n\138\b\221\b\221\000\000\000\000\000\000\b\221\000\000\000\000\b\221\000\000\000\000\b\221\000\000\b\221\000\000\000\000\t\202\000\000\b\221\b\221\b\221\000\000\b\221\b\221\b\221\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\b\221\000\000\000\000\000\000\000\000\000\000\b\221\b\221\n2\n:\b\221\000\000\000\000\000\000\000\000\b\221\000\000\nB\b\221\000\000\000\000\000\000\000\000\b\221\b\221\000\238\000\000\000\000\000\000\000\000\000\000\000\000\b\221\b\221\t\210\n\018\nJ\nR\nb\b\221\b\221\000\000\000\000\b\221\000\000\b\221\nj\000\000\000\000\000\000\000\000\000\000\000\000\b\221\b\221\nr\000\000\b\221\b\221\b\221\b\221\000\000\000\000\000\000\b\221\000\000\b\221\b\221\000\000\b\221\b\221\b\221\nZ\b\221\b\221\000\000\000\000\b\221\nz\b\221\000\000\000\000\000\000\000\000\b\221\b\221\n\130\n\138\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\t\202\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n2\n:\002\197\000\000\000\000\000\000\000\000\002\197\000\000\nB\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\t\210\n\018\nJ\nR\nb\002\197\002\197\000\000\000\000\002\197\000\000\002\197\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\nr\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\n\146\002\197\n\154\nZ\002\197\002\197\000\000\000\000\002\197\nz\002\197\000\000\000\000\000\000\000\000\002\197\002\197\n\130\n\138\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\t\202\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n2\n:\002\193\000\000\000\000\000\000\000\000\002\193\000\000\nB\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\t\210\n\018\nJ\nR\nb\002\193\002\193\000\000\000\000\002\193\000\000\002\193\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\nr\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\n\146\002\193\n\154\nZ\002\193\002\193\000\000\000\000\002\193\nz\002\193\000\000\000\000\000\000\000\000\002\193\002\193\n\130\n\138\002\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\t\202\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n2\n:\002\201\000\000\000\000\000\000\000\000\002\201\000\000\nB\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\t\210\n\018\nJ\nR\nb\002\201\002\201\000\000\000\000\002\201\000\000\002\201\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\nr\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\n\146\002\201\n\154\nZ\002\201\002\201\000\000\000\000\002\201\nz\002\201\000\000\000\000\000\000\000\000\002\201\002\201\n\130\n\138\002\181\002\181\000\000\000\000\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\t\202\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n2\n:\002\181\000\000\000\000\000\000\000\000\002\181\000\000\nB\002\181\000\000\000\000\000\000\000\000\002\181\002\181\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\t\210\n\018\nJ\nR\nb\002\181\002\181\000\000\000\000\002\181\000\000\002\181\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\nr\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\n\146\002\181\n\154\nZ\002\181\002\181\000\000\000\000\002\181\nz\002\181\000\000\000\000\000\000\000\000\002\181\002\181\n\130\n\138\002\185\002\185\000\000\000\000\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\t\202\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n2\n:\002\185\000\000\000\000\000\000\000\000\002\185\000\000\nB\002\185\000\000\000\000\000\000\000\000\002\185\002\185\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\t\210\n\018\nJ\nR\nb\002\185\002\185\000\000\000\000\002\185\000\000\002\185\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\nr\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\n\146\002\185\n\154\nZ\002\185\002\185\000\000\000\000\002\185\nz\002\185\000\000\000\000\000\000\000\000\002\185\002\185\n\130\n\138\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\t\202\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n2\n:\002\189\000\000\000\000\000\000\000\000\002\189\000\000\nB\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\t\210\n\018\nJ\nR\nb\002\189\002\189\000\000\000\000\002\189\000\000\002\189\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\nr\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\n\146\002\189\n\154\nZ\002\189\002\189\000\000\000\000\002\189\nz\002\189\000\000\000\000\000\000\000\000\002\189\002\189\n\130\n\138\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\t\202\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n2\n:\002\209\000\000\000\000\000\000\000\000\002\209\000\000\nB\002\209\000\000\000\000\000\000\000\000\002\209\002\209\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\t\210\n\018\nJ\nR\nb\002\209\002\209\000\000\000\000\002\209\000\000\002\209\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\nr\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\n\146\002\209\n\154\nZ\002\209\002\209\000\000\000\000\002\209\nz\002\209\000\000\000\000\000\000\000\000\002\209\002\209\n\130\n\138\002\205\002\205\000\000\000\000\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\t\202\000\000\002\205\002\205\002\205\000\000\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n2\n:\002\205\000\000\000\000\000\000\000\000\002\205\000\000\nB\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\t\210\n\018\nJ\nR\nb\002\205\002\205\000\000\000\000\002\205\000\000\002\205\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\nr\000\000\002\205\002\205\002\205\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\n\146\002\205\n\154\nZ\002\205\002\205\000\000\000\000\002\205\nz\002\205\000\000\000\000\000\000\000\000\002\205\002\205\n\130\n\138\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\t\202\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n2\n:\002\213\000\000\000\000\000\000\000\000\002\213\000\000\nB\002\213\000\000\000\000\000\000\000\000\002\213\002\213\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\t\210\n\018\nJ\nR\nb\002\213\002\213\000\000\000\000\002\213\000\000\002\213\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\nr\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\n\146\002\213\n\154\nZ\002\213\002\213\000\000\000\000\002\213\nz\002\213\000\000\000\000\000\000\000\000\002\213\002\213\n\130\n\138\002\177\002\177\000\000\000\000\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\t\202\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n2\n:\002\177\000\000\000\000\000\000\000\000\002\177\000\000\nB\002\177\000\000\000\000\000\000\000\000\002\177\002\177\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\t\210\n\018\nJ\nR\nb\002\177\002\177\000\000\000\000\002\177\000\000\002\177\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\nr\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\n\146\002\177\n\154\nZ\002\177\002\177\000\000\000\000\002\177\nz\002\177\000\000\000\000\000\000\000\000\002\177\002\177\n\130\n\138\002\001\002\001\000\000\000\000\000\000\002\001\000\000\000\000\002\001\000\000\000\000\002\001\000\000\002\001\000\000\000\000\002\001\000\000\002\001\002\001\002\001\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\002\001\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\000\000\000\000\000\000\002\001\000\000\002\001\002\001\000\000\000\000\000\000\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\000\000\000\000\002\001\000\000\002\001\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\000\000\002\001\002\001\002\001\002\001\000\000\000\000\000\000\002\001\000\000\002\001\002\001\000\000\002\001\002\001\002\001\002\001\002\001\002\001\000\000\000\000\002\001\002\001\r\254\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\029\002\029\000\000\000\000\000\000\002\029\000\000\000\000\002\029\000\000\000\000\002\029\000\000\002\029\000\000\000\000\t\202\000\000\002\029\002\029\002\029\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\029\000\000\000\000\000\000\000\000\000\000\002\029\002\029\n2\n:\002\029\000\000\000\000\000\000\000\000\002\029\000\000\nB\002\029\000\000\000\000\000\000\000\000\002\029\002\029\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\t\210\n\018\nJ\nR\nb\002\029\002\029\000\000\000\000\002\029\000\000\002\029\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\nr\000\000\002\029\002\029\014\022\002\029\000\000\000\000\000\000\002\029\000\000\002\029\002\029\000\000\n\146\002\029\n\154\nZ\002\029\002\029\000\000\000\000\002\029\nz\002\029\000\000\000\000\000\000\000\000\002\029\002\029\n\130\n\138\002\025\002\025\000\000\000\000\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\000\000\002\025\000\000\000\000\t\202\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\025\000\000\000\000\000\000\000\000\000\000\002\025\002\025\n2\n:\002\025\000\000\000\000\000\000\000\000\002\025\000\000\nB\002\025\000\000\000\000\000\000\000\000\002\025\002\025\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\t\210\n\018\nJ\nR\nb\002\025\002\025\000\000\000\000\002\025\000\000\002\025\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\nr\000\000\002\025\002\025\002\025\002\025\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\n\146\002\025\n\154\nZ\002\025\002\025\000\000\000\000\002\025\nz\002\025\000\000\000\000\000\000\000\000\002\025\002\025\n\130\n\138\002\173\002\173\000\000\000\000\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\t\202\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\n\002\n\026\n\"\n\n\n*\000\000\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n2\n:\002\173\000\000\000\000\000\000\000\000\002\173\000\000\nB\002\173\000\000\000\000\000\000\000\000\002\173\002\173\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\t\210\n\018\nJ\nR\nb\002\173\002\173\000\000\000\000\002\173\000\000\002\173\nj\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\nr\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\n\146\002\173\n\154\nZ\002\173\002\173\000\000\000\000\002\173\nz\002\173\000\000\000\000\000\000\000\000\002\173\002\173\n\130\n\138\002\r\002\r\000\000\000\000\000\000\002\r\000\000\000\000\002\r\000\000\000\000\002\r\000\000\002\r\000\000\000\000\002\r\000\000\002\r\002\r\002\r\000\000\002\r\002\r\002\r\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\000\000\002\r\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\000\000\000\000\000\000\000\000\002\r\000\000\002\r\002\r\000\000\000\000\000\000\000\000\002\r\002\r\002\r\000\000\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\002\r\002\r\002\r\002\r\000\000\000\000\002\r\000\000\002\r\002\r\000\000\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\000\000\002\r\002\r\002\r\002\r\000\000\000\000\000\000\002\r\000\000\002\r\002\r\000\000\002\r\002\r\002\r\002\r\002\r\002\r\000\000\000\000\002\r\002\r\r\254\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\017\002\017\000\000\000\000\000\000\002\017\000\000\000\000\002\017\000\000\000\000\002\017\000\000\002\017\000\000\000\000\002\017\000\000\002\017\002\017\002\017\000\000\002\017\002\017\002\017\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\002\017\000\000\002\017\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\002\017\003\253\000\000\000\000\000\000\002\017\000\000\002\017\002\017\000\000\000\000\000\000\000\000\002\017\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\002\017\002\017\002\017\002\017\002\017\000\000\000\000\002\017\000\000\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\238\002\017\002\017\002\017\000\000\002\017\002\017\002\017\002\017\000\000\000\000\000\000\002\017\000\000\002\017\002\017\000\000\002\017\002\017\002\017\002\017\002\017\002\017\000\000\000\000\002\017\002\017\r\254\000\000\000\000\003\253\000\000\002\017\002\017\002\017\002\017\001\006\000\000\000\006\000\000\006\229\000\000\002\186\002\190\006*\002\234\002\130\005\234\b\242\000\000\000\000\002\246\001\n\000\000\0066\000\000\002\142\000\000\006B\006\229\000\000\001\210\003\206\006\229\002\190\0036\001\018\bn\br\001\030\001\"\003\170\000\000\000\000\003F\000\000\002\254\007\226\025\030\000\000\b\150\b\154\001\210\003\222\0032\003\234\b\158\006\214\000\000\001:\000\000\002\178\007\r\000\000\003:\000\000\000\000\000\000\b\026\b\030\b*\b>\000\000\005v\000\000\003\202\001>\001B\001F\001J\001N\007\r\002\178\b\178\001R\007\r\007\001\000\000\001V\000\000\b\190\b\214\t*\005\130\005\134\000\000\000\000\001Z\000\000\000\000\000\000\006\229\000\000\001^\002\225\007\001\000\000\000\000\018\130\007\001\006\234\000\000\000\000\001\154\011\018\000\000\011\030\005\138\b2\004\026\001\158\000\000\014F\004r\t>\001\006\001\166\000\006\001\170\001\174\000\000\002\186\002\190\000\n\002\234\002\130\011\"\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\bj\000\000\000\238\000\000\002\225\001\210\000\000\000\000\007\r\0036\001\018\bn\br\001\030\001\"\000\000\002\225\002\225\003F\000\000\002\254\000\000\bv\n\206\b\150\b\154\n\218\003\222\0032\003\234\b\158\006\214\000\238\001:\000\000\002\178\000\000\000\000\003:\000\000\000\000\000\000\b\026\b\030\b*\b>\006*\005v\000\000\005\234\001>\001B\001F\001J\001N\000\000\0066\b\178\001R\000\000\006B\000\000\001V\000\000\b\190\b\214\t*\005\130\005\134\000\000\000\000\001Z\000\000\000\000\000\000\000\000\006*\001^\000\000\005\234\011&\000\000\000\000\000\000\000\000\000\000\0066\001\154\006\022\000\000\006B\005\138\b2\012\181\001\158\000\000\014F\004r\t>\004m\001\166\000\006\001\170\001\174\000\246\002\186\002\190\002\194\002\234\002\130\000\000\000\000\000\000\012\181\002\246\000\000\002\030\003\178\000\000\002\"\000\000\004m\000\000\003\182\001\210\000\000\017\026\000\000\002\250\000\000\003>\003B\002.\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\174\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\006\214\000\000\000\000\017\018\002\178\000\000\000\000\003:\017*\002:\000\000\b\026\b\030\b*\b>\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0172\000\000\b\178\000\000\t\r\000\000\000\000\000\000\000\000\b\190\b\214\t*\005\130\005\134\017F\017r\000\000\000\000\004m\004m\000\000\000\000\000\000\006f\024\234\000\000\t\r\000\000\000\000\002>\012\181\012\161\000\000\000\000\017\174\021\154\005\138\b2\025\n\000\173\000\000\bJ\004r\t>\000\173\000\000\002\190\000\173\000\000\002\130\012\181\tf\000\000\002\030\002\246\000\000\002\"\000\173\000\000\000\173\000\000\000\173\000\000\000\173\001\210\000\238\tn\000\000\002\250\002.\000\000\000\000\0026\012\161\tv\000\173\000\000\000\000\000\000\002\254\000\000\000\173\000\000\000\000\000\000\000\173\000\000\0032\001\190\015\130\000\173\000\000\002\130\000\173\002\178\000\000\002:\003:\000\173\000\173\000\173\b\026\b\030\b*\000\000\012f\005v\000\173\000\173\006*\021B\000\000\005\234\024\238\000\173\000\000\000\000\t\r\000\173\0066\000\000\000\000\000\000\006B\000\000\000\000\005\130\005\134\000\173\000\173\015\134\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\173\000\000\015\146\000\000\021f\000\000\000\173\000\173\005\138\b2\000\000\000\000\000\197\bJ\004r\000\000\000\173\000\197\000\173\002\190\000\197\000\000\002\130\000\000\tf\000\000\000\000\002\246\005\134\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\197\001\210\021r\tn\000\000\002\250\000\000\000\000\000\000\000\000\b\210\tv\000\197\000\000\000\000\000\000\002\254\000\000\000\197\021\006\000\000\000\000\000\197\000\000\0032\001\190\000\000\000\197\000\000\000\000\000\197\002\178\000\000\000\000\003:\000\197\000\197\000\197\b\026\b\030\b*\000\000\012f\005v\000\197\000\197\000\000\000\000\000\000\000\000\r\234\000\197\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\197\000\197\000\000\000\238\000\197\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\197\005\138\b2\000\000\000\000\000\000\bJ\004r\000\000\000\197\000\000\000\197\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\006*\000\000\000>\005\234\000\000\000\000\000B\000\000\000\000\000\000\0066\000\000\000\000\000F\006B\000\000\000\000\000\000\000\000\000J\000\000\000N\000R\000V\000Z\000^\000b\000f\000\000\000\000\000\000\000j\000n\000\000\000r\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000z\000\000\000\000\000~\000\130\000\000\000\000\000\000\000\000\000\000\000\134\000\138\000\142\000\000\000\000\000\000\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\000\000\000\000\000\174\000\178\000\182\000\000\000\000\000\000\000\186\000\006\000\190\000\194\000\246\002\186\002\190\002\194\002\234\002\130\000\198\000\000\000\202\000\000\002\246\000\000\000\000\004\141\000\206\000\210\000\000\000\214\000\000\003\182\001\210\000\000\000\000\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\174\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\006\214\000\000\000\000\017\018\002\178\000\000\000\000\003:\017*\000\000\000\000\b\026\b\030\b*\b>\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0172\000\000\b\178\000\000\027\250\000\000\000\000\000\000\000\000\b\190\b\214\t*\005\130\005\134\017F\017r\000\000\000\006\028\027\014\218\000\246\002\186\002\190\002\194\002\234\002\130\000\000\000\000\000\000\000\000\002\246\000\000\000\000\028J\000\000\021\154\005\138\b2\014Z\003\182\001\210\bJ\004r\t>\002\250\000\000\003>\003B\000\000\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\174\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\006\214\000\000\016n\017\018\002\178\000\000\000\000\003:\017*\002\006\000\000\b\026\b\030\b*\b>\000\000\005v\000\000\000\000\002\n\000\000\000\000\000\000\000\000\0172\000\000\b\178\001\210\027\250\000\000\000\000\000\000\000\000\b\190\b\214\t*\005\130\005\134\017F\017r\000\000\000\000\004\149\000\000\003\154\000\000\000\000\000\000\001\006\000\000\007\002\001\222\000\000\000\000\003V\002\190\t\018\002\178\002\130\021\154\005\138\b2\000\000\002\246\001\n\bJ\004r\t>\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\007\006\000\000\000\000\002\225\000\000\003z\002\225\001.\011\014\000\000\000\000\003r\001\190\0016\002\225\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\002\225\003\250\000\000\004\002\005j\000\n\005v\000\000\002\225\001>\001B\001F\001J\001N\000\000\000\000\000\n\001R\005z\000\000\002\225\001V\000\000\000\000\000\000\002\225\005\130\005\134\000\000\005\202\001Z\002\225\002\225\002\225\002\225\000\000\001^\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\154\011\018\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\002\225\001\170\001\174\003V\002\190\n\178\002\225\002\130\015\130\000\000\000\000\002\130\002\246\001\n\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\001.\011\014\000\000\000\000\003r\001\190\0016\007\173\015\134\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\015\146\005v\021F\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\007\173\001V\n\181\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\005\134\000\000\000\000\007\173\000\000\001^\007\173\b\166\000\000\000\000\021R\000\000\000\000\007\173\000\000\001\154\011\018\007\173\000\000\005\138\000\000\n\181\001\158\000\000\001\162\004r\001\006\021\006\001\166\000\000\001\170\001\174\003V\002\190\r\170\n\181\002\130\000\000\n\181\011\134\000\000\002\246\001\n\000\000\000\000\n\181\002\142\000\000\000\000\n\181\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\001.\011\014\000\000\000\000\003r\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\011\018\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\000\000\b\249\001\166\000\006\001\170\001\174\000\000\002\186\002\190\000\000\002\234\002\130\000\000\000\000\000\000\000\000\002\246\000\000\000\000\000\000\000\000\b\249\000\000\b\249\b\249\000\000\001\210\000\000\000\000\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\000\000\b\001\003F\000\000\002\254\000\000\b\001\000\000\003\214\003\218\n\222\003\222\0032\003\234\003\242\006\214\001\202\001\206\011>\002\178\000\000\000\000\003:\000\000\000\000\b\001\b\026\b\030\b*\b>\000\000\005v\000\000\000\000\000\000\001\210\002\170\001\230\000\000\000\000\000\000\b\178\000\000\000\000\000\000\001\242\000\000\b\001\b\190\b\214\t*\005\130\005\134\000\000\000\000\b\001\000\000\000\000\001\246\002\146\b\001\b\001\000\238\002\158\000\000\002\178\004\030\004*\000\000\b\001\b\001\000\000\0046\000\000\000\000\005\138\b2\b\249\004\253\004\253\bJ\004r\t>\004\253\000\000\004\253\004\253\000\000\004\253\004:\004\253\004\253\b\001\000\000\004\253\b\001\004\253\004\253\004\253\004\253\004\253\004\253\004\253\004\253\b\001\004\253\016~\004\253\000\000\000\000\000\000\000\000\000\000\002\006\004\253\000\000\000\000\000\000\000\000\004\253\004\253\004\253\000\000\002\n\004\253\004\253\004\253\004\253\000\000\004\253\000\000\001\210\004\253\000\000\000\000\000\000\000\000\004\253\004\253\004\253\000\000\000\000\004\253\004\253\004\253\000\000\004\253\004\253\003\154\000\000\000\000\000\000\000\000\004\253\007\002\001\222\000\000\004\253\004\253\000\000\004\253\002\178\004\253\000\000\000\000\000\000\000\000\004\253\004\253\004\253\000\000\004\253\004\253\004\253\004\253\000\000\004\253\004\253\000\000\000\000\000\000\004\253\000\000\004\253\004\253\000\000\000\000\002\150\004\253\007\006\000\000\000\000\020\026\004\253\000\000\n\205\000\000\004\253\n\205\004\253\004\253\n\205\n\205\000\000\004\253\n\205\000\000\n\205\000\000\000\000\n\205\000\000\001*\000\000\n\205\n\205\000\000\n\205\n\205\002\225\n\205\000\000\n\205\000\000\000\000\000\000\002\225\n\205\000\000\000\000\n\205\000\000\000\000\000\000\000\000\000\000\000\000\002\225\n\205\000\000\n\205\000\000\000\000\n\205\n\205\000\n\000\000\000\000\000\000\000\000\n\205\000\000\000\000\n\205\000\000\000\000\n\205\n\205\000\000\n\205\002\225\n\205\n\205\000\000\000\000\000\000\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\n\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\205\n\205\000\000\000\000\n\205\000\000\n\205\000\000\000\000\000\000\000\000\005\166\000\000\002\225\000\000\000\000\001\202\001\206\n\205\n\205\000\000\n\205\n\205\000\000\n\205\000\000\n\205\000\000\n\205\000\000\n\205\000\000\n\205\b\229\b\229\001\210\001\214\001\230\b\229\000\000\001\206\b\229\000\000\000\000\000\000\001\242\003\190\000\000\018\174\b\229\000\000\b\229\b\229\b\229\000\000\b\229\b\229\b\229\001\246\020\022\000\000\0196\000\000\002\158\000\000\002\178\004\030\004*\000\000\b\229\000\000\000\000\020&\000\000\000\000\b\229\b\229\000\000\000\000\b\229\000\000\000\000\002\154\000\000\b\229\000\000\000\000\b\229\000\000\004:\000\000\000\000\b\229\b\229\b\229\000\000\000\000\000\000\000\000\000\000\000\000\b\229\b\229\000\000\000\000\000\000\000\000\000\000\b\229\000\000\000\000\000\000\004\154\000\000\000\000\b\229\000\000\000\000\000\000\000\000\000\000\000\000\b\229\b\229\b\229\000\000\b\229\b\229\000\000\004Y\000\000\000\000\000\000\000\000\004Y\000\000\b\229\004Y\b\229\b\229\000\000\000\000\000\000\b\229\000\000\000\000\000\000\004Y\b\229\000\000\000\000\004Y\b\229\004Y\b\229\b\229\012u\012u\000\000\000\000\004Y\012u\000\000\001\206\012u\004Y\000\000\000\000\000\000\000\000\000\000\004Y\004\186\000\000\012u\012u\012u\004B\012u\012u\012u\000\000\000\000\004Y\004Y\000\000\000\000\000\000\004Y\002\226\000\000\000\000\012u\000\000\000\000\000\000\000\000\000\000\012u\012u\000\000\000\000\012u\000\000\004Y\002\154\004Y\012u\000\000\000\000\012u\000\000\000\000\000\000\004Y\012u\012u\012u\004Y\004Y\002\226\000\238\004Y\004Y\012u\012u\000\000\000\000\004R\004Y\000\000\012u\000\000\000\000\000\000\004\154\000\000\000\000\012u\004Y\000\000\000\000\000\000\000\000\021\026\012u\012u\012u\000\000\012u\012u\000\000\004Y\000\000\004Y\000\000\000\000\004Y\000\000\012u\004Y\012u\012u\004Y\000\000\000\000\012u\000\000\000\000\000\000\004Y\012u\000\000\000\000\004Y\012u\004Y\012u\012u\b\233\b\233\000\000\000\000\000\000\b\233\000\000\001\206\b\233\004Y\000\000\000\000\000\000\000\000\000\000\004Y\b\233\000\000\b\233\b\233\b\233\000\000\b\233\b\233\b\233\000\000\000\000\004Y\000\000\000\000\000\000\000\000\004Y\002\226\000\000\000\000\b\233\000\000\000\000\000\000\000\000\000\000\b\233\b\233\000\000\000\000\b\233\000\000\004Y\002\154\000\000\b\233\000\000\000\000\b\233\000\000\000\000\000\000\000\000\b\233\b\233\b\233\004Y\004Y\000\000\000\000\004Y\004Y\b\233\b\233\000\000\000\000\007n\000\000\000\000\b\233\000\000\000\000\000\000\004\154\000\000\000\000\b\233\004Y\000\000\000\000\000\000\000\000\000\000\b\233\b\233\b\233\002\225\b\233\b\233\000\000\000\000\002\225\002\225\002\225\000\000\000\000\002\225\b\233\002\225\b\233\b\233\002\225\002\225\002\225\b\233\002\225\002\225\002\225\002\225\b\233\002\225\002\225\000\000\b\233\002\225\b\233\b\233\000\000\002\225\000\n\000\000\002\225\002\225\002\225\000\000\002\225\000\000\002\225\002\225\000\n\000\000\002\225\002\225\000\n\002\225\002\225\002\225\000\000\000\000\000\000\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\000\000\002\225\002\225\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\002\225\000\000\002\225\000\000\000\000\002\225\000\000\000\000\000\000\000\000\002\225\002\225\002\225\002\225\000\000\000\000\000\000\002\225\002\225\002\225\002\225\002\225\000\000\006\141\000\000\0009\002\225\002\225\000\000\0009\0009\000\000\0009\0009\002\225\000\000\000\000\000\000\0009\000\000\002\225\000\000\000\000\006\141\002\225\002\225\000\000\000\000\0009\002\225\002\225\002\225\0009\006\222\0009\0009\000\000\000\000\000\000\000\000\000\000\0009\000\000\0009\000\000\000\000\000\000\0009\0009\000\000\0009\0009\0009\0009\0009\000\000\000\000\000\000\0009\000\000\000\000\0009\000\000\000\000\000\000\0009\0009\0009\0009\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\012\181\012\161\000\000\0009\0009\0009\0009\0009\000\000\006\137\000\000\0005\000\000\000\000\000\000\0005\0005\000\000\0005\0005\012\181\000\000\000\000\002\030\0005\000\000\002\"\000\000\000\000\006\137\0009\0009\000\000\002*\0005\0009\0009\0009\0005\002.\0005\0005\0026\012\161\000\000\000\000\000\000\0005\000\000\0005\000\000\000\000\000\000\0005\0005\000\000\0005\0005\0005\0005\0005\000\000\000\000\000\000\0005\000\000\002:\0005\000\000\000\000\000\000\0005\0005\0005\0005\000\000\0005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000\000\000\000\000\000\000\000\0005\0005\0005\0005\0005\000\000\006\153\000\000\012=\000\000\000\000\000\000\012=\012=\000\000\012=\012=\002>\000\000\000\000\000\000\012=\000\000\000\000\000\000\000\000\006\153\0005\0005\000\000\000\000\012=\0005\0005\0005\012=\000\000\012=\012=\000\000\000\000\000\000\000\000\000\000\012=\000\000\012=\000\000\000\000\000\000\012=\012=\000\000\012=\012=\012=\012=\012=\000\000\000\000\000\000\012=\000\000\000\000\012=\000\000\000\000\000\000\012=\012=\012=\012=\000\000\012=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012=\000\000\000\000\000\000\012\181\012\161\000\000\012=\012=\012=\012=\012=\000\000\006\149\000\000\0129\000\000\000\000\000\000\0129\0129\000\000\0129\0129\012\181\000\000\000\000\002\030\0129\000\000\002\"\000\000\000\000\006\149\012=\012=\000\000\002\206\0129\012=\012=\012=\0129\002.\0129\0129\0026\012\161\000\000\000\000\000\000\0129\000\000\0129\000\000\000\000\000\000\0129\0129\000\000\0129\0129\0129\0129\0129\000\000\001\202\001\206\0129\000\000\002:\0129\000\000\000\000\000\000\0129\0129\0129\0129\000\000\0129\000\000\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\0129\000\000\000\000\000\000\000\000\001\242\000\000\0129\0129\0129\0129\0129\001\250\000\000\000\000\000\000\000\000\000\000\001\246\002\146\000\000\000\000\000\000\002\158\002>\002\178\004\030\004*\012y\012y\000\000\000\000\0046\012y\0129\0129\012y\000\000\000\000\0129\0129\0129\000\000\000\000\004\138\000\000\012y\012y\012y\004:\012y\012y\012y\000\000\001\021\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\012y\000\000\000\000\000\000\000\000\000\000\012y\012y\000\000\000\000\012y\000\000\000\000\000\000\001\021\012y\000\000\000\000\012y\000\000\000\000\000\000\000\000\012y\012y\012y\000\000\000\000\000\000\000\000\000\000\000\000\012y\012y\000\000\000\000\001\021\000\000\018\182\012y\000\000\000\000\000\000\012y\001\021\000\000\012y\000\000\000\000\001\021\000\000\000\000\000\000\012y\012y\012y\000\000\012y\012y\001\021\000\000\000\000\000\000\000\000\000\000\000\000\007\253\012y\000\006\012y\012y\007\253\002\186\002\190\012y\002\234\002\130\000\000\000\000\012y\000\000\002\246\000\000\012y\001\021\012y\012y\000\000\003\254\000\000\007\253\001\210\000\000\001\021\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\000\000\000\000\003F\000\000\002\254\000\000\000\000\000\000\003\214\003\218\007\253\003\222\0032\003\234\003\242\006\214\000\000\000\000\007\253\002\178\000\000\000\000\003:\007\253\007\253\000\238\b\026\b\030\b*\b>\000\000\005v\007\253\007\253\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\178\000\000\000\000\000\000\000\000\000\000\000\000\b\190\b\214\t*\005\130\005\134\000\000\000\000\007\253\000\000\000\000\007\253\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\007\253\002\186\002\190\000\000\002\234\002\130\000\000\000\000\005\138\b2\002\246\000\000\000\000\bJ\004r\t>\000\000\014n\000\000\000\000\001\210\000\000\000\000\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\001\197\000\000\003F\000\000\002\254\001\197\000\000\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\006\214\000\000\000\000\000\000\002\178\000\000\000\000\003:\000\000\001\197\000\000\b\026\b\030\b*\b>\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005-\012\245\b\178\000\000\000\000\0051\012\245\001\197\000\000\b\190\b\214\t*\005\130\005\134\000\000\001\197\000\000\000\000\000\000\005-\001\197\001\197\000\238\005-\0051\000\000\003\029\003\029\0051\001\197\001\197\003\029\000\000\000\000\003\029\000\000\005\138\b2\000\000\000\000\000\000\bJ\004r\t>\003\029\003\029\003\029\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\003\029\000\000\001\197\000\000\000\000\000\000\003\029\004\130\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\012\245\012\245\003\029\000\000\000\000\012\245\012\245\003\029\003\029\003\029\000\000\000\000\000\000\005-\000\000\000\000\003\029\003\029\0051\012\245\000\000\012\245\000\000\003\029\012\245\000\000\012\245\003\029\005-\000\000\003\029\005-\000\000\0051\000\000\000\000\0051\003\029\003\029\003\029\004}\003\029\003\029\000\000\000\000\018\198\000\000\000\000\000\000\000\000\000\000\003\029\000\000\003\029\003\029\000\000\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\003\182\n\217\000\000\003\029\n\217\003\029\003\029\003V\002\190\000\000\000\000\002\130\000\000\006\166\000\000\000\000\002\246\000\000\000\000\000\000\n\217\n\217\018\242\n\217\n\217\000\000\001\210\000\000\006\198\000\000\017\018\000\000\000\000\003Z\000\000\017*\b\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\217\019.\003f\000\000\000\000\003r\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\n\217\003\250\000\000\004\002\005j\n\190\005v\000\000\004}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\146\005z\001\202\001\206\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\n\217\000\000\n\217\000\000\000\000\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\n\217\000\000\000\000\n\217\n\217\000\000\005\138\000\000\n\217\000\000\n\217\000\000\004r\n\213\n\217\000\000\n\213\001\246\002\162\003V\002\190\000\000\002\158\002\130\002\178\004\030\004*\000\000\002\246\000\000\000\000\0046\n\213\n\213\000\000\n\213\n\213\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\004:\000\000\000\000\026\022\000\000\000\000\000\000\000\000\n\213\000\000\003f\000\000\000\000\003r\001\190\000\000\000\000\000\000\000\000\026\002\002\178\000\000\000\000\003\246\000\000\000\000\n\213\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\012Y\000\000\000\000\012Y\000\000\000\000\005\130\005\134\000\000\005\202\n\213\000\000\n\213\012Y\000\000\000\000\000\000\000\000\000\000\012Y\000\000\001\221\001\221\000\000\n\213\000\000\001\221\n\213\n\213\001\221\005\138\012Y\n\213\000\000\n\213\000\000\004r\012Y\n\213\001\221\001\221\001\221\000\000\001\221\001\221\001\221\012Y\000\000\000\000\012Y\000\000\000\000\000\000\000\000\012Y\000\000\000\000\001\221\000\000\000\000\000\000\000\000\000\000\001\221\001\221\000\000\000\000\001\221\000\000\000\000\012Y\000\000\001\221\000\000\012Y\001\221\000\000\000\000\000\000\000\000\001\221\001\221\001\221\000\000\012Y\012Y\000\000\000\000\012Y\001\221\001\221\000\000\000\000\000\000\027\242\000\000\001\221\001\r\000\000\000\000\001\221\000\000\001\r\001\221\000\000\012Y\000\000\000\000\000\000\000\000\001\221\001\221\001\221\0256\001\221\001\221\000\000\000\000\000\000\000\000\002\006\001\r\000\000\000\000\001\221\000\000\001\221\001\221\003V\002\190\002\n\001\221\002\130\000\000\006\166\000\000\001\221\002\246\001\210\000\000\004\254\000\000\001\221\001\r\000\000\003R\000\000\001\210\000\000\006\198\000\000\001\r\000\000\000\000\003Z\003\154\001\r\b\226\000\000\000\000\000\000\007\002\001\222\000\000\000\000\001\r\001\r\003f\002\178\000\000\n\174\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\n\177\003\250\000\000\004\002\000\000\n\190\005v\000\000\001\r\000\000\003V\002\190\000\000\007\006\002\130\000\000\006\166\001\r\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\n\198\006\198\000\000\000\000\000\000\000\000\003Z\000\000\000\000\b\226\000\000\000\000\000\000\000\000\n\177\n\206\000\000\n\177\011:\003f\005\138\000\000\n\174\001\190\n\177\000\000\004r\000\000\n\177\002\178\000\000\000\000\003\246\000\000\000\000\n\177\003\250\000\000\004\002\000\000\n\190\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\000\000\n\198\005}\005}\000\000\000\000\000\000\005}\000\000\000\000\005}\000\000\000\000\000\000\000\000\n\177\000\000\000\000\n\177\n\177\005}\005\138\005}\000\000\005}\n\177\005}\004r\000\000\n\177\000\000\000\000\000\000\000\000\000\000\000\000\000\246\000\000\005}\002\194\000\000\000\000\000\000\000\000\005}\005}\000\000\000\000\000\000\028J\005}\000\000\000\000\005}\000\000\003\182\005}\000\000\000\000\000\000\000\000\005}\005}\005}\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\174\000\000\000\000\000\000\005}\005}\000\000\000\000\005}\024Z\000\000\001\006\017\018\000\000\000\000\000\000\000\000\017*\005}\005}\005}\000\000\005}\005}\000\000\000\000\000\000\001\n\007n\000\000\000\000\002\142\000\000\0172\000\000\005}\000\000\027\250\005}\005}\001\014\001\018\001\022\001\026\001\030\001\"\000\000\017F\017r\000\000\005}\004\149\000\000\001&\000\000\001.\0012\000\000\000\000\000\000\000\000\0016\004a\000\000\001:\000\000\000\000\000\246\021\154\000\000\002\018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017\178\001>\001B\001F\001J\001N\003\182\005q\005q\001R\000\000\000\000\005q\001V\000\000\005q\000\000\000\000\017\182\000\000\000\000\000\000\001Z\000\000\017\222\005q\000\000\005q\001^\005q\000\000\005q\000\000\000\000\000\000\000\000\017\018\000\000\001\154\027.\000\000\017*\000\000\005q\000\000\001\158\000\000\001\162\000\000\005q\005q\001\166\000\000\001\170\001\174\007\222\000\000\018Z\005q\000\000\000\000\005q\000\000\000\000\000\000\000\000\005q\005q\000\238\000\000\000\000\017F\018n\000\000\000\000\004a\004a\000\000\000\000\000\000\000\000\000\000\005q\005q\000\000\000\000\005q\000\000\b\245\000\000\000\000\000\000\018~\000\000\000\000\000\000\005q\005q\005q\000\000\005q\005q\000\000\000\000\t\202\000\000\000\000\012:\b\245\000\000\b\245\b\245\000\000\005q\000\000\000\000\005q\005q\n\002\n\026\n\"\n\n\n*\000\000\000\000\001\202\002~\000\000\005q\002\130\000\000\000\000\n2\n:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nB\000\000\000\000\001\210\001\214\001\230\002\134\000\000\000\238\000\000\000\000\000\000\000\000\001\242\001\006\000\000\000\000\t\210\n\018\nJ\nR\nb\000\000\000\000\000\000\000\000\002\138\002\146\000\000\nj\001\n\002\158\000\000\002\178\004\030\004*\000\000\000\000\nr\000\000\020\242\000\000\020\246\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\000\n\146\000\000\n\154\nZ\001&\004:\001.\0012\b\245\nz\000\000\000\000\0016\000\000\005\134\001:\000\000\n\130\n\138\000\000\000\000\000\000\000\000\000\000\021\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\003]\003]\001R\021\006\000\000\003]\001V\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\003]\000\000\003]\001^\003]\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\001\154\027J\000\000\000\000\000\000\003]\000\000\001\158\000\000\001\162\000\000\003]\003]\001\166\000\000\001\170\001\174\005\005\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\000\000\001\202\001\206\003]\bq\bq\000\000\000\000\000\000\bq\000\000\000\000\bq\003]\003]\003]\000\000\003]\003]\000\000\001\210\001\214\bq\005\005\bq\000\000\bq\000\000\bq\000\000\003]\000\000\000\000\000\000\003]\000\000\000\000\000\000\000\000\000\000\bq\000\000\000\000\001\246\002\154\003]\bq\bq\002\158\000\000\002\178\004\030\004*\000\000\000\000\bq\000\000\0046\bq\015\158\000\000\000\000\000\000\bq\bq\bq\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\bq\000\000\000\000\000\000\bq\rA\rA\000\000\000\000\000\000\rA\000\000\000\000\rA\bq\bq\bq\000\000\bq\bq\000\000\000\000\000\000\rA\000\000\rA\000\000\rA\bq\rA\000\000\bq\000\000\000\000\000\000\bq\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\004\254\000\000\bq\rA\rA\rE\rE\000\000\000\000\004B\rE\000\000\rA\rE\000\000\rA\000\000\000\000\000\000\000\000\rA\rA\rA\rE\000\000\rE\000\000\rE\000\000\rE\000\000\000\000\000\000\000\000\000\000\000\000\rA\000\000\000\000\000\000\rA\rE\000\000\000\000\000\000\000\000\000\000\rE\rE\000\000\rA\rA\rA\004B\rA\rA\rE\000\000\000\000\rE\004R\000\000\000\000\000\000\rE\rE\rE\rA\000\000\000\000\000\000\rA\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rE\000\000\rA\000\000\rE\003]\003]\000\000\000\000\000\000\003]\000\000\000\000\003]\rE\rE\rE\000\000\rE\rE\000\000\000\000\000\000\003]\004R\003]\000\000\003]\000\000\003]\000\000\rE\001\202\001\206\000\000\rE\000\000\000\000\000\000\000\000\000\000\003]\000\000\000\000\000\000\000\000\rE\003]\003]\000\000\000\000\001\210\001\214\005\t\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\246\002\162\000\000\000\000\000\000\002\158\003]\002\178\004\030\004*\003]\001\205\000\000\000\000\0046\000\000\001\205\000\000\001\206\001\205\003]\003]\003]\000\000\003]\003]\000\000\b\209\000\000\001\205\005\t\004:\000\000\001\205\004\205\001\205\000\000\003]\000\000\000\000\000\000\003]\000\000\004Y\000\000\000\000\000\000\001\205\004Y\000\000\026\002\000\000\003]\001\205\001\205\000\000\000\000\000\000\000\000\000\000\002\154\000\000\001\205\000\000\000\000\001\205\000\000\004Y\000\000\000\000\001\205\001\205\001\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\205\001\205\000\000\004Y\004\154\003A\000\000\000\000\000\000\000\000\003A\004Y\001\206\003A\001\205\001\205\004Y\002\226\001\205\001\205\000\000\b\205\000\000\003A\000\000\004Y\004Y\003A\001\205\003A\000\000\000\000\000\000\000\000\000\000\001\205\000\000\000\000\000\000\000\000\001\205\003A\000\000\000\000\000\000\000\000\001\205\003A\001\201\000\000\000\181\004Y\000\000\000\000\002\154\000\181\003A\000\000\000\181\003A\004Y\000\000\000\000\000\000\003A\003A\003A\000\000\000\181\000\000\000\181\000\000\000\181\000\000\000\181\000\000\000\000\000\000\000\000\000\000\003A\003A\000\000\000\000\004\154\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\000\003A\003A\000\181\000\000\003A\003A\000\000\000\181\000\000\000\000\000\181\000\000\000\000\000\000\003A\000\181\000\181\000\238\000\000\000\000\000\000\003A\000\000\000\000\000\181\000\181\003A\000\000\000\000\000\000\000\000\000\181\003A\000\000\000\249\000\181\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\181\000\181\000\000\000\000\000\181\000\181\000\000\000\249\000\000\000\249\000\000\000\249\000\000\000\249\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\181\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\181\000\249\000\181\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\249\000\249\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\189\000\249\000\000\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\249\000\249\000\000\000\000\000\249\000\249\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\189\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\249\000\189\000\249\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\189\000\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\185\000\189\000\000\000\000\006\221\000\185\000\000\000\000\000\185\006\221\000\000\000\189\000\189\000\000\000\000\000\189\000\189\000\000\000\185\000\000\000\185\000\000\000\185\000\000\000\185\000\189\000\000\000\000\006\221\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\189\000\185\000\189\000\000\000\000\000\185\000\000\000\000\000\000\006\221\000\185\000\000\000\000\000\185\000\000\000\000\000\000\006\221\000\185\000\185\000\238\000\000\006\221\006\221\000\238\000\000\000\000\000\185\000\185\000\000\000\000\006\221\006\221\000\000\000\185\000\000\000\000\001\169\000\185\000\000\000\000\000\000\001\169\000\000\000\000\001\169\000\000\000\000\000\185\000\185\000\000\000\000\000\185\000\185\000\000\001\169\000\000\006\221\000\000\001\169\r\001\001\169\000\185\000\000\000\000\r\001\006\221\000\000\000\185\000\185\000\000\000\000\000\000\001\169\001\169\000\000\000\000\000\000\000\185\001\169\000\185\000\000\023\186\000\000\r\001\005\005\000\000\000\000\001\169\000\000\000\000\001\169\000\000\000\000\000\000\000\000\001\169\001\169\001\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r\001\000\000\000\000\000\000\000\000\000\000\001\169\000\000\r\001\000\000\001\169\r=\r=\r\001\r\001\000\238\r=\000\000\000\000\r=\001\169\001\169\r\001\r\001\001\169\001\169\000\000\000\000\000\000\r=\005\005\r=\000\000\r=\001\169\r=\000\000\000\000\000\000\000\000\001\169\001\169\000\000\000\000\000\000\000\000\001\169\r=\r\001\000\000\000\000\000\000\001\169\r=\r=\000\000\000\000\r\001\000\000\000\000\000\000\000\000\r=\000\000\000\000\r=\000\000\000\000\000\000\000\000\r=\r=\r=\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r=\000\000\000\000\000\000\r=\r9\r9\000\000\000\000\000\000\r9\000\000\000\000\r9\r=\r=\r=\000\000\r=\r=\000\000\000\000\000\000\r9\000\000\r9\000\000\r9\000\000\r9\000\000\r=\000\000\000\000\000\000\r=\000\000\000\000\000\000\000\000\000\000\r9\000\000\000\000\004\254\000\000\r=\r9\r9\000\000\000\000\000\000\000\000\000\000\000\000\004a\r9\000\000\000\000\r9\000\246\000\000\000\000\002\018\r9\r9\r9\000\000\000\000\000\000\000\000\000\000\000\000\017\178\000\000\000\000\000\000\004a\000\000\003\182\r9\000\000\bu\bu\r9\000\000\000\000\bu\000\000\000\000\bu\017\182\000\000\000\000\r9\r9\r9\017\222\r9\r9\bu\000\000\bu\000\000\bu\000\000\bu\000\000\007J\017\018\000\000\r9\000\000\000\000\017*\r9\000\000\000\000\bu\000\000\000\000\000\000\000\000\000\000\bu\bu\r9\000\000\000\000\000\000\018Z\000\000\000\000\bu\000\000\000\000\bu\000\000\000\000\000\000\000\000\bu\bu\000\238\017F\018n\000\000\000\000\004a\004a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\bu\000\000\000\000\000\000\bu\000\000\006\241\000\000\018~\000\000\000\000\000\000\000\000\000\000\bu\bu\bu\000\000\bu\bu\000\000\000\000\t\202\000\000\000\000\006\241\000\000\000\000\bu\006\241\000\000\bu\000\000\000\000\000\000\bu\n\002\n\026\n\"\n\n\n*\000\000\000\000\000\000\000\000\000\000\bu\001\201\000\000\000\000\n2\n:\001\201\000\000\001\206\001\201\000\000\000\000\000\000\nB\000\000\000\000\000\000\b\205\000\000\001\201\000\000\000\238\000\000\001\201\000\000\001\201\000\000\000\000\000\000\000\000\t\210\n\018\nJ\nR\nb\000\000\000\000\001\201\000\000\000\000\000\000\006\241\nj\001\201\000\000\000\000\000\000\000\000\000\000\000\000\002\154\nr\001\201\000\000\000\000\001\201\000\000\000\000\000\000\000\000\001\201\001\201\001\201\000\000\000\000\n\146\000\000\n\154\nZ\000\000\000\000\000\000\000\000\000\000\nz\000\000\001\201\001\201\000\000\000\000\004\154\000\000\n\130\n\138\000\000\000\000\000\000\016b\000\000\000\000\001\201\001\201\000\000\000\000\001\201\001\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\202\001\201\000\000\000\000\016f\000\000\000\000\000\000\001\201\000\000\000\000\000\000\000\000\001\201\n\002\n\026\n\"\n\n\n*\001\201\000\000\000\000\000\000\000\000\000\000\n\210\000\000\000\000\n2\n:\000\246\001\202\001\206\002\018\000\000\000\000\000\000\nB\000\000\000\000\000\000\000\000\000\000\017\178\000\000\000\238\000\000\004a\000\000\003\182\001\210\001\214\001\230\000\000\t\210\n\018\nJ\nR\nb\000\000\001\242\017\182\000\000\000\000\000\000\000\000\nj\017\222\000\000\000\000\000\000\000\000\000\000\001\246\002\146\nr\000\000\000\000\002\158\017\018\002\178\004\030\004*\000\000\017*\000\000\000\000\0046\000\000\n\146\016j\n\154\nZ\016z\000\000\000\000\000\000\000\000\nz\000\000\018Z\000\000\000\000\000\000\004:\000\000\n\130\n\138\005\169\005\169\000\000\000\000\000\000\005\169\017F\018n\005\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\169\000\000\005\169\000\000\005\169\000\000\005\169\000\000\000\000\018~\000\000\000\000\000\000\000\000\004n\000\000\004r\000\000\005\169\000\000\000\000\000\000\000\000\000\000\005\169\005\169\000\000\000\000\000\000\000\000\007\222\000\000\000\000\005\169\000\000\000\000\005\169\000\000\006I\000\000\000\000\005\169\005\169\000\238\000\000\002\190\000\000\000\000\002\130\000\000\000\000\000\000\000\000\002\246\000\000\002\225\002\225\005\169\006I\002\225\000\000\005\169\000\000\001\210\002\225\000\000\000\000\002\250\000\000\000\000\002\225\005\169\005\169\005\169\002\225\005\169\005\169\000\000\002\254\000\000\000\000\002\225\000\n\000\000\000\000\006\218\0032\001\190\005\169\000\000\000\000\015:\005\169\002\178\002\225\000\000\003:\002\225\002\225\000\000\b\026\b\030\b*\005\169\002\225\005v\000\000\002\225\000\000\000\000\002\225\002\225\000\000\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\005\165\007\030\000\000\005\130\005\134\005\165\002\225\000\000\005\165\000\000\000\000\000\000\000\000\000\000\002\225\002\225\000\000\015v\005\165\000\000\005\165\000\000\005\165\000\000\005\165\000\000\000\000\005\138\b2\000\000\000\000\000\000\bJ\004r\000\000\000\000\005\165\000\000\002\225\000\000\000\000\000\000\005\165\007\138\002\225\000\000\000\000\000\000\000\000\000\000\000\000\005\165\000\000\000\000\005\165\000\000\000\000\004\133\000\000\005\165\005\165\000\238\021\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\165\000\000\005\193\005\193\005\165\000\000\003\182\005\193\000\000\000\000\005\193\000\000\000\000\000\000\005\165\005\165\005\165\000\000\005\165\005\165\005\193\000\000\005\193\000\000\005\193\000\000\005\193\000\000\0222\000\000\000\000\005\165\000\000\000\000\000\000\005\165\017\018\000\000\005\193\000\000\000\000\017*\000\000\000\000\005\193\005\193\005\165\000\000\000\000\000\000\022\214\022\230\000\000\005\193\000\000\000\000\005\193\000\000\000\000\000\000\000\000\005\193\005\193\005\193\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\133\005\193\000\000\005\189\007\030\005\193\000\000\000\000\005\189\023\218\000\000\005\189\000\000\000\000\000\000\005\193\005\193\005\193\000\000\005\193\005\193\005\189\000\000\005\189\000\000\005\189\000\000\005\189\000\000\000\000\000\000\000\000\005\193\000\000\000\000\000\000\005\193\000\000\000\000\005\189\000\000\000\000\000\000\000\000\000\000\005\189\007\138\007\130\000\000\000\000\000\000\000\000\000\000\000\000\005\189\000\000\000\000\005\189\000\000\000\000\000\000\000\000\005\189\005\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\189\003V\002\190\000\000\005\189\002\130\000\000\006\166\000\000\000\000\002\246\000\000\000\000\000\000\005\189\005\189\005\189\000\000\005\189\005\189\001\210\000\000\006\198\000\000\000\000\000\000\000\000\003Z\000\000\000\000\b\226\005\189\000\000\000\000\000\000\005\189\000\000\000\000\000\000\000\000\003f\000\000\000\000\n\174\001\190\000\000\005\189\012\186\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\n\190\005v\t\202\000\000\000\000\012:\000\000\000\000\000\000\b\245\000\000\000\000\000\000\005z\000\000\000\000\n\002\n\026\n\"\n\n\n*\005\130\005\134\000\000\000\000\n\198\000\000\000\000\000\000\000\000\n2\n:\000\000\000\000\000\000\000\000\000\000\000\000\000\000\nB\n\206\000\000\000\000\n\218\000\000\005\138\000\000\000\238\000\000\000\000\000\000\004r\000\000\000\000\000\000\000\000\t\210\n\018\nJ\nR\nb\000\000\003=\000\000\000\000\000\000\000\000\003=\nj\001\206\003=\000\000\000\000\000\000\000\000\000\000\000\000\nr\000\000\000\000\003=\000\000\000\000\000\000\003=\000\000\003=\000\000\000\000\000\000\000\000\n\146\000\000\n\154\nZ\000\000\000\000\000\000\003=\000\000\nz\000\000\000\000\000\000\003=\000\000\000\000\001M\n\130\n\138\000\000\002\154\001M\003=\000\000\001M\003=\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\001M\000\000\001M\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\003=\003=\000\000\000\000\004\154\000\000\001M\000\000\000\000\000\000\000\000\000\000\001M\000\000\003=\003=\001M\000\000\003=\003=\000\000\001M\000\000\000\000\001M\000\000\000\000\000\000\003=\001M\001M\000\238\000\000\001I\000\000\003=\000\000\000\000\001I\001M\003=\001I\000\000\000\000\000\000\001M\003=\000\000\000\000\001M\000\000\001I\000\000\001I\000\000\001I\000\000\001I\000\000\001M\001M\001M\000\000\001M\001M\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\001M\000\000\001I\000\000\000\000\000\000\001I\001M\000\000\000\000\000\000\001I\000\000\000\000\001I\000\000\000\000\000\000\001M\001I\001I\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\001I\001\133\000\000\000\000\000\000\000\000\001\133\000\000\012\153\001\133\001I\001I\001I\000\000\001I\001I\000\000\012\153\000\000\001\133\000\000\001\133\000\000\001\133\001I\001\133\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001I\001\133\012\153\000\000\000\000\000\000\000\000\000\000\012\153\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001\133\001\133\001\133\000\000\000\000\0019\000\000\000\000\000\000\000\000\0019\000\000\000\157\0019\000\000\000\000\001\133\000\000\000\000\000\000\012\153\000\157\000\000\0019\000\000\0019\000\000\0019\000\000\0019\001\133\001\133\001\133\000\000\001\133\001\133\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\0019\000\157\000\000\000\000\001\133\000\000\000\000\000\157\000\000\000\000\000\000\000\000\0019\000\000\000\000\001\133\000\000\0019\0019\0019\000\000\001\213\000\000\000\000\000\000\000\000\001\213\000\000\015\130\001\213\000\000\002\130\000\000\0019\000\000\000\000\000\000\000\157\000\000\001\213\000\000\000\000\000\000\001\213\000\000\001\213\000\000\0019\0019\0019\000\000\0019\0019\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\0019\015\134\000\000\000\000\001\213\000\000\000\000\001\213\000\000\000\000\000\000\0019\001\213\001\213\000\000\015\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\213\000Y\000\000\000\000\001\213\000\000\000Y\000\000\000Y\000\000\000\000\000\000\000\000\005\134\001\213\001\213\000\000\000Y\001\213\001\213\000Y\000\000\000\000\000\000\000Y\000Y\000\000\b\145\001\213\000\000\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000\000\001\213\000Y\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000Y\000Y\000Y\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000Y\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\166\000\000\000Y\002\246\000\000\000Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000Y\006\198\000\000\000Y\000\000\000\000\003Z\000\000\b\145\b\226\000\000\000\000\000Y\004Y\007\030\000Y\000\000\t&\004Y\003f\000\000\004Y\r\166\001\190\000\000\000\000\000\000\000\000\000Y\002\178\000\000\004Y\003\246\000\000\000\000\004Y\003\250\004Y\004\002\000\000\n\190\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004Y\000\000\000\000\000\000\005z\000\000\004Y\007\138\000\000\000\000\004Y\000\000\005\130\005\134\000\000\004Y\000\000\000\000\004Y\000\000\000\000\000\000\000\000\004Y\002\226\000\238\000\000\000\000\000\000\000\000\000\000\000\000\004Y\004Y\r\182\000\000\005\138\000\000\000\000\004Y\004Y\000\000\004r\004Y\000\000\012\022\000\000\000\000\000\000\000\000\012\022\000\000\000\000\004Y\004Y\000\000\000\000\004Y\004Y\000\000\000\000\t\202\000\000\000\000\000\000\000\000\t\202\004Y\012\026\000\000\000\000\000\000\000\000\012\242\004Y\n\002\n\026\n\"\n\n\n*\n\002\n\026\n\"\n\n\n*\004Y\000\000\000\000\000\000\n2\n:\000\000\000\000\000\000\n2\n:\000\000\000\000\nB\000\000\000\000\000\000\000\000\nB\000\000\000\000\000\238\000\000\000\000\000\000\000\000\000\238\000\000\000\000\000\000\t\210\n\018\nJ\nR\nb\t\210\n\018\nJ\nR\nb\000\000\000\000\nj\000\000\000\000\000\000\000\000\nj\000\000\000\000\000\000\nr\000\000\0035\000\000\000\000\nr\000\000\0035\000\000\000\000\0035\000\000\000\000\000\000\n\146\000\000\n\154\nZ\000\000\n\146\0035\n\154\nZ\nz\0035\000\000\0035\000\000\nz\000\000\000\000\n\130\n\138\000\000\000\000\000\000\n\130\n\138\0035\015\154\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\003V\002\190\000\000\000\000\002\130\000\000\006\166\000\000\000\000\002\246\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\001\210\000\000\006\198\000\000\000\000\000\000\000\000\003Z\0035\0035\b\226\000\000\0035\0035\000\000\000\000\000\000\000\000\023B\000\000\003f\000\000\0035\003r\001\190\000\000\000\000\000\000\015\250\0035\002\178\000\000\000\000\003\246\0035\000\000\000\000\003\250\000\000\004\002\0035\n\190\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\166\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\021\178\006\198\000\000\000\000\000\000\000\000\003Z\000\000\000\000\b\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024\014\003f\005\138\000\000\n\174\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\n\190\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\166\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\n\198\006\198\000\000\000\000\000\000\000\000\003Z\000\000\000\000\b\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022J\003f\005\138\000\000\n\174\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005\194\n\190\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\000\000\000\000\005z\002\246\000\000\000\000\000\000\000\000\005\198\000\000\005\130\005\134\000\000\001\210\n\198\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\170\003f\005\138\000\000\003r\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\t\017\000\000\000\000\000\000\000\000\000\000\003V\002\190\000\000\005z\002\130\000\000\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\t\017\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\006\022\000\000\000\000\005\138\002\225\002\225\000\000\003f\002\225\004r\003r\001\190\000\000\002\225\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\002\225\003\250\000\000\004\002\005j\000\000\005v\002\225\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\002\225\000\000\000\000\002\225\002\225\000\000\005\130\005\134\000\000\005\202\002\225\000\000\000\000\002\225\000\000\000\000\002\225\002\225\000\000\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\000\000\t\017\000\000\002\225\000\000\004r\004A\004A\000\000\000\000\004A\002\225\002\225\000\000\002\225\004A\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\000\000\004A\000\000\000\000\000\000\000\000\000\000\000\000\004A\022\250\000\000\002\225\023\018\000\000\000\000\002\225\000\000\002\225\000\000\000\000\000\000\004A\000\000\000\000\004A\004A\000\000\000\000\000\000\000\000\000\000\004A\000\000\000\000\004A\000\000\000\000\000\238\004A\000\000\004A\004A\000\000\004A\0035\000\000\000\000\000\000\0035\0035\000\000\000\000\0035\0035\000\000\004A\0035\000\000\000\000\000\000\000\000\000\000\0035\004A\004A\000\000\0035\000\000\0035\000\000\0035\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\015\154\000\000\000\000\0035\015\154\0035\004A\000\000\000\000\0035\000\000\000\000\004A\000\000\0035\000\000\000\000\0035\0035\000\000\000\000\0035\0035\0035\0035\000\000\0035\0035\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\000\000\000\000\0035\0035\025\134\000\000\0035\0035\025\182\000\000\0035\0035\012\145\000\000\000\000\000\000\000\000\012\145\000\000\000\000\012\145\000\000\015\250\0035\000\000\000\000\015\250\0035\0035\000\000\012\145\000\000\0035\000\000\012\145\000\000\012\145\000\000\000\000\000\000\000\000\000\000\004\253\000\000\000\000\000\000\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\145\000\000\000\000\012\145\000\000\000\000\003V\002\190\012\145\012\145\002\130\000\000\006\166\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\145\001\210\000\000\006\198\012\145\000\000\000\000\000\000\003Z\000\000\000\000\b\226\000\000\000\000\012\145\012\145\002z\000\000\012\145\012\145\000\000\003f\000\000\000\000\t\014\001\190\000\000\000\000\012\145\000\000\000\000\002\178\026v\000\000\003\246\012\145\000\000\000\000\003\250\000\000\004\002\000\000\n\190\005v\005U\000\000\012\145\000\000\000\000\005U\000\000\000\000\005U\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\005U\005\130\005\134\000\000\005U\000\000\005U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005U\000\000\000\000\000\000\000\000\000\000\005U\005\138\000\000\000\000\000\000\000\000\007\222\004r\000\000\005U\000\000\000\000\005U\000\000\000\000\000\000\000\000\005U\005U\000\238\000\000\005Y\000\000\000\000\000\000\000\000\005Y\000\000\000\000\005Y\000\000\000\000\000\000\005U\005U\000\000\000\000\005U\000\000\005Y\000\000\000\000\000\000\005Y\000\000\005Y\000\000\005U\005U\000\000\000\000\005U\005U\000\000\000\000\000\000\000\000\005Y\000\000\000\000\000\000\000\000\000\000\005Y\000\000\0035\000\000\000\000\005U\007\222\0035\000\000\005Y\0035\000\000\005Y\000\000\000\000\000\000\005U\005Y\005Y\000\238\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\005Y\005Y\000\000\000\000\005Y\0035\015\154\000\000\000\000\000\000\000\000\0035\000\000\000\000\005Y\005Y\000\000\000\000\005Y\005Y\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\006\001\000\000\000\000\000\000\005Y\006\001\000\000\000\000\006\001\000\000\000\000\000\000\000\000\0035\000\000\005Y\000\000\0035\006\001\000\000\000\000\000\000\006\001\000\000\006\001\000\000\000\000\0035\0035\017\130\000\000\0035\0035\000\000\000\000\000\000\006\001\000\000\000\000\000\000\000\000\000\000\006\001\000\000\000\000\000\000\000\000\015\250\0035\000\000\000\000\006\001\000\000\000\000\006\001\000\000\000\000\000\000\000\000\006\001\006\001\000\238\000\000\000\000\000\000\000\000\000\000\025^\000\000\000\000\000\000\000\000\000\000\003V\002\190\006\001\000\000\002\130\000\000\006\001\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\006\001\006\001\021>\001\210\006\001\006\001\000\000\000\000\000\000\000\000\003Z\001\202\001\206\000\000\006\001\000\000\000\000\000\000\000\000\000\000\000\000\006\001\000\000\003f\000\000\000\000\003r\001\190\000\000\000\000\001\210\001\214\006\001\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\005\238\000\000\000\000\000\000\001\246\002\162\003V\002\190\005z\002\158\002\130\002\178\004\030\004*\000\000\002\246\005\130\005\134\0046\005\202\000\000\000\000\003\254\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\004:\000\000\000\000\004\209\000\000\005\138\000\000\006\146\000\000\b\202\003f\004r\000\000\003r\001\190\000\000\000\000\000\000\000\000\026\002\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\006.\000\000\000\000\000\000\000\000\000\000\003V\002\190\000\000\005z\002\130\000\000\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\006R\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\006:\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\003f\002\130\004r\003r\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003Z\000\000\000\000\000\000\000\000\007\129\000\000\000\000\007\129\000\000\000\000\005z\000\000\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\005\202\002\178\007\129\007\129\003\246\007\129\007\129\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\006M\000\000\000\000\005z\007\129\004r\003V\002\190\000\000\000\000\002\130\005\130\005\134\000\000\005\202\002\246\000\000\000\000\000\000\000\000\006M\000\000\007\129\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\005\138\011\166\000\000\000\000\000\000\000\000\004r\003V\002\190\000\000\003f\002\130\000\000\003r\001\190\000\000\002\246\007\129\000\000\007\129\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\005\226\005v\003Z\007\129\007\129\000\000\000\000\000\000\007\129\000\000\007\129\000\000\000\000\005z\007\129\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\011\178\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\005z\002\130\004r\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\011\190\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\003f\002\130\004r\003r\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\005\202\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\006q\000\000\000\000\005z\000\000\004r\000\000\002\190\000\000\000\000\002\130\005\130\005\134\000\000\005\202\002\246\000\000\000\000\000\000\000\000\006q\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\002\254\004r\000\000\000\000\000\000\000\000\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003:\000\000\000\000\000\000\b\026\b\030\b*\000\000\000\000\005v\000\000\000\000\000\000\006\249\007\030\000\000\000\000\000\000\006\249\000\000\000\000\006\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\006\249\000\000\000\000\000\000\006\249\000\000\006\249\000\000\001\181\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001\181\000\000\006\249\000\000\000\000\000\000\005\138\b2\006\249\007\138\001\181\bJ\004r\000\000\001\181\000\000\001\181\006\249\000\000\000\000\006\249\000\000\000\000\000\000\000\000\006\249\006\249\000\238\001\181\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\006\249\000\000\001\181\000\000\006\249\001\181\000\000\000\000\000\000\000\000\001\181\001\181\001\181\000\000\006\249\006\249\000\000\000\000\006\249\006\249\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001\217\001\181\000\000\000\000\000\000\001\217\006\249\000\000\001\217\000\000\000\000\001\181\001\181\000\000\000\000\001\181\001\181\000\000\001\217\000\000\000\000\017\142\001\217\000\000\001\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\000\000\001\217\001\181\000\000\000\000\000\000\000\000\001\217\000\000\000\000\006\005\000\000\000\000\000\000\000\000\006\005\001\217\000\000\006\005\001\217\000\000\000\000\000\000\000\000\001\217\001\217\000\000\000\000\006\005\000\000\000\000\000\000\006\005\000\000\006\005\000\000\000\000\000\000\000\000\000\000\001\217\000\000\000\000\000\000\001\217\000\000\006\005\000\000\000\000\000\000\000\000\000\000\006\005\000\000\001\217\001\217\000\000\000\000\001\217\001\217\000\000\006\005\000\000\000\000\006\005\000\000\000\000\000\000\001\217\006\005\006\005\000\238\000\000\000\000\000\000\001\217\000\000\000\000\000\000\000\000\021\026\000\000\000\000\000\000\000\000\006\005\001\217\012\145\000\000\006\005\000\000\000\000\012\145\000\000\000\000\012\145\000\000\000\000\000\000\006\005\006\005\000\000\000\000\006\005\006\005\012\145\000\000\000\000\000\000\012\145\000\000\012\145\000\000\006\005\000\000\000\000\000\000\004\253\000\000\000\000\006\005\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\012\145\000\000\006\005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\145\000\000\000\000\000\000\000\000\012\145\012\145\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012I\000\000\002\190\012I\000\000\028\002\000\000\012\145\000\000\000\000\028\006\000\000\000\000\012I\000\000\000\000\000\000\000\000\000\000\012I\000\000\012\145\012\145\002z\000\000\012\145\012\145\000\000\000\000\000\000\000\000\012I\000\000\000\000\000\000\012\145\000\000\012I\000\000\026\174\000\000\000\000\012\145\001\002\001\190\000\000\012I\000\000\000\000\012I\000\000\000\000\000\000\012\145\012I\004Y\000\000\000\000\000\000\000\000\004Y\000\000\028\n\004Y\000\000\000\000\000\000\000\000\000\000\000\000\012I\000\000\000\000\004Y\012I\000\000\000\000\004Y\000\000\004Y\000\000\000\000\000\000\028\014\012I\012I\000\000\000\000\012I\000\000\000\000\004Y\000\000\000\000\000\000\000\000\000\000\004Y\b1\b1\000\000\000\000\b1\007\222\000\000\012I\004Y\b1\000\000\004Y\000\000\000\000\000\000\016*\004Y\002\226\000\238\b1\000\000\000\000\000\000\000\000\000\000\000\000\b1\000\000\000\000\000\000\000\000\000\000\004Y\000\000\000\000\000\000\004Y\000\000\000\000\b1\000\000\000\000\b1\b1\000\000\000\000\004Y\004Y\000\000\b1\004Y\004Y\b1\000\000\000\000\000\000\b1\000\000\b1\b1\007J\b1\000\000\000\000\000\000\000\000\001q\004Y\000\000\000\000\000\000\001q\025~\b1\001q\000\000\000\000\000\000\004Y\000\000\000\000\b1\b1\000\000\001q\000\000\001q\000\000\001q\000\000\001q\000\000\000\237\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\000\001q\000\000\000\000\b1\000\000\000\000\001q\000\000\000\237\b1\000\000\000\000\000\237\000\000\000\237\000\000\000\000\000\000\001q\000\000\000\000\000\000\000\000\001q\001q\000\238\000\237\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\237\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\237\000\237\000\238\000\000\001q\001q\001q\000\000\001q\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\241\000\237\000\000\000\000\000\000\000\241\001q\000\000\000\241\000\000\000\000\000\237\000\237\000\000\000\000\000\237\000\237\001q\000\241\000\000\000\000\000\000\000\241\000\000\000\241\000\000\006\245\000\000\000\000\000\000\000\000\006\245\000\237\000\000\006\245\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\241\000\237\006\245\000\000\000\000\000\000\006\245\000\000\006\245\000\241\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\241\000\241\000\238\006\245\000\000\000\000\000\000\000\000\000\000\006\245\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\006\245\000\000\000\241\006\245\000\000\000\000\000\000\000\000\006\245\006\245\000\000\000\000\000\241\000\241\000\000\000\000\000\241\000\241\000\000\000\000\000\000\000\000\000\000\000\000\006\245\000\000\000\000\000\000\006\245\000\000\000\000\000\000\000\000\000\241\000\000\006\201\006\201\000\000\006\245\006\245\016\194\000\000\006\245\006\245\000\241\005\249\000\000\000\000\000\000\000\000\005\249\000\000\000\000\005\249\006\201\006\201\006\201\000\000\000\000\006\245\017b\000\000\000\000\005\249\006\201\000\000\000\000\005\249\000\000\005\249\000\000\005a\007\030\000\000\000\000\000\000\005a\006\201\006\201\005a\000\000\005\249\006\201\000\000\006\201\006\201\006\201\005\249\000\000\005a\000\000\006\201\000\000\005a\000\000\005a\005\249\000\000\000\000\005\249\000\000\000\000\000\000\000\000\005\249\005\249\000\000\005a\006\201\000\000\000\000\000\000\000\000\005a\007\138\000\000\000\000\000\000\000\000\000\000\005\249\000\000\000\000\000\000\005\249\005a\000\000\000\000\000\000\000\000\005a\005a\000\238\000\000\005\249\005\249\000\000\000\000\005\249\005\249\000\000\000\000\000\000\000\000\011\249\000\000\005a\000\000\000\000\011\249\000\000\004\230\011\249\000\000\000\000\005\249\000\000\000\000\000\000\000\000\005a\005a\011\249\000\000\005a\005a\011\249\000\000\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\005a\000\000\000\000\000\000\000\000\011\249\000\000\000\000\000\000\000\000\000\000\000\000\001\202\002~\011\249\000\000\002\130\011\249\000\000\000\000\000\000\000\000\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\011\249\t\190\000\000\001\242\011\249\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\249\011\249\002\138\002\146\011\249\011\249\000\000\002\158\000\000\002\178\004\030\004*\0041\000\000\000\000\000\000\020\242\0041\026Z\004)\0041\011\249\000\000\000\000\004)\000\000\000\000\004)\000\000\000\000\0041\000\000\n\162\004:\0041\000\000\0041\004)\000\000\000\000\000\000\004)\005\134\004)\000\000\000\000\000\000\000\000\0041\000\000\000\000\000\000\026f\000\000\0041\004)\000\000\000\000\000\000\000\000\000\000\004)\000\000\0041\000\000\000\000\0041\000\000\000\000\021\006\004)\0041\000\000\004)\000\000\000\000\000\000\000\000\004)\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0041\000\000\000\000\000\000\0041\004I\000\000\004)\000\000\000\000\004I\004)\004\025\004I\0041\0041\000\000\004\025\0041\0041\004\025\004)\004)\004I\000\000\004)\004)\004I\000\000\004I\004\025\000\000\000\000\000\000\004\025\0041\004\025\000\000\000\000\000\000\000\000\004I\004)\000\000\000\000\000\000\016\234\004I\004\025\000\000\000\000\000\000\000\000\019\214\004\025\000\000\004I\000\000\000\000\004I\000\000\000\000\000\000\004\025\004I\000\000\004\025\000\000\000\000\000\000\000\000\004\025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004I\000\000\000\000\n\222\004I\000\000\000\000\004\025\000\000\001\202\001\206\004\025\000\000\000\000\004I\004I\000\000\000\000\004I\004I\000\000\004\025\004\025\002\142\000\000\004\025\004\025\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\004I\000\000\000\000\001\242\000\000\000\000\000\000\004\025\000\000\000\000\001\250\020\182\006\205\006\205\000\000\000\000\001\246\002\146\024.\000\000\000\000\002\158\000\000\002\178\004\030\004*\000\000\000\000\004.\000\000\0046\006\205\006\205\006\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\205\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\000\000\000\000\006\205\006\205\000\000\000\000\000\000\006\205\000\000\006\205\006\205\006\205\000\000\0049\000\000\000\000\006\205\000\000\0049\000\000\004!\0049\000\000\000\000\015\138\004!\000\000\000\000\004!\000\000\000\000\0049\000\000\006\205\000\000\0049\000\000\0049\004!\000\000\000\000\000\000\004!\000\000\004!\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\0049\004!\000\000\004Q\000\000\000\000\000\000\004!\004Q\000\000\000\000\004Q\0049\000\000\004\"\000\000\006\205\0049\000\000\004!\000\000\004Q\000\000\000\000\004!\004Q\000\000\004Q\000\000\000\000\000\000\000\000\000\000\0049\000\000\000\000\000\000\000\000\000\000\004Q\004!\000\000\000\000\000\000\000\000\004Q\000\000\0049\0049\000\000\000\000\0049\0049\000\000\004!\004!\000\000\004Q\004!\004!\000\000\000\000\004Q\011*\000\000\000\000\000\000\000\000\0049\001\202\001\206\000\000\000\000\000\000\000\000\004!\000\000\000\000\004Q\018\018\000\000\000\000\000\000\000\000\000\000\003\254\020b\000\000\001\210\001\214\001\230\000\000\004Q\004Q\000\000\000\000\004Q\004Q\001\242\004m\000\000\000\000\000\000\000\000\000\246\000\000\000\000\002\194\000\000\000\000\000\000\001\246\002\146\004Q\000\000\000\000\002\158\003\178\002\178\004\030\004*\004m\000\000\003\182\020\222\0046\007\149\000\000\000\000\007\149\000\000\000\000\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\174\004:\000\000\000\000\007\149\007\149\000\000\007\149\007\149\024Z\000\000\000\000\017\018\000\000\000\000\000\000\000\000\017*\000\000\000\000\000\000\007m\000\000\000\000\007m\000\000\000\000\000\000\007\149\000\000\000\000\000\000\000\000\0172\000\000\000\000\000\000\004n\000\000\004r\007m\007m\000\000\007m\007m\000\000\000\238\017F\017r\000\000\000\000\004m\004m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007m\000\000\007\153\000\000\021\154\007\153\000\000\000\000\000\000\000\000\000\000\000\000\007\149\000\000\007\149\000\000\000\000\000\000\007m\000\000\000\000\007\153\007\153\000\000\007\153\007\153\007\149\000\000\000\000\005\234\007\149\000\000\000\000\000\000\007\149\007\137\007\149\000\000\007\137\000\000\007\149\000\000\000\000\000\000\000\000\007\153\000\000\000\000\007m\000\000\007m\000\000\000\000\000\000\007\137\007\137\000\000\007\137\007\137\000\000\000\000\000\000\007m\000\238\000\000\005\234\007m\000\000\000\000\000\000\007m\000\000\007m\000\000\000\000\000\000\007m\000\000\007\137\000\000\rI\rI\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\153\000\000\007\153\000\238\000\000\000\000\rI\rI\rI\0072\000\000\000\000\000\000\000\000\007\153\000\000\rI\005\234\007\153\000\000\000\000\000\000\007\153\000\000\007\153\001\202\001\206\022N\007\153\rI\rI\000\000\000\000\007\137\rI\007\137\rI\rI\rI\000\000\000\000\000\000\000\000\rI\001\210\002\170\001\230\006*\000\000\000\000\005\234\007\137\000\000\000\000\001\242\007\137\000\000\007\137\000\000\000\000\rI\007\137\000\000\001\202\001\206\022\174\000\000\001\246\002\146\000\000\000\000\000\000\002\158\000\000\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\001\210\002\170\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\000\000\000\000\000\246\000\000\004:\002\194\000\000\000\000\000\000\000\000\000\000\001\246\002\146\000\000\000\000\004\141\002\158\000\000\002\178\004\030\004*\003\182\000\000\000\000\000\000\0046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\174\000\000\000\000\004:\000\000\000\000\000\000\000\000\000\000\024Z\000\000\000\000\017\018\000\000\000\000\000\000\000\000\017*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017F\017r\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\154")) + ((16, "C\170R\004Ff\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021HFf\000\000\000\000\020XFfC\170\020\182\000-\000[\\\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\238\004\184\000F\000\000\001v\t|\000\000\005R\002d\nt\000\000\000\244\002\204\011l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\220\000\000\000\000\000\000\002BU2\000\000\000\000\000\000\001\148\000\000\000\000\000\000\002\238\004\026\000\000\000\000U2J\014\020X\021\178]`\020Xf\166R\004\020XN`\000\000\005\144\000\000Dp\b\160\000\000C\146\000\000\027\158\000\000\000\000\003\224\000\000\001\148\000\000\000\000\000\000\006B\000\000C\146\000\000\0046w@_ e\002\000\000\132\182\134f\000\000Mr`\202\000\000Y~\026\206p\158\001\148q&FfC\170\000\000\000\000R\004\020XSNDp\005.w@\000\000\128\252FfC\170R\004\020X\000\000\000\000\016x\023\022\001N\006&\000\000\005&\007\030\000\000\000\000\000\000\000\000\000\000\020X\000\000A\206i\228C\170\000\000\000\000Q\240\020XG\030X\234\000\000\004\002\000\000\000\000\004\250\000\000\000\000I\182\004\002\024\138\003\130\0020\000\000\000\000\003\014\000\000\021\178\006\030\006P\020X\028\254\020XC\170C\170\000\000R\012Q\182\020X\028\254A\248\020X\000\000\000\000\000\000R\004\020X\000\000\000\248\000\000X\234z\006z\148\000\000\006&\000\000\006\228\000\000\000\000C,U2\134\178\000\000h\206\134\178\000\000h\206h\206\000b\002\236\0008\000\000\020\190\000\000\b\004\000\000\000\000\bZ\000\000\000\000\000\000h\206\001\148\000\000\000\000X\000U2U\166`\202\000\000\000\000OL\000b\000\000\000\000`\202\b\004U2\000\000PB`\202Q8\000\000\000\000\000\000\004Z\000\000h\206\000\000\001\000\137J\000\000U2\005\216U2\000\000\022\\\t$\001\148\000\000\000\000\023\224\000\000\006\208\000\000Z\162\b\006\000\000\b\244h\206\n\198\000\000\011\190\000\000\007\200\000\000\000\000\007\160\000\000\000\000\000\000\021 4X\234Q\240\020XX\234\000\000\000b\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000N\\\027v\000\000\000\000\000\000\001\244&\174t\134\000\000\000\000Q\240\020XX\234\000\000\000\000rvX\234{\178z\148\000\000\136x\000\000X\234\000\000\000\000Y\214I\182\001\154\001\154\000\000\n\156X\234\000\000\000\000\000\000\004\250\011*\000\000A\012\000\000\000\000{ \000\000\136\192h\206\000\000\004b\000\000\000\000{h\000\000\137\026\t\002\000\000\000\000\000\000\000\000\011\128\000\000\022\168\000\000\000\000{ \000\000\005\242\000\000\000\000DHu\018\000\000\000\000Bn\023|\019\252\023\174\000\000\000\000\000\000\000\000\001F\000\000\000\000[l\b\164\011h\000\017U2\002\204\011\196\000\000\000\000\b\200\011h\b\156\000\000i\250R,Q\182\020X\028\254\000-\000\018\0020\000\000\012.\021\178\021\178\000-\000\018\000\018\021\178\000\000j\140\t\012Dp\006&\006d\137\164\000\000U2e\162U2`\000fBU2\006`U2f\220\000\000\t\238\b\252\tL\021\178k&\000\000\005B\t\190]\130\000\000\000\000\000\000\000\000\021\178k\192\021\178lZ\020d\0008`\160\007\030\0008`\248\000\000l\244\t\012\000\000\000\000\000\000\001B\000\000\000\000\003\144\000\000\004\172\028\254\000\000^@A\248\000\000\031\138\000\000\000\000\021\178\002\152\000\000\000\000\000\000\000\000\\$\000\000\003\184\000\000Vr\001\130\006\026\000\000\0226W\204R\004\020XH(\158\000\000\012H\b\184\000\00056\000\000\012\160\t\176\000\0006.\000\000\r\172\n\168\000\0007&\012$\025\016\000\000\r@\011\160\000\0008\030\000\000\r\152\012\152\000\0009\022\000\000\014\002\r\144\000\000:\014\014\136\000\000;\006\015\128\019`\000\000\000\000\000\000\r\186\000\000\000\000\r\156\000\000\000\000\014`\000\000\b\026\000\000\000\000\000\000\015^\000\000\015\130\000\000\000\000Lz\001\154\016Dq\168`\202\000b\000\000\000\000q\168\000\000\000\000\000\000q\168\000\000\016&\000\000\000\000\000\000\000\000\000\000\000\000;\254X\234\000\000\000\000\016j\000\000<\246\000\000=\238\000\000#\250\000\000\000\000\011\210\000\000\000\000X\234\000\000\000\000}\180\014\018\000\000\000\000H\240\000\000\b\240\000\000\000\000W6\000\000\r\178\000\000\000\000\001\130\n\244\000\000\000\000\0226\022\028\006&\000\000A\214\000\000!,\023\176\021\220\000\000\000\000\014|\000\000\000\000\001\238\025\030W\214\000\000\025\030\000\000\rD\000\000\000\000\014\164\000\000\000\000g~\005\212\004H\000\000\000\000\012\186\000\000\000\000\014\144\000\000\000\000\000\000\020X\028\254\004\176\000\000\000\000\023&\003\130\0020\b`\028\254x.\021\178\001B\028\254x\172\015\242\000\000\000\000\b`\000\000I\248\019\248\021\204\000\000\n@\016l\000\000\016v\000V`\202\003\130\000\000\016J\015\214p\158\012\156U2\030\128\020F\t\142\004\248\000\000\031x\016\148\000\000\tT\000\000\000\000\016\170`\202a\152\000\000g\208`\202\016\138`\202n\024b8\001N\016R\000\000\000\000\000\000\020X\129F\000\000X\234q\246\000\000\000\000\016\210\000\000\000\000\000\000>\230\017\030z\006?\222h|\000\000\000\000F\138\000\000\006\026\000\000IZ\000\000\020X\000\000\021\178\006x\000\000\128\252\000\000\020X\028\254\128\252\000\000\025D\023\022\001N\001\148\130\218\021\178~Bq\246\000\000\007b\n\160\0020\b`q\246\133*\003\130\0020\b`q\246\133*\000\000\000\000\b`q\246\000\000FfC\170X\234\027B\000\000\000\000FfC\170Q\182\020X\028\254\128\252\000\000\020\182\000-\000[\016HU2\rt\017\006\131\154\000\000q\246\000\000I\248\019\248\021\204y\004\023\228\012\030~v\bj\016d\020Xq\246\000\000\020Xq\246\000\000h\206f\166\019\134\002\222\001N\0008P\012\000\000\001N\0008P\012\000\000\0274\023\022\001N\001\148Q\002\021\178q\246\000\000\007b\011\152\0212\014~\000\000P\012\000\000\0020\016h\021\178q\246\135(\003\130\0020\016n\021\178q\246\135(\000\000\000\000\tX\000\000\128\208\000\000\021\178\131\206P\012\000\000\tX\000\000J\014\020X\021\178q\246\000\000I\248\019\248\021\204r\144B\138\026\222\019\170\002\142\000\000\014^C\146\000\017\000\000\017\002\016\176\024\196\020XU\218U2\tH\000\000X\184\001N\007\188\r\230\000\000\r\212\000\000\017\018\016\156U2PJ\000\000\0032\002:\014\192\000\000\014\204\000\000\017\022\016\162p\158\014 U2MzPJ\000\000Vr\020X\024\196\017D\007~\001N\000\000\014b\024\196U2\n\224\000b\000\000U2\004\018\005\n\000\000\000\000nr\000\000\000\000\014\192\024\196n\240PJ\000\000\020XU2\014 U2W~PJ\000\000\0154\000\000\000\000PJ\000\000\000\000X\184\000\000q\246\1338\019\170\002\142\014^\0178\016\238\024\196q\246\1338\000\000\000\000\019\170\002\142\014^\017F\016\224O\030Mh`\202\017fO\030h\206\020\184\017hO\030`\202\017lO\030o\144p\016\000\000\129\214\000\000\000\000q\246\1356\019\170\002\142\014^\017l\016\250O\030q\246\1356\000\000\000\000\000\000f\166\000\000\000\000\000\000\000\000\000\000\000\000\000\000P\012\000\000\133\202\020XDp\017vw@\000\000\128\252\133\202\000\000\000\000\135\130\020XDp\017~\017\012_ \135\250\003\130\017\196\000\000\000\000p\142r\144\020X\000\000\127\018\021\204\000\000\000\000\128\252\135\130\000\000\000\000\000\000y\128D\228F\134\003\130\017\220\000\000\000\000\000\000r\144\020X\000\000\003\130\017\226\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015XB\138\019\170\002\142\014^\017\180s\000\023\204\020XG\030[:\020(\001N\003\130\017\182\nt\000\000\000\000\017d\000\000\000\000e0\000\000\n\254\014\222\000\000\015*\000\000\017\186\017NU2dn\017\210\n\158\000\000\000\000\017\132\000\000\000\000\020F\0032\015\020\000\000\017\222s\130\138\022\001\154\017\150U2\015\024\000\000\000\000\017\168\000\000\000\000\000\000e0\000\000\0070\015j\000\000\015\214\000\000\018\n\017\148p\158\000\000\018\014t\004\138,\001\154\017\174U2\015j\000\000\000\000\017\196\000\000\000\000\000\000\020X\000\000e0\000\000\020z\020X\023\204\023\204u\242Ff\020X\129FX\234\021\162\000\000\012\020\001N\000\000\015\004\023\204U2\012~\006&\000\000\020XX\234s\000\023\204\015\142\023\204\000\000D\142Et\000\000b\146\000\000\000\000c.\000\000\000\000c\202\000\000\015\184\023\204df\129FX\234\021\162\000\000\000\"\000\000\000\000O\030\015\242\000\000\000\000a\198\018\"\000\000e0\000\000\023\204a\198e0\000\000\020XU2e0\000\000\015\136\000\000\000\000e0\000\000\000\000[:\000\000\130\nO\030\017\212\023\204\130\166s\000\000\000q\246\133\216\019\170\002\142\014^\0180s\000q\246\133\216\000\000\000\000\000\000\136BQ\240\000\000\000\000\000\000\000\000\000\000\000\000\132`q\246\000\000\133\202\000\000\000\000\000\000\000\000q\246\136B\000\000\018p\000\000\000\000\132`\018t\000\000q\246\136B\000\000\000\000\016,\000\000\000\000it\0032\000\000\000\000B\158\000\000U2\rz\000\000[:\016\198\000\000\000\000\000\000\015\184\000\000\000\000\000\000RZ\020X\028\254\007\170\000\000N\150\000\000\007p\000\000\000*\000\000\000\000\018\138\000\000\018\178z\006\000\000@\214\018\138\000\000\000\000\018~\026R\028B\021\204vz\023\228\020X\000\000q\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000v\130\023\228\020X\000\000\n\003B\nJ\t=\001\206\t=\023\238\003F\000\238\002\254\025\150\t=\t=\003\214\003\218\t=\003\222\0032\003\234\003\242\007\030\007Z\t=\t=\002\178\001\206\007:\003:\t=\t=\t=\bz\b~\b\138\b\158\001*\005v\t=\t=\t=\t=\t=\t=\t=\t=\t=\t\018\000\238\t=\015\198\t=\t=\003\145\t\030\t6\t\130\005\130\005\134\t=\t=\t=\r\234\t=\t=\t=\t=\002j\002\154\014\026\t=\006\250\t=\t=\0035\t=\t=\t=\t=\t=\t=\005\138\b\146\t=\t=\t=\b\170\004r\t\150\0035\t=\t=\t=\t=\r\r\r\r\023\242\011&\004\154\r\r\0112\r\r\r\r\001j\r\r\r\r\r\r\r\r\004M\r\r\r\r\001f\r\r\r\r\r\r\003i\r\r\r\r\r\r\r\r\004M\r\r\016&\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\b\030\007f\006\226\r\r\004\226\r\r\r\r\r\r\r\r\r\r\004M\r\r\r\r\004M\r\r\003\238\r\r\r\r\r\r\000\238\b\"\r\r\r\r\r\r\r\r\r\r\r\r\r\r\000\238\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\004M\r\r\r\r\007\226\r\r\r\r\001r\004M\001\218\004M\r\r\r\r\r\r\r\r\r\r\004M\r\r\r\r\r\r\r\r\r\r\000\238\r\r\r\r\006\001\r\r\r\r\000\238\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\r\b\130\004M\r\r\r\r\r\r\r\r\001\181\001\181\001\181\001\222\015\134\001\181\006\018\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\0152\001\181\006\230\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\003\134\003\138\001\181\019B\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\007>\001\181\001\181\001\181\006\001\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\019J\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\130\001\181\001\181\018\214\bZ\007f\b1\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\014\246\b\194\001\181\005\186\001\181\001\181\b^\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\181\001\182\001\181\001\181\001\181\001\181\001\181\nu\nu\002\225\007\226\r1\nu\003\149\nu\nu\001\146\nu\nu\nu\nu\001\186\nu\nu\r1\nu\nu\nu\000\238\nu\nu\nu\nu\001\198\nu\000\n\nu\nu\nu\nu\nu\nu\nu\nu\025*\007f\003\146\nu\004M\nu\nu\nu\nu\nu\000\238\nu\nu\004B\nu\001\234\nu\nu\nu\002\225\025.\nu\nu\nu\nu\nu\nu\nu\004M\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\003\149\nu\nu\007\226\nu\nu\004M\004M\007f\004M\nu\nu\nu\nu\nu\004\t\nu\nu\nu\nu\t\174\000\238\t\222\nu\004^\nu\nu\b*\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\nu\015\206\nu\nu\nu\nu\nu\003\173\003\173\005\225\007\226\003\150\003\173\002N\003\173\003\173\000\238\003\173\003\173\003\173\003\173\000\238\003\173\003\173\006\153\003\173\003\173\003\173\000\238\003\173\003\173\003\173\003\173\002R\003\173\b>\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\006\153\007f\004\t\003\173\000\238\003\173\003\173\003\173\003\173\003\173\b\213\003\173\003\173\001\206\003\173\t\025\003\173\003\173\003\173\bv\b\242\003\173\003\173\003\173\003\173\003\173\003\173\003\173\006^\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\b\233\t\166\t\214\007\226\003\173\003\173\004\210\003^\006b\000\238\003\173\003\173\003\173\003\173\003\173\002v\003\173\003\173\003\173\003\173\t\174\000\238\t\222\003\173\b\130\003\173\003\173\003b\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\003\173\000\238\003\173\003\173\003\173\003\173\003\173\003\161\003\161\000\238\001f\003i\003\161\b\213\003\161\003\161\t\025\003\161\003\161\003\161\003\161\001\238\003\161\003\161\006\165\003\161\003\161\003\161\b2\003\161\003\161\003\161\003\161\007:\003\161\b>\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\006\165\b\233\004M\003\161\000\238\003\161\003\161\003\161\003\161\003\161\b\209\003\161\003\161\001\206\003\161\004\214\003\161\003\161\003\161\015^\004M\003\161\003\161\003\161\003\161\003\161\003\161\003\161\004M\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\000\238\t\166\t\214\001f\003\161\003\161\003i\003j\tF\000\238\003\161\003\161\003\161\003\161\003\161\002\214\003\161\003\161\003\161\003\161\t\174\012\209\t\222\003\161\004B\003\161\003\161\003n\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\003\161\012\209\003\161\003\161\003\161\003\161\003\161\t\229\t\229\t\021\tJ\tf\t\229\b\209\t\229\t\229\000\238\t\229\t\229\t\229\t\229\003\018\t\229\t\229\006\166\t\229\t\229\t\229\015*\t\229\t\229\t\229\t\229\004M\t\229\007\194\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\006\253\007f\006\170\t\229\027\215\t\229\t\229\t\229\t\229\t\229\003\158\t\229\t\229\002\190\t\229\012\178\t\229\t\229\t\229\006\253\016\162\t\229\t\229\t\229\t\229\t\229\t\229\t\229\000\238\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\002f\t\229\t\229\007\226\t\229\t\229\t\021\002&\007f\004M\t\229\t\229\t\229\t\229\t\229\003\n\t\229\t\229\t\229\t\229\t\229\000\238\t\229\t\229\003\162\t\229\t\229\016\190\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\t\229\006\253\004M\t\229\t\229\t\229\t\229\t\245\t\245\004\242\007\226\b\134\t\245\0126\t\245\t\245\000\238\t\245\t\245\t\245\t\245\004\014\t\245\t\245\000\238\t\245\t\245\t\245\000\238\t\245\t\245\t\245\t\245\t\005\t\245\012:\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\004\018\002j\007\154\t\245\007v\t\245\t\245\t\245\t\245\t\245\t\014\t\245\t\245\003\022\t\245\012\202\t\245\t\245\t\245\022\206\007~\t\245\t\245\t\245\t\245\t\245\t\245\t\245\000\238\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\026\154\t\245\t\245\022\214\t\245\t\245\004M\004M\007f\t\005\t\245\t\245\t\245\t\245\t\245\003\026\t\245\t\245\t\245\t\245\t\245\004M\t\245\t\245\b)\t\245\t\245\025\138\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\t\245\000\238\t\005\t\245\t\245\t\245\t\245\t\237\t\237\019\022\007\226\b>\t\237\005R\t\237\t\237\025z\t\237\t\237\t\237\t\237\000\238\t\237\t\237\000\238\t\237\t\237\t\237\000\238\t\237\t\237\t\237\t\237\005F\t\237\000\238\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\b>\026\158\019\030\t\237\004V\t\237\t\237\t\237\t\237\t\237\005\233\t\237\t\237\000\238\t\237\012\226\t\237\t\237\t\237\r\178\005&\t\237\t\237\t\237\t\237\t\237\t\237\t\237\b\230\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\004\174\t\237\t\237\011z\t\237\t\237\019\134\004V\007f\005J\t\237\t\237\t\237\t\237\t\237\003\022\t\237\t\237\t\237\t\237\t\237\025~\t\237\t\237\004r\t\237\t\237\027.\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\t\237\012\213\004\214\t\237\t\237\t\237\t\237\t\217\t\217\004b\007\226\007:\t\217\007\021\t\217\t\217\017\190\t\217\t\217\t\217\t\217\012\213\t\217\t\217\r\182\t\217\t\217\t\217\000\238\t\217\t\217\t\217\t\217\t\001\t\217\014\142\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\006v\006\242\007\n\t\217\002\006\t\217\t\217\t\217\t\217\t\217\015v\t\217\t\217\007j\t\217\012\250\t\217\t\217\t\217\007\018\016r\t\217\t\217\t\217\t\217\t\217\t\217\t\217\015~\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\007\026\t\217\t\217\005\002\t\217\t\217\001\222\007\166\001\002\001\190\t\217\t\217\t\217\t\217\t\217\019\006\t\217\t\217\t\217\t\217\t\217\006e\t\217\t\217\003\137\t\217\t\217\0022\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\t\217\006e\015\206\t\217\t\217\t\217\t\217\t\225\t\225\015\242\005\225\007:\t\225\003}\t\225\t\225\000\238\t\225\t\225\t\225\t\225\007\198\t\225\t\225\014\146\t\225\t\225\t\225\005.\t\225\t\225\t\225\t\225\001v\t\225\011\134\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\011\246\002\190\007\170\t\225\007\178\t\225\t\225\t\225\t\225\t\225\018~\t\225\t\225\000\238\t\225\r\014\t\225\t\225\t\225\001\222\007\218\t\225\t\225\t\225\t\225\t\225\t\225\t\225\018\138\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\001\206\t\225\t\225\011\150\t\225\t\225\n\022\t\234\001\002\001\190\t\225\t\225\t\225\t\225\t\225\002\142\t\225\t\225\t\225\t\225\t\225\006m\t\225\t\225\011\142\t\225\t\225\t\238\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\t\225\006m\026\018\t\225\t\225\t\225\t\225\t\221\t\221\003\134\003\138\n\250\t\221\012z\t\221\t\221\000\238\t\221\t\221\t\221\t\221\006\030\t\221\t\221\017\006\t\221\t\221\t\221\012^\t\221\t\221\t\221\t\221\001\134\t\221\012~\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\0056\014\178\011\186\t\221\012b\t\221\t\221\t\221\t\221\t\221\022B\t\221\t\221\019\158\t\221\r\"\t\221\t\221\t\221\015\182\012\170\t\221\t\221\t\221\t\221\t\221\t\221\t\221\022\"\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\012\174\t\221\t\221\011&\t\221\t\221\0112\022J\0066\022j\t\221\t\221\t\221\t\221\t\221\005\225\t\221\t\221\t\221\t\221\t\221\006u\t\221\t\221\011&\t\221\t\221\0112\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\t\221\006u\014\182\t\221\t\221\t\221\t\221\t\233\t\233\003\134\0182\006\138\t\233\004\214\t\233\t\233\019\166\t\233\t\233\t\233\t\233\001\206\t\233\t\233\018F\t\233\t\233\t\233\006\246\t\233\t\233\t\233\t\233\001\150\t\233\012\194\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\005>\007\006\012R\t\233\003\018\t\233\t\233\t\233\t\233\t\233\004B\t\233\t\233\012\198\t\233\r>\t\233\t\233\t\233\002\154\012F\t\233\t\233\t\233\t\233\t\233\t\233\t\233\004M\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\b\237\t\233\t\233\012J\t\233\t\233\002\142\t\234\007\198\026\130\t\233\t\233\t\233\t\233\t\233\027\247\t\233\t\233\t\233\t\233\t\233\004R\t\233\t\233\014^\t\233\t\233\012\246\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\t\233\000\238\000\238\t\233\t\233\t\233\t\233\t\249\t\249\027\146\001\222\0126\t\249\004\214\t\249\t\249\023z\t\249\t\249\t\249\t\249\012\138\t\249\t\249\015:\t\249\t\249\t\249\014f\t\249\t\249\t\249\t\249\r\n\t\249\011\134\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\012\142\b\237\r.\t\249\003\018\t\249\t\249\t\249\t\249\t\249\0062\t\249\t\249\023b\t\249\rR\t\249\t\249\t\249\007F\012\218\t\249\t\249\t\249\t\249\t\249\t\249\t\249\tb\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\002\190\t\249\t\249\012\222\t\249\t\249\tz\012^\003\022\015\014\t\249\t\249\t\249\t\249\t\249\019\166\t\249\t\249\t\249\t\249\t\249\015>\t\249\t\249\015\226\t\249\t\249\r:\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\t\249\001\002\001\190\t\249\t\249\t\249\t\249\t\241\t\241\001\002\001\190\012z\t\241\012\194\t\241\t\241\025B\t\241\t\241\t\241\t\241\012F\t\241\t\241\014\162\t\241\t\241\t\241\012\170\t\241\t\241\t\241\t\241\rN\t\241\r\158\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\r\030\019\"\014\166\t\241\r\146\t\241\t\241\t\241\t\241\t\241\000\238\t\241\t\241\000\238\t\241\rf\t\241\t\241\t\241\015\018\012\138\t\241\t\241\t\241\t\241\t\241\t\241\t\241\014z\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\017\138\t\241\t\241\rb\t\241\t\241\005\237\019\026\014~\t\194\t\241\t\241\t\241\t\241\t\241\005\241\t\241\t\241\t\241\t\241\t\241\011\134\t\241\t\241\t\202\t\241\t\241\012\218\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\t\241\014\234\018:\t\241\t\241\t\241\t\241\na\na\001\206\r\170\015F\na\t\218\na\na\000\238\na\na\na\na\015\026\na\na\014\238\na\na\na\011\018\na\na\na\na\015J\na\002\253\na\na\na\na\na\na\na\na\015\030\019N\019\230\na\018\222\na\na\na\na\na\019b\na\na\004B\na\rr\na\na\na\019F\019\146\na\na\na\na\na\na\na\026~\na\na\na\na\na\na\na\na\na\na\na\b9\na\na\007\246\na\na\b5\022F\022N\019\250\na\na\na\na\na\r9\na\na\na\na\na\022\138\na\na\027\142\na\na\019\202\na\na\na\na\na\na\na\na\na\na\na\na\na\011J\b)\na\na\na\na\003\157\003\157\b\005\007\246\024:\003\157\005\229\003\157\003\157\000\238\003\157\003\157\003\157\003\157\023n\003\157\003\157\022\210\003\157\003\157\003\157\026F\003\157\003\157\003\157\003\157\026\142\003\157\025^\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\007\246\rE\022\170\003\157\000\238\003\157\003\157\003\157\003\157\003\157\022\218\003\157\003\157\000\238\003\157\011r\003\157\003\157\003\157\019\254\023\250\003\157\003\157\003\157\003\157\003\157\003\157\003\157\011\162\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\023\254\t\166\t\214\023\n\003\157\003\157\023\150\004\225\r\194\025\026\003\157\003\157\003\157\003\157\003\157\b-\003\157\003\157\003\157\003\157\t\174\024>\t\222\003\157\r\202\003\157\003\157\023\206\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\003\157\r\222\003\157\003\157\003\157\003\157\003\157\001\237\001\237\014\014\007\246\n\250\001\237\014:\002\190\001\237\015\146\002\130\001\237\t\190\001\237\015\186\002\246\001\237\025b\001\237\001\237\001\237\003\254\001\237\001\237\001\237\001\210\015\214\t\198\015\218\002\250\001\237\001\237\001\237\001\237\001\237\t\206\001\237\016\002\001\206\025N\002\254\016\022\001\237\001\237\001\237\001\237\001\237\027\"\0032\001\190\004e\001\237\016.\001\237\001\237\002\178\025\030\016B\003:\001\237\001\237\001\237\bz\b~\b\138\016n\012\150\005v\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\001\237\028\007\t\166\t\214\026\246\001\237\001\237\007\246\016\130\017\130\017\142\005\130\005\134\001\237\001\237\001\237\002\226\001\237\001\237\001\237\001\237\012\158\006\134\012\234\001\237\018N\001\237\001\237\018f\001\237\001\237\001\237\001\237\001\237\001\237\005\138\b\146\001\237\001\237\001\237\b\170\004r\018\238\018\242\001\237\001\237\001\237\001\237\nI\nI\019*\019.\019V\nI\019Z\002\190\nI\025R\002\130\nI\nI\nI\019\130\002\246\nI\027&\nI\nI\nI\020.\nI\nI\nI\001\210\0202\nI\020V\002\250\nI\nI\nI\nI\nI\nI\nI\020Z\020j\020z\002\254\020\134\nI\nI\nI\nI\nI\020\186\0032\001\190\020\190\nI\021\014\nI\nI\002\178\0216\021:\003:\nI\nI\nI\bz\b~\b\138\021J\nI\005v\nI\nI\nI\nI\nI\nI\nI\nI\nI\021\154\nI\nI\021\186\nI\nI\021\250\022\030\022.\022V\005\130\005\134\nI\nI\nI\022Z\nI\nI\nI\nI\nI\022f\nI\nI\022v\nI\nI\022\146\nI\nI\nI\nI\nI\nI\005\138\b\146\nI\nI\nI\b\170\004r\022\162\022\182\nI\nI\nI\nI\nE\nE\022\226\022\230\022\242\nE\023\002\002\190\nE\023\022\002\130\nE\nE\nE\024\n\002\246\nE\024b\nE\nE\nE\024\138\nE\nE\nE\001\210\024\242\nE\025\002\002\250\nE\nE\nE\nE\nE\nE\nE\025\158\025\166\025\182\002\254\025\194\nE\nE\nE\nE\nE\026&\0032\001\190\026:\nE\026j\nE\nE\002\178\026r\026\174\003:\nE\nE\nE\bz\b~\b\138\026\214\nE\005v\nE\nE\nE\nE\nE\nE\nE\nE\nE\027\014\nE\nE\027>\nE\nE\027J\027R\027[\027k\005\130\005\134\nE\nE\nE\027~\nE\nE\nE\nE\nE\027\154\nE\nE\027\183\nE\nE\027\199\nE\nE\nE\nE\nE\nE\005\138\b\146\nE\nE\nE\b\170\004r\027\227\028\023\nE\nE\nE\nE\0029\0029\0283\028>\028s\0029\028\135\002\190\0029\028\143\002\130\0029\t\190\0029\028\203\002\246\0029\028\211\0029\0029\0029\000\000\0029\0029\0029\001\210\002\225\t\198\000\000\002\250\0029\0029\0029\0029\0029\t\206\0029\000\000\000\000\000\000\002\254\004M\0029\0029\0029\0029\0029\000\000\0032\001\190\000\000\0029\000\n\0029\0029\002\178\000\000\000\000\003:\0029\0029\0029\bz\b~\b\138\000\000\012\150\005v\0029\0029\0029\0029\0029\0029\0029\0029\0029\000\000\004\185\0029\002\225\0029\0029\004M\006\202\002\190\004M\005\130\005\134\0029\0029\0029\000\000\0029\0029\0029\0029\000\000\000\238\004M\0029\004\185\0029\0029\004M\0029\0029\0029\0029\0029\0029\005\138\b\146\0029\0029\0029\b\170\004r\000\000\004M\0029\0029\0029\0029\004M\007f\004M\003\n\004M\004M\004M\004M\004M\004M\004M\017\230\004M\000\238\004M\004M\000\000\004M\004M\004M\016\178\004M\004M\004M\004M\004M\004M\004M\004M\004M\000\000\004M\004M\000\000\000\000\004M\004M\000\238\004M\004M\004M\004M\004M\007\226\004M\004M\004M\004M\004M\004M\004M\004M\000\238\004M\004M\004M\004M\004M\004M\004M\004M\000\238\004M\004M\004M\004M\004M\004M\004M\004M\b\209\004N\004M\000\000\000\000\004M\004M\004M\000\238\004M\000\n\000\000\004M\004M\004M\004M\004M\004M\004M\004M\004M\000\000\022\018\004M\004M\002\225\002\225\007\238\004M\004B\006\249\000\000\004M\004M\000\000\007\246\016\182\022\130\002\225\000\238\004M\004M\004M\007\250\000\000\004M\004M\004M\004M\006\249\000\161\004M\000\161\006\249\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\000\161\0236\000\161\000\161\000\000\000\161\000\161\000\000\000\000\000\161\000\161\000\000\000\161\000\161\000\161\000\161\000\000\000\161\004R\000\161\000\161\b\209\000\000\000\161\000\161\005\153\000\161\000\161\000\161\000\238\000\161\t\005\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\b\234\000\161\000\161\000\000\000\000\000\161\000\161\002\006\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\002\n\006\249\000\161\015\174\t1\000\161\002\130\000\161\001\210\000\161\005\153\002\190\000\000\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\161\000\000\000\000\000\000\000\161\003\154\0186\t1\005\153\000\222\000\000\007J\001\222\000\161\000\000\002\226\000\000\014\194\002\178\000\161\000\161\000\161\000\161\000\000\015\178\000\161\000\161\000\161\000\161\002)\002)\004e\000\000\003\n\002)\000\000\002\190\002)\015\190\002\130\002)\001b\002)\000\000\002\246\002)\007N\002)\002)\002)\000\000\002)\002)\002)\001\210\001z\000\000\001\138\002\250\002)\002)\002)\002)\002)\005\134\002)\000\000\000\000\000\000\002\254\b\189\002)\002)\002)\002)\002)\004e\0032\b\142\000\000\002)\000\000\002)\002)\002\178\000\000\006\146\003:\002)\002)\002)\bz\b~\b\138\t\166\t\214\005v\002)\002)\002)\002)\002)\002)\002)\002)\002)\006\150\t\166\t\214\b\189\002)\002)\000\000\t\174\000\000\t\222\005\130\005\134\002)\002)\002)\000\000\002)\002)\002)\002)\t\174\000\000\t\222\002)\b\189\002)\002)\000\000\002)\002)\002)\002)\002)\002)\005\138\b\146\002)\002)\002)\b\170\004r\000\238\002\225\002)\002)\002)\002)\002E\002E\002\225\002\225\000\000\002E\000\000\000\000\002E\000\000\b\189\002E\000\000\002E\004\254\000\000\002E\b\189\002E\002E\002E\000\n\002E\002E\002E\000\000\028#\000\000\000\000\000\n\002E\002E\002E\002E\002E\000\000\002E\002\225\006F\004\181\000\000\005\234\002E\002E\002E\002E\002E\000\000\006f\002\225\000\000\002E\006r\002E\002E\000\000\000\000\002\225\006\198\002E\002E\002E\004\181\000\000\006\229\t-\000\000\000\000\002E\002E\002E\002E\002E\002E\002E\002E\002E\000\000\t\166\t\214\000\000\002E\002E\006\206\014\218\000\000\002\190\006\229\t-\002E\002E\002E\000\000\002E\002E\002E\002E\t\174\002\190\t\222\002E\002\130\002E\002E\001\210\002E\002E\002E\002E\002E\002E\b\185\000\000\002E\002E\002E\000\000\022\002\000\000\000\000\002E\002E\002E\002E\002A\002A\000\000\023>\003\n\002A\023B\003\022\002A\000\000\002\178\002A\000\000\002A\000\000\017\178\002A\023r\002A\002A\002A\t\178\002A\002A\002A\012V\b\185\000\000\000\000\015\190\002A\002A\002A\002A\002A\r\150\002A\r\162\000\000\012r\023\130\012\130\002A\002A\002A\002A\002A\b\185\b\198\001\190\001*\002A\000\000\002A\002A\005\134\002\225\002\225\014\130\002A\002A\002A\014\150\014\170\014\186\000\000\000\000\000\000\002A\002A\002A\002A\002A\002A\002A\002A\002A\000\000\t\166\t\214\b\185\002A\002A\000\n\004\254\000\000\001\206\b\185\000\000\002A\002A\002A\000\000\002A\002A\002A\002A\t\174\000\000\t\222\002A\000\000\002A\002A\001\210\002A\002A\002A\002A\002A\002A\002\225\000\000\002A\002A\002A\000\000\018\246\000\000\000\000\002A\002A\002A\002A\002-\002-\000\000\000\000\002\154\002-\019~\003\022\002-\000\000\002\178\002-\000\000\002-\000\000\000\000\002-\019\150\002-\002-\002-\012\162\002-\002-\002-\002\225\002\225\016\222\000\000\000\000\002-\002-\002-\002-\002-\012\186\002-\012\210\000\000\000\000\002\225\r2\002-\002-\002-\002-\002-\000\000\b\198\014\250\000\000\002-\000\n\002-\002-\rF\000\000\rZ\014\130\002-\002-\002-\014\150\014\170\014\186\000\000\000\000\000\000\002-\002-\002-\002-\002-\002-\002-\002-\002-\000\000\t\166\t\214\002\225\002-\002-\000\000\000\000\000\000\000\000\000\238\000\000\002-\002-\002-\000\000\002-\002-\002-\002-\t\174\000\000\t\222\002-\000\000\002-\002-\000\000\002-\002-\002-\002-\002-\002-\000\000\000\000\002-\002-\002-\000\000\t\146\000\000\000\000\002-\002-\002-\002-\002=\002=\000\000\000\000\000\000\002=\012\149\006F\002=\000\000\005\234\002=\000\000\002=\000\000\000\000\002=\006f\002=\002=\002=\006r\002=\002=\002=\012\149\012\149\000\000\000\000\012\149\002=\002=\002=\002=\002=\000\000\002=\b)\000\000\000\000\b)\000\000\002=\002=\002=\002=\002=\000\000\000\000\000\000\000\000\002=\000\000\002=\002=\000\000\000\000\000\000\022\138\002=\002=\002=\000\000\000\000\000\000\000\000\000\000\000\238\002=\002=\002=\002=\002=\002=\002=\002=\002=\000\000\b)\002=\000\000\002=\002=\000\000\000\000\000\000\000\000\000\000\000\000\002=\002=\002=\b)\002=\002=\002=\002=\012\149\000\000\005\t\002=\000\000\002=\002=\002\225\t\246\002=\002=\002=\002=\002=\005\t\011>\002=\002=\002=\000\000\000\000\b)\000\000\002=\002=\002=\002=\t9\t9\000\000\000\000\000\000\t9\000\000\000\000\t9\000\n\000\000\t9\000\000\t9\000\000\000\000\n\"\005\t\t9\nF\t9\b)\t9\t9\t9\002\225\002\225\018\014\000\000\017N\nZ\nr\nz\nb\n\130\000\000\t9\002\225\002\225\000\000\002\225\000\000\t9\t9\n\138\n\146\t9\005\t\b\t\000\000\005\t\t9\000\n\n\154\t9\000\000\000\000\000\000\000\000\t9\t9\000\238\000\000\000\000\000\000\000\000\000\000\002\246\t9\t9\n*\nj\n\162\n\170\n\186\t9\t9\002\166\012\217\t9\002\225\t9\n\194\000\000\003Z\000\000\000\000\000\238\000\000\t9\t9\n\202\000\000\t9\t9\t9\t9\003f\012\217\000\000\t9\000\000\t9\t9\002B\n\234\t9\n\242\n\178\t9\t9\000\000\000\000\t9\n\210\t9\000\000\002F\000\000\005v\t9\t9\n\218\n\226\002q\002q\000\000\000\000\000\000\002q\012\157\006F\002q\000\000\005\234\002q\000\000\002q\000\000\005\130\002q\006f\002q\002q\002q\006r\002q\002q\002q\012\157\012\157\000\000\000\000\012\157\002q\002q\002q\002q\002q\000\000\002q\015\174\000\000\005\138\002\130\000\000\002q\002q\002q\002q\002q\000\000\000\000\000\000\000\000\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\002q\002q\002q\000\000\000\000\000\000\000\000\000\000\000\238\002q\002q\n*\002q\002q\002q\002q\002q\002q\000\000\015\178\002q\000\000\002q\002q\000\000\000\000\000\000\000\000\000\000\000\000\002q\002q\002q\015\190\002q\002q\002q\002q\012\157\000\000\001\206\002q\000\000\002q\002q\000\000\002q\002q\002q\002q\002q\002q\026Z\000\000\002q\002q\002q\000\000\000\000\005\134\000\000\002q\002q\002q\002q\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002\190\002Y\000\000\000\000\002Y\000\000\002Y\003\170\000\000\002Y\002\154\002Y\002Y\002Y\025\202\002Y\002Y\002Y\001\210\000\000\000\000\000\000\000\000\002Y\002Y\002Y\002Y\002Y\000\000\002Y\015\174\000\000\000\000\002\130\000\000\002Y\002Y\002Y\002Y\002Y\004\154\003\202\000\000\004\229\002Y\000\000\002Y\002Y\002\178\000\000\000\000\000\000\002Y\002Y\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002Y\n*\002Y\002Y\002Y\002Y\002Y\002Y\000\000\015\178\002Y\000\000\002Y\002Y\0072\000\000\000\000\000\000\000\000\000\000\002Y\002Y\002Y\015\190\002Y\002Y\002Y\002Y\000\000\000\000\000\000\002Y\000\000\002Y\002Y\000\000\002Y\002Y\002Y\002Y\002Y\002Y\012\153\000\000\002Y\002Y\002Y\000\000\000\000\005\134\000\000\002Y\002Y\002Y\002Y\002e\002e\000\000\000\000\000\000\002e\012\153\012\153\002e\000\000\012\153\002e\000\000\002e\000\000\000\000\n\"\000\000\002e\002e\002e\021f\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\nb\002e\000\000\002e\000\000\000\000\000\000\000\000\000\000\002e\002e\002e\002e\002e\000\000\000\238\000\000\000\000\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\002e\002e\002e\000\000\000\000\000\000\000\000\000\000\000\000\002e\002e\n*\nj\002e\002e\002e\002e\002e\000\000\012\153\002e\000\000\002e\002e\000\000\000\000\000\000\000\000\000\238\b\029\002e\002e\002e\b\029\002e\002e\002e\002e\000\000\000\000\000\000\002e\000\000\002e\002e\000\000\002e\002e\002e\002e\002e\002e\000\000\000\000\002e\002e\002e\000\000\011\198\000\000\000\000\002e\002e\002e\002e\002u\002u\000\000\000\000\000\000\002u\b\029\011\206\002u\000\000\011\218\002u\000\000\002u\000\000\000\000\002u\011\230\002u\002u\002u\011\242\002u\002u\002u\000\000\000\000\b\029\000\000\000\000\002u\002u\002u\002u\002u\000\000\002u\000\000\000\000\000\000\000\000\000\000\002u\002u\002u\002u\002u\000\000\000\000\000\000\000\000\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\002u\002u\002u\000\000\000\000\004\254\000\000\000\000\000\000\002u\002u\n*\002u\002u\002u\002u\002u\002u\000\000\bJ\002u\000\000\002u\002u\000\000\000\000\000\000\000\000\000\238\b\025\002u\002u\002u\b\025\002u\002u\002u\002u\000\000\bN\000\000\002u\000\000\002u\002u\000\000\002u\002u\002u\002u\002u\002u\000\000\000\000\002u\002u\002u\000\000\007\181\000\000\000\000\002u\002u\002u\002u\002U\002U\b>\000\000\000\000\002U\b\025\007\181\002U\000\000\005\234\002U\000\000\002U\000\000\000\238\002U\007\181\002U\002U\002U\007\181\002U\002U\002U\000\000\000\000\b\025\000\000\000\000\002U\002U\002U\002U\002U\000\000\002U\000\000\000\000\007\r\000\000\000\000\002U\002U\002U\002U\002U\000\000\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\007\r\002U\002U\002U\007\r\bR\004\254\000\000\000\000\000\000\002U\002U\n*\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\000\000\002U\002U\000\000\000\000\000\000\000\000\007\209\000\000\002U\002U\002U\000\000\002U\002U\002U\002U\000\000\000\000\000\000\002U\000\000\002U\002U\000\000\002U\002U\002U\002U\002U\002U\000\000\000\000\002U\002U\002U\000\000\007\209\000\000\000\000\002U\002U\002U\002U\002a\002a\000\000\000\000\000\000\002a\005f\007\209\002a\000\000\005\234\002a\000\000\002a\000\000\000\000\n\"\007\209\002a\002a\002a\007\209\002a\002a\002a\000\000\000\000\000\000\000\000\000\000\002a\002a\002a\nb\002a\000\000\002a\000\000\000\000\006\253\000\000\000\000\002a\002a\002a\002a\002a\000\000\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\006\253\002a\002a\002a\006\253\000\000\000\000\000\000\000\000\000\000\002a\002a\n*\nj\002a\002a\002a\002a\002a\000\000\000\000\002a\000\000\002a\002a\000\000\000\000\000\000\000\000\000\238\000\000\002a\002a\002a\000\000\002a\002a\002a\002a\000\000\000\000\000\000\002a\000\000\002a\002a\000\000\002a\002a\002a\002a\002a\002a\000\000\000\000\002a\002a\002a\000\000\007\237\000\000\000\000\002a\002a\002a\002a\002]\002]\000\000\000\000\000\000\002]\b\134\006F\002]\000\000\005\234\002]\000\000\002]\000\000\000\000\n\"\007\237\002]\002]\002]\007\237\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\nb\002]\000\000\002]\000\000\000\000\000\000\000\000\000\000\002]\002]\002]\002]\002]\000\000\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\002]\002]\002]\000\000\000\000\000\000\000\000\000\000\000\000\002]\002]\n*\nj\002]\002]\002]\002]\002]\000\000\000\000\002]\000\000\002]\002]\000\000\000\000\000\000\000\000\007\229\000\000\002]\002]\002]\000\000\002]\002]\002]\002]\000\000\000\000\000\000\002]\000\000\002]\002]\000\000\002]\002]\002]\002]\002]\002]\000\000\000\000\002]\002]\002]\000\000\007\229\000\000\000\000\002]\002]\002]\002]\002\133\002\133\000\000\000\000\000\000\002\133\000\000\012\n\002\133\000\000\007\229\002\133\000\000\002\133\000\000\000\000\n\"\007\229\002\133\002\133\002\133\007\229\002\133\002\133\002\133\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n\138\n\146\002\133\000\000\000\000\000\000\000\000\002\133\000\000\n\154\002\133\000\000\000\000\000\000\000\000\002\133\002\133\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\133\002\133\n*\nj\n\162\n\170\n\186\002\133\002\133\000\000\000\000\002\133\000\000\002\133\n\194\000\000\000\000\000\000\000\000\000\238\000\000\002\133\002\133\n\202\000\000\002\133\002\133\002\133\002\133\000\000\000\000\000\000\002\133\000\000\002\133\002\133\000\000\002\133\002\133\002\133\n\178\002\133\002\133\000\000\000\000\002\133\n\210\002\133\000\000\007\177\000\000\000\000\002\133\002\133\n\218\n\226\002m\002m\000\000\000\000\000\000\002m\000\000\007\177\002m\000\000\005\234\002m\000\000\002m\000\000\000\000\n\"\007\177\002m\002m\002m\007\177\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\nb\002m\000\000\002m\000\000\000\000\000\000\000\000\000\000\002m\002m\002m\002m\002m\000\000\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\002m\002m\002m\000\000\000\000\000\000\000\000\000\000\000\000\002m\002m\n*\nj\002m\002m\002m\002m\002m\000\000\000\000\002m\000\000\002m\002m\000\000\000\000\000\000\000\000\000\238\000\000\002m\002m\002m\000\000\002m\002m\002m\002m\000\000\000\000\000\000\002m\000\000\002m\002m\000\000\002m\002m\002m\002m\002m\002m\000\000\000\000\002m\002m\002m\000\000\014R\000\000\000\000\002m\002m\002m\002m\002i\002i\000\000\000\000\000\000\002i\000\000\011\206\002i\000\000\011\218\002i\000\000\002i\000\000\000\000\n\"\011\230\002i\002i\002i\011\242\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\nb\002i\000\000\002i\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002i\000\000\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\n*\nj\002i\002i\002i\002i\002i\000\000\000\000\002i\000\000\002i\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002i\002i\000\000\002i\002i\002i\002i\000\000\000\000\000\000\002i\000\000\002i\002i\000\000\002i\002i\002i\002i\002i\002i\000\000\000\000\002i\002i\002i\000\000\000\000\000\000\000\000\002i\002i\002i\002i\002}\002}\000\000\000\000\000\000\002}\000\000\002\006\002}\000\000\002\130\002}\000\000\002}\000\000\000\000\n\"\000\000\002}\002}\002}\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002}\000\000\002}\000\000\000\000\000\000\000\000\000\000\002}\002}\n\138\n\146\002}\000\000\027v\001\222\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\002}\002}\000\238\015\190\000\000\000\000\000\000\000\000\000\000\002}\002}\n*\nj\n\162\n\170\002}\002}\002}\000\000\000\000\002}\000\000\002}\002}\000\000\000\000\000\000\000\000\000\000\005\134\002}\002}\002}\000\000\002}\002}\002}\002}\000\000\000\000\000\000\002}\000\000\002}\002}\000\000\002}\002}\002}\n\178\002}\002}\000\000\000\000\002}\002}\002}\000\000\000\000\000\000\000\000\002}\002}\002}\002}\002Q\002Q\000\000\000\000\000\000\002Q\000\000\003\022\002Q\000\000\000\000\002Q\000\000\002Q\000\000\000\000\n\"\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\nb\002Q\000\000\002Q\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002Q\000\000\005\190\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\003\246\002Q\002Q\002Q\006\154\000\000\004\002\000\000\000\000\000\000\002Q\002Q\n*\nj\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\000\000\002Q\002Q\000\000\000\000\000\000\000\000\000\000\000\000\002Q\002Q\002Q\000\000\002Q\002Q\002Q\002Q\000\000\000\000\000\000\002Q\000\000\002Q\002Q\000\000\002Q\002Q\002Q\002Q\002Q\002Q\000\000\000\000\002Q\002Q\002Q\000\000\000\000\000\000\000\000\002Q\002Q\002Q\002Q\002M\002M\000\000\000\000\000\000\002M\000\000\002\190\002M\000\000\000\000\002M\000\000\002M\000\000\000\000\n\"\000\000\002M\002M\002M\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002M\000\000\002M\000\000\000\000\000\000\000\000\000\000\002M\002M\n\138\n\146\002M\000\000\t\226\003\n\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\002M\002M\000\238\012.\000\000\012>\000\000\000\000\000\000\002M\002M\n*\nj\n\162\n\170\002M\002M\002M\000\000\000\000\002M\000\000\002M\002M\000\000\000\000\000\000\000\000\000\000\000\000\002M\002M\002M\000\000\002M\002M\002M\002M\000\000\000\000\000\000\002M\000\000\002M\002M\000\000\002M\002M\002M\n\178\002M\002M\000\000\000\000\002M\002M\002M\000\000\000\000\000\000\000\000\002M\002M\002M\002M\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\190\002\169\000\000\000\000\002\169\000\000\002\169\000\000\000\000\n\"\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002\169\000\000\002\169\000\000\000\000\000\000\000\000\000\000\002\169\002\169\n\138\n\146\002\169\000\000\012\238\003\n\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\r\002\000\000\r\022\000\000\000\000\000\000\002\169\002\169\n*\nj\n\162\002\169\002\169\002\169\002\169\000\000\000\000\002\169\000\000\002\169\002\169\000\000\000\000\000\000\000\000\000\000\000\000\002\169\002\169\002\169\000\000\002\169\002\169\002\169\002\169\000\000\000\000\000\000\002\169\000\000\002\169\002\169\000\000\002\169\002\169\002\169\n\178\002\169\002\169\000\000\000\000\002\169\002\169\002\169\000\000\000\000\000\000\000\000\002\169\002\169\002\169\002\169\002I\002I\000\000\000\000\000\000\002I\000\000\000\000\002I\000\000\000\000\002I\000\000\002I\000\000\000\000\n\"\000\000\002I\002I\002I\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002I\000\000\002I\000\000\000\000\000\000\000\000\000\000\002I\002I\n\138\n\146\002I\000\000\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\002I\002I\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\n*\nj\n\162\n\170\002I\002I\002I\000\000\000\000\002I\000\000\002I\002I\000\000\000\000\000\000\000\000\000\000\000\000\002I\002I\002I\000\000\002I\002I\002I\002I\000\000\000\000\000\000\002I\000\000\002I\002I\000\000\002I\002I\002I\n\178\002I\002I\000\000\000\000\002I\002I\002I\000\000\000\000\000\000\000\000\002I\002I\002I\002I\002\129\002\129\000\000\000\000\000\000\002\129\000\000\000\000\002\129\000\000\000\000\002\129\000\000\002\129\000\000\000\000\n\"\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002\129\000\000\002\129\000\000\000\000\000\000\000\000\000\000\002\129\002\129\n\138\n\146\002\129\000\000\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\n*\nj\n\162\n\170\002\129\002\129\002\129\000\000\000\000\002\129\000\000\002\129\002\129\000\000\000\000\000\000\000\000\000\000\000\000\002\129\002\129\002\129\000\000\002\129\002\129\002\129\002\129\000\000\000\000\000\000\002\129\000\000\002\129\002\129\000\000\002\129\002\129\002\129\n\178\002\129\002\129\000\000\000\000\002\129\002\129\002\129\000\000\000\000\000\000\000\000\002\129\002\129\002\129\002\129\002y\002y\000\000\000\000\000\000\002y\000\000\000\000\002y\000\000\000\000\002y\000\000\002y\000\000\000\000\n\"\000\000\002y\002y\002y\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002y\000\000\002y\000\000\000\000\000\000\000\000\000\000\002y\002y\n\138\n\146\002y\000\000\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\002y\002y\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\n*\nj\n\162\n\170\002y\002y\002y\000\000\000\000\002y\000\000\002y\002y\000\000\000\000\000\000\000\000\000\000\000\000\002y\002y\002y\000\000\002y\002y\002y\002y\000\000\000\000\000\000\002y\000\000\002y\002y\000\000\002y\002y\002y\n\178\002y\002y\000\000\000\000\002y\002y\002y\000\000\000\000\000\000\000\000\002y\002y\002y\002y\002\137\002\137\000\000\000\000\000\000\002\137\000\000\000\000\002\137\000\000\000\000\002\137\000\000\002\137\000\000\000\000\n\"\000\000\002\137\002\137\002\137\000\000\002\137\002\137\002\137\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\137\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\138\n\146\002\137\000\000\000\000\000\000\000\000\002\137\000\000\n\154\002\137\000\000\000\000\000\000\000\000\002\137\002\137\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n*\nj\n\162\n\170\n\186\002\137\002\137\000\000\000\000\002\137\000\000\002\137\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\137\002\137\n\202\000\000\002\137\002\137\002\137\002\137\000\000\000\000\000\000\002\137\000\000\002\137\002\137\000\000\002\137\002\137\002\137\n\178\002\137\002\137\000\000\000\000\002\137\n\210\002\137\000\000\000\000\000\000\000\000\002\137\002\137\n\218\n\226\002\141\002\141\000\000\000\000\000\000\002\141\000\000\000\000\002\141\000\000\000\000\002\141\000\000\002\141\000\000\000\000\n\"\000\000\002\141\002\141\002\141\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002\141\000\000\002\141\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n\138\n\146\002\141\000\000\000\000\000\000\000\000\002\141\000\000\n\154\002\141\000\000\000\000\000\000\000\000\002\141\002\141\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n*\nj\n\162\n\170\n\186\002\141\002\141\000\000\000\000\002\141\000\000\002\141\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\141\002\141\n\202\000\000\002\141\002\141\002\141\002\141\000\000\000\000\000\000\002\141\000\000\002\141\002\141\000\000\002\141\002\141\002\141\n\178\002\141\002\141\000\000\000\000\002\141\002\141\002\141\000\000\000\000\000\000\000\000\002\141\002\141\n\218\n\226\002\145\002\145\000\000\000\000\000\000\002\145\000\000\000\000\002\145\000\000\000\000\002\145\000\000\002\145\000\000\000\000\n\"\000\000\002\145\002\145\002\145\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\002\145\000\000\002\145\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\138\n\146\002\145\000\000\000\000\000\000\000\000\002\145\000\000\n\154\002\145\000\000\000\000\000\000\000\000\002\145\002\145\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n*\nj\n\162\n\170\n\186\002\145\002\145\000\000\000\000\002\145\000\000\002\145\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\145\002\145\n\202\000\000\002\145\002\145\002\145\002\145\000\000\000\000\000\000\002\145\000\000\002\145\002\145\000\000\002\145\002\145\002\145\n\178\002\145\002\145\000\000\000\000\002\145\002\145\002\145\000\000\000\000\000\000\000\000\002\145\002\145\n\218\n\226\b\245\b\245\000\000\000\000\000\000\b\245\000\000\000\000\b\245\000\000\000\000\b\245\000\000\b\245\000\000\000\000\n\"\000\000\b\245\b\245\b\245\000\000\b\245\b\245\b\245\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\b\245\000\000\000\000\000\000\000\000\000\000\b\245\b\245\n\138\n\146\b\245\000\000\000\000\000\000\000\000\b\245\000\000\n\154\b\245\000\000\000\000\000\000\000\000\b\245\b\245\000\238\000\000\000\000\000\000\000\000\000\000\000\000\b\245\b\245\n*\nj\n\162\n\170\n\186\b\245\b\245\000\000\000\000\b\245\000\000\b\245\n\194\000\000\000\000\000\000\000\000\000\000\000\000\b\245\b\245\n\202\000\000\b\245\b\245\b\245\b\245\000\000\000\000\000\000\b\245\000\000\b\245\b\245\000\000\b\245\b\245\b\245\n\178\b\245\b\245\000\000\000\000\b\245\n\210\b\245\000\000\000\000\000\000\000\000\b\245\b\245\n\218\n\226\002\149\002\149\000\000\000\000\000\000\002\149\000\000\000\000\002\149\000\000\000\000\002\149\000\000\002\149\000\000\000\000\n\"\000\000\002\149\002\149\002\149\000\000\002\149\002\149\002\149\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\149\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\138\n\146\002\149\000\000\000\000\000\000\000\000\002\149\000\000\n\154\002\149\000\000\000\000\000\000\000\000\002\149\002\149\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n*\nj\n\162\n\170\n\186\002\149\002\149\000\000\000\000\002\149\000\000\002\149\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\149\002\149\n\202\000\000\002\149\002\149\002\149\002\149\000\000\000\000\000\000\002\149\000\000\002\149\002\149\000\000\n\234\002\149\n\242\n\178\002\149\002\149\000\000\000\000\002\149\n\210\002\149\000\000\000\000\000\000\000\000\002\149\002\149\n\218\n\226\b\241\b\241\000\000\000\000\000\000\b\241\000\000\000\000\b\241\000\000\000\000\b\241\000\000\b\241\000\000\000\000\n\"\000\000\b\241\b\241\b\241\000\000\b\241\b\241\b\241\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\b\241\000\000\000\000\000\000\000\000\000\000\b\241\b\241\n\138\n\146\b\241\000\000\000\000\000\000\000\000\b\241\000\000\n\154\b\241\000\000\000\000\000\000\000\000\b\241\b\241\000\238\000\000\000\000\000\000\000\000\000\000\000\000\b\241\b\241\n*\nj\n\162\n\170\n\186\b\241\b\241\000\000\000\000\b\241\000\000\b\241\n\194\000\000\000\000\000\000\000\000\000\000\000\000\b\241\b\241\n\202\000\000\b\241\b\241\b\241\b\241\000\000\000\000\000\000\b\241\000\000\b\241\b\241\000\000\b\241\b\241\b\241\n\178\b\241\b\241\000\000\000\000\b\241\n\210\b\241\000\000\000\000\000\000\000\000\b\241\b\241\n\218\n\226\002\193\002\193\000\000\000\000\000\000\002\193\000\000\000\000\002\193\000\000\000\000\002\193\000\000\002\193\000\000\000\000\n\"\000\000\002\193\002\193\002\193\000\000\002\193\002\193\002\193\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\193\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\138\n\146\002\193\000\000\000\000\000\000\000\000\002\193\000\000\n\154\002\193\000\000\000\000\000\000\000\000\002\193\002\193\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n*\nj\n\162\n\170\n\186\002\193\002\193\000\000\000\000\002\193\000\000\002\193\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\193\002\193\n\202\000\000\002\193\002\193\002\193\002\193\000\000\000\000\000\000\002\193\000\000\002\193\002\193\000\000\n\234\002\193\n\242\n\178\002\193\002\193\000\000\000\000\002\193\n\210\002\193\000\000\000\000\000\000\000\000\002\193\002\193\n\218\n\226\002\209\002\209\000\000\000\000\000\000\002\209\000\000\000\000\002\209\000\000\000\000\002\209\000\000\002\209\000\000\000\000\n\"\000\000\002\209\002\209\002\209\000\000\002\209\002\209\002\209\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\209\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\138\n\146\002\209\000\000\000\000\000\000\000\000\002\209\000\000\n\154\002\209\000\000\000\000\000\000\000\000\002\209\002\209\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n*\nj\n\162\n\170\n\186\002\209\002\209\000\000\000\000\002\209\000\000\002\209\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\209\002\209\n\202\000\000\002\209\002\209\002\209\002\209\000\000\000\000\000\000\002\209\000\000\002\209\002\209\000\000\n\234\002\209\n\242\n\178\002\209\002\209\000\000\000\000\002\209\n\210\002\209\000\000\000\000\000\000\000\000\002\209\002\209\n\218\n\226\002\201\002\201\000\000\000\000\000\000\002\201\000\000\000\000\002\201\000\000\000\000\002\201\000\000\002\201\000\000\000\000\n\"\000\000\002\201\002\201\002\201\000\000\002\201\002\201\002\201\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\201\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\138\n\146\002\201\000\000\000\000\000\000\000\000\002\201\000\000\n\154\002\201\000\000\000\000\000\000\000\000\002\201\002\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n*\nj\n\162\n\170\n\186\002\201\002\201\000\000\000\000\002\201\000\000\002\201\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\201\002\201\n\202\000\000\002\201\002\201\002\201\002\201\000\000\000\000\000\000\002\201\000\000\002\201\002\201\000\000\n\234\002\201\n\242\n\178\002\201\002\201\000\000\000\000\002\201\n\210\002\201\000\000\000\000\000\000\000\000\002\201\002\201\n\218\n\226\002\181\002\181\000\000\000\000\000\000\002\181\000\000\000\000\002\181\000\000\000\000\002\181\000\000\002\181\000\000\000\000\n\"\000\000\002\181\002\181\002\181\000\000\002\181\002\181\002\181\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\181\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n\138\n\146\002\181\000\000\000\000\000\000\000\000\002\181\000\000\n\154\002\181\000\000\000\000\000\000\000\000\002\181\002\181\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n*\nj\n\162\n\170\n\186\002\181\002\181\000\000\000\000\002\181\000\000\002\181\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\181\002\181\n\202\000\000\002\181\002\181\002\181\002\181\000\000\000\000\000\000\002\181\000\000\002\181\002\181\000\000\n\234\002\181\n\242\n\178\002\181\002\181\000\000\000\000\002\181\n\210\002\181\000\000\000\000\000\000\000\000\002\181\002\181\n\218\n\226\002\189\002\189\000\000\000\000\000\000\002\189\000\000\000\000\002\189\000\000\000\000\002\189\000\000\002\189\000\000\000\000\n\"\000\000\002\189\002\189\002\189\000\000\002\189\002\189\002\189\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\189\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\138\n\146\002\189\000\000\000\000\000\000\000\000\002\189\000\000\n\154\002\189\000\000\000\000\000\000\000\000\002\189\002\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n*\nj\n\162\n\170\n\186\002\189\002\189\000\000\000\000\002\189\000\000\002\189\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\189\002\189\n\202\000\000\002\189\002\189\002\189\002\189\000\000\000\000\000\000\002\189\000\000\002\189\002\189\000\000\n\234\002\189\n\242\n\178\002\189\002\189\000\000\000\000\002\189\n\210\002\189\000\000\000\000\000\000\000\000\002\189\002\189\n\218\n\226\002\185\002\185\000\000\000\000\000\000\002\185\000\000\000\000\002\185\000\000\000\000\002\185\000\000\002\185\000\000\000\000\n\"\000\000\002\185\002\185\002\185\000\000\002\185\002\185\002\185\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\185\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\138\n\146\002\185\000\000\000\000\000\000\000\000\002\185\000\000\n\154\002\185\000\000\000\000\000\000\000\000\002\185\002\185\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n*\nj\n\162\n\170\n\186\002\185\002\185\000\000\000\000\002\185\000\000\002\185\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\185\002\185\n\202\000\000\002\185\002\185\002\185\002\185\000\000\000\000\000\000\002\185\000\000\002\185\002\185\000\000\n\234\002\185\n\242\n\178\002\185\002\185\000\000\000\000\002\185\n\210\002\185\000\000\000\000\000\000\000\000\002\185\002\185\n\218\n\226\002\197\002\197\000\000\000\000\000\000\002\197\000\000\000\000\002\197\000\000\000\000\002\197\000\000\002\197\000\000\000\000\n\"\000\000\002\197\002\197\002\197\000\000\002\197\002\197\002\197\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\197\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\138\n\146\002\197\000\000\000\000\000\000\000\000\002\197\000\000\n\154\002\197\000\000\000\000\000\000\000\000\002\197\002\197\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n*\nj\n\162\n\170\n\186\002\197\002\197\000\000\000\000\002\197\000\000\002\197\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\197\002\197\n\202\000\000\002\197\002\197\002\197\002\197\000\000\000\000\000\000\002\197\000\000\002\197\002\197\000\000\n\234\002\197\n\242\n\178\002\197\002\197\000\000\000\000\002\197\n\210\002\197\000\000\000\000\000\000\000\000\002\197\002\197\n\218\n\226\002\213\002\213\000\000\000\000\000\000\002\213\000\000\000\000\002\213\000\000\000\000\002\213\000\000\002\213\000\000\000\000\n\"\000\000\002\213\002\213\002\213\000\000\002\213\002\213\002\213\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\213\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\138\n\146\002\213\000\000\000\000\000\000\000\000\002\213\000\000\n\154\002\213\000\000\000\000\000\000\000\000\002\213\002\213\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n*\nj\n\162\n\170\n\186\002\213\002\213\000\000\000\000\002\213\000\000\002\213\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\213\n\202\000\000\002\213\002\213\002\213\002\213\000\000\000\000\000\000\002\213\000\000\002\213\002\213\000\000\n\234\002\213\n\242\n\178\002\213\002\213\000\000\000\000\002\213\n\210\002\213\000\000\000\000\000\000\000\000\002\213\002\213\n\218\n\226\002\205\002\205\000\000\000\000\000\000\002\205\000\000\000\000\002\205\000\000\000\000\002\205\000\000\002\205\000\000\000\000\n\"\000\000\002\205\002\205\002\205\000\000\002\205\002\205\002\205\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\205\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\138\n\146\002\205\000\000\000\000\000\000\000\000\002\205\000\000\n\154\002\205\000\000\000\000\000\000\000\000\002\205\002\205\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n*\nj\n\162\n\170\n\186\002\205\002\205\000\000\000\000\002\205\000\000\002\205\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\205\002\205\n\202\000\000\002\205\002\205\002\205\002\205\000\000\000\000\000\000\002\205\000\000\002\205\002\205\000\000\n\234\002\205\n\242\n\178\002\205\002\205\000\000\000\000\002\205\n\210\002\205\000\000\000\000\000\000\000\000\002\205\002\205\n\218\n\226\002\177\002\177\000\000\000\000\000\000\002\177\000\000\000\000\002\177\000\000\000\000\002\177\000\000\002\177\000\000\000\000\n\"\000\000\002\177\002\177\002\177\000\000\002\177\002\177\002\177\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\177\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n\138\n\146\002\177\000\000\000\000\000\000\000\000\002\177\000\000\n\154\002\177\000\000\000\000\000\000\000\000\002\177\002\177\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n*\nj\n\162\n\170\n\186\002\177\002\177\000\000\000\000\002\177\000\000\002\177\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\177\002\177\n\202\000\000\002\177\002\177\002\177\002\177\000\000\000\000\000\000\002\177\000\000\002\177\002\177\000\000\n\234\002\177\n\242\n\178\002\177\002\177\000\000\000\000\002\177\n\210\002\177\000\000\000\000\000\000\000\000\002\177\002\177\n\218\n\226\002\001\002\001\000\000\000\000\000\000\002\001\000\000\000\000\002\001\000\000\000\000\002\001\000\000\002\001\000\000\000\000\002\001\000\000\002\001\002\001\002\001\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\002\001\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\000\000\000\000\000\000\000\000\002\001\000\000\002\001\002\001\000\000\000\000\000\000\000\000\002\001\002\001\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\002\001\000\000\000\000\002\001\000\000\002\001\002\001\000\000\000\000\000\000\000\000\000\000\000\000\002\001\002\001\002\001\000\000\002\001\002\001\002\001\002\001\000\000\000\000\000\000\002\001\000\000\002\001\002\001\000\000\002\001\002\001\002\001\002\001\002\001\002\001\000\000\000\000\002\001\002\001\014*\000\000\000\000\000\000\000\000\002\001\002\001\002\001\002\001\002\029\002\029\000\000\000\000\000\000\002\029\000\000\000\000\002\029\000\000\000\000\002\029\000\000\002\029\000\000\000\000\n\"\000\000\002\029\002\029\002\029\000\000\002\029\002\029\002\029\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\029\000\000\000\000\000\000\000\000\000\000\002\029\002\029\n\138\n\146\002\029\000\000\000\000\000\000\000\000\002\029\000\000\n\154\002\029\000\000\000\000\000\000\000\000\002\029\002\029\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\n*\nj\n\162\n\170\n\186\002\029\002\029\000\000\000\000\002\029\000\000\002\029\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\029\002\029\n\202\000\000\002\029\002\029\014B\002\029\000\000\000\000\000\000\002\029\000\000\002\029\002\029\000\000\n\234\002\029\n\242\n\178\002\029\002\029\000\000\000\000\002\029\n\210\002\029\000\000\000\000\000\000\000\000\002\029\002\029\n\218\n\226\002\025\002\025\000\000\000\000\000\000\002\025\000\000\000\000\002\025\000\000\000\000\002\025\000\000\002\025\000\000\000\000\n\"\000\000\002\025\002\025\002\025\000\000\002\025\002\025\002\025\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\025\000\000\000\000\000\000\000\000\000\000\002\025\002\025\n\138\n\146\002\025\000\000\000\000\000\000\000\000\002\025\000\000\n\154\002\025\000\000\000\000\000\000\000\000\002\025\002\025\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\n*\nj\n\162\n\170\n\186\002\025\002\025\000\000\000\000\002\025\000\000\002\025\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\025\002\025\n\202\000\000\002\025\002\025\002\025\002\025\000\000\000\000\000\000\002\025\000\000\002\025\002\025\000\000\n\234\002\025\n\242\n\178\002\025\002\025\000\000\000\000\002\025\n\210\002\025\000\000\000\000\000\000\000\000\002\025\002\025\n\218\n\226\002\173\002\173\000\000\000\000\000\000\002\173\000\000\000\000\002\173\000\000\000\000\002\173\000\000\002\173\000\000\000\000\n\"\000\000\002\173\002\173\002\173\000\000\002\173\002\173\002\173\000\000\000\000\000\000\000\000\000\000\nZ\nr\nz\nb\n\130\000\000\002\173\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n\138\n\146\002\173\000\000\000\000\000\000\000\000\002\173\000\000\n\154\002\173\000\000\000\000\000\000\000\000\002\173\002\173\000\238\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n*\nj\n\162\n\170\n\186\002\173\002\173\000\000\000\000\002\173\000\000\002\173\n\194\000\000\000\000\000\000\000\000\000\000\000\000\002\173\002\173\n\202\000\000\002\173\002\173\002\173\002\173\000\000\000\000\000\000\002\173\000\000\002\173\002\173\000\000\n\234\002\173\n\242\n\178\002\173\002\173\000\000\000\000\002\173\n\210\002\173\000\000\000\000\000\000\000\000\002\173\002\173\n\218\n\226\002\r\002\r\000\000\000\000\000\000\002\r\000\000\000\000\002\r\000\000\000\000\002\r\000\000\002\r\000\000\000\000\002\r\000\000\002\r\002\r\002\r\000\000\002\r\002\r\002\r\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\000\000\002\r\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\000\000\000\000\000\000\000\000\002\r\000\000\002\r\002\r\000\000\000\000\000\000\000\000\002\r\002\r\002\r\000\000\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\r\002\r\002\r\002\r\002\r\000\000\000\000\002\r\000\000\002\r\002\r\000\000\000\000\000\000\000\000\000\000\000\000\002\r\002\r\002\r\000\000\002\r\002\r\002\r\002\r\000\000\000\000\000\000\002\r\000\000\002\r\002\r\000\000\002\r\002\r\002\r\002\r\002\r\002\r\000\000\000\000\002\r\002\r\014*\000\000\000\000\000\000\000\000\002\r\002\r\002\r\002\r\002\017\002\017\000\000\000\000\000\000\002\017\000\000\000\000\002\017\000\000\000\000\002\017\000\000\002\017\000\000\000\000\002\017\000\000\002\017\002\017\002\017\000\000\002\017\002\017\002\017\000\000\000\000\006>\000\000\000\000\002\017\002\017\002\017\002\017\002\017\000\000\002\017\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\002\017\006B\000\000\000\000\000\000\002\017\000\000\002\017\002\017\000\000\000\000\000\000\000\000\002\017\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\002\017\002\017\002\017\002\017\002\017\000\000\000\000\002\017\000\000\002\017\002\017\000\000\000\000\000\000\000\000\000\000\000\238\002\017\002\017\002\017\000\000\002\017\002\017\002\017\002\017\000\000\000\000\000\000\002\017\000\000\002\017\002\017\000\000\002\017\002\017\002\017\002\017\002\017\002\017\000\000\000\000\002\017\002\017\014*\000\000\000\000\000\000\000\000\002\017\002\017\002\017\002\017\001\006\000\000\000\006\000\000\007\029\000\000\002\186\002\190\006F\002\234\002\130\005\234\006R\000\000\000\000\002\246\001\n\000\000\006f\000\000\002\142\000\000\006r\007\029\000\000\001\210\003\206\007\029\002\190\0036\001\018\b\206\b\210\001\030\001\"\003\170\000\000\000\000\003F\000\000\002\254\bB\025j\000\000\b\246\b\250\001\210\003\222\0032\003\234\b\254\007\030\000\000\001:\000\000\002\178\000\000\000\000\003:\000\000\000\000\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\003\202\001>\001B\001F\001J\001N\000\000\002\178\t\018\001R\000\000\007\017\000\000\001V\000\000\t\030\t6\t\130\005\130\005\134\000\000\000\000\001Z\000\000\000\000\000\000\007\029\000\000\001^\002\225\007\017\000\000\000\000\018\202\007\017\0072\000\000\000\000\001\154\0062\000\000\011&\005\138\b\146\0112\001\158\000\000\014r\004r\t\150\001\006\001\166\000\006\001\170\001\174\0256\002\186\002\190\000\n\002\234\002\130\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\b\202\000\000\000\238\000\000\002\225\001\210\000\000\000\000\000\000\0036\001\018\b\206\b\210\001\030\001\"\000\000\002\225\002\225\003F\000\000\002\254\000\000\b\214\000\000\b\246\b\250\000\238\003\222\0032\003\234\b\254\007\030\000\000\001:\000\000\002\178\006\245\000\000\003:\000\000\000\000\000\000\bz\b~\b\138\b\158\006F\005v\000\000\005\234\001>\001B\001F\001J\001N\006\245\006f\t\018\001R\006\245\006r\000\000\001V\000\000\t\030\t6\t\130\005\130\005\134\000\000\006F\001Z\000\000\005\234\025:\000\000\000\000\001^\000\000\000\000\006f\000\000\000\000\000\000\006r\000\000\000\000\001\154\006\134\000\000\000\000\005\138\b\146\012\205\001\158\000\000\014r\004r\t\150\004y\001\166\000\006\001\170\001\174\000\246\002\186\002\190\002\194\002\234\002\130\000\000\000\000\000\000\012\205\002\246\000\000\002\030\003\178\000\000\002\"\000\000\004y\000\000\003\182\001\210\000\000\017F\006\245\002\250\000\000\003>\003B\002.\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\218\000\000\003\214\003\218\004\026\003\222\0032\003\234\003\242\007\030\000\000\000\000\017>\002\178\000\000\000\000\003:\017V\002:\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\000\000\t\018\000\000\t!\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017r\017\158\000\000\000\000\004y\004y\000\000\000\000\000\000\006\178\004\005\000\000\t!\000\000\000\000\002>\012\205\012\185\000\000\000\000\017\218\021\230\005\138\b\146\025V\000\173\000\000\b\170\004r\t\150\000\173\000\000\002\190\000\173\000\000\002\130\012\205\t\190\000\000\002\030\002\246\000\000\002\"\000\173\000\000\000\173\000\000\000\173\000\000\000\173\001\210\000\238\t\198\000\000\002\250\002.\000\000\000\000\0026\012\185\t\206\000\173\000\000\000\000\000\000\002\254\000\000\000\173\000\000\000\000\000\000\000\173\000\000\0032\001\190\015\174\000\173\000\000\002\130\000\173\002\178\004\005\002:\003:\000\173\000\173\000\173\bz\b~\b\138\000\000\012\150\005v\000\173\000\173\006F\021\142\000\000\005\234\tR\000\173\000\000\000\000\t!\000\173\006f\000\000\000\000\000\000\006r\000\000\000\000\005\130\005\134\000\173\000\173\015\178\000\000\000\173\000\173\000\000\000\000\000\000\000\000\000\000\000\000\002>\000\000\000\173\000\000\015\190\000\000\021\178\000\000\000\173\000\173\005\138\b\146\000\000\000\000\000\197\b\170\004r\000\000\000\173\000\197\000\173\002\190\000\197\000\000\002\130\000\000\t\190\000\000\000\000\002\246\005\134\000\000\000\197\000\000\000\197\000\000\000\197\000\000\000\197\001\210\021\190\t\198\000\000\002\250\000\000\000\000\000\000\000\000\000\000\t\206\000\197\000\000\t2\000\000\002\254\000\000\000\197\021R\000\000\000\000\000\197\000\000\0032\001\190\000\000\000\197\000\000\000\000\000\197\002\178\000\000\000\000\003:\000\197\000\197\000\197\bz\b~\b\138\000\000\012\150\005v\000\197\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\014\022\000\197\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\197\000\197\000\000\000\000\000\197\000\197\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\197\000\000\000\000\000\000\000\000\000\000\000\197\000\197\005\138\b\146\000\000\000\000\000\000\b\170\004r\000\000\000\197\000\000\000\197\000\014\000\018\000\022\000\026\000\030\000\000\000\"\000&\000*\000.\0002\000\000\0006\000:\000\000\000\000\000>\016\154\006F\000\000\000B\005\234\015\174\000\000\002\006\002\130\000\000\000F\006f\000\000\000\000\000\000\006r\000J\002\n\000N\000R\000V\000Z\000^\000b\000f\001\210\000\000\000\000\000j\000n\000\000\000r\000\000\000v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\154\000\000\000\000\000\000\015\178\000z\007J\001\222\000~\000\130\000\000\000\000\000\000\002\178\000\000\000\134\000\138\000\142\015\190\000\000\021\146\000\000\000\000\000\146\000\150\000\154\000\158\000\000\000\162\000\166\000\170\000\000\001\r\000\000\000\174\000\178\000\182\001\r\000\000\000\000\000\186\007N\000\190\000\194\005\134\000\000\000\000\000\000\000\000\000\000\000\198\000\000\000\202\000\000\021\158\000\000\001\r\003\213\000\206\000\210\000\000\000\214\003\213\003V\002\190\003\213\000\000\002\130\000\000\006\238\000\000\021R\002\246\000\000\000\000\003\213\000\000\000\000\001\r\003\213\003R\003\213\001\210\007\189\007\014\000\000\001\r\000\000\000\000\003Z\000\000\001\r\tB\003\213\000\000\n\205\000\000\000\000\000\000\003\213\001\r\001\r\003f\000\000\000\000\011\006\001\190\000\000\003\213\000\000\000\000\003\213\002\178\007\189\000\000\003\246\003\213\003\213\n\201\003\250\000\000\004\002\000\000\011\022\005v\n\205\001\r\007\189\000\000\000\000\007\189\t\006\003\213\003\213\000\000\001\r\005z\007\189\000\000\n\205\000\000\007\189\n\205\011\178\005\130\005\134\003\213\003\213\011\030\n\205\003\213\003\213\000\000\n\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\201\011&\000\000\n\201\011f\003\213\005\138\000\000\000\000\000\000\n\201\000\000\004r\t\r\n\201\000\006\003\213\000\000\000\246\002\186\002\190\002\194\002\234\002\130\000\000\000\000\000\000\000\000\002\246\000\000\000\000\004\153\000\000\t\r\000\000\t\r\t\r\003\182\001\210\000\000\000\000\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\218\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\007\030\000\000\000\000\017>\002\178\000\000\000\000\003:\017V\000\000\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\000\000\t\018\000\000\028F\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017r\017\158\000\000\000\006\028g\015\006\000\246\002\186\002\190\002\194\002\234\002\130\000\000\000\000\000\000\000\000\002\246\000\000\000\000\028\150\000\000\021\230\005\138\b\146\t\r\003\182\001\210\b\170\004r\t\150\002\250\000\000\003>\003B\000\000\000\000\000\000\003\186\000\000\003F\000\000\002\254\000\000\016\218\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\007\030\000\000\016\170\017>\002\178\000\000\000\000\003:\017V\002\006\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\002\n\000\000\000\000\000\000\000\000\017^\000\000\t\018\001\210\028F\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\017r\017\158\000\000\000\000\004\161\000\000\003\154\000\000\000\000\000\000\001\006\000\000\007J\001\222\000\000\000\000\003V\002\190\006\014\002\178\002\130\021\230\005\138\b\146\014\134\002\246\001\n\b\170\004r\t\150\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\007N\000\000\000\000\002\225\000\000\003z\002\225\001.\006.\000\000\000\000\003r\001\190\0016\002\225\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\002\225\003\250\000\000\004\002\005j\000\n\005v\000\000\002\225\001>\001B\001F\001J\001N\000\000\000\000\000\n\001R\005z\000\000\002\225\001V\000\000\000\000\000\000\002\225\005\130\005\134\000\000\005\202\001Z\002\225\002\225\002\225\002\225\000\000\001^\000\000\002\225\000\000\000\000\000\000\000\000\000\000\002\225\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\002\225\001\170\001\174\003V\002\190\tr\002\225\002\130\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\001.\006.\000\000\000\000\003r\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\000\000\001\170\001\174\003V\002\190\011\n\000\000\002\130\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\001.\006.\000\000\000\000\003r\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\001\006\000\000\001\166\000\000\001\170\001\174\003V\002\190\r\214\000\000\002\130\000\000\000\000\000\000\000\000\002\246\001\n\000\000\000\000\000\000\002\142\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\001\014\001\018\001\022\003v\001\030\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003z\000\000\001.\006.\000\000\000\000\003r\001\190\0016\000\000\000\000\001:\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\001>\001B\001F\001J\001N\000\000\000\000\000\000\001R\005z\000\000\000\000\001V\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\001Z\000\000\000\000\000\000\000\000\000\000\001^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\154\0062\000\000\000\000\005\138\000\000\000\000\001\158\000\000\001\162\004r\000\000\005\t\001\166\000\000\001\170\001\174\005\t\005\t\005\t\005\t\b\021\005\t\000\000\005\t\005\t\b\021\000\000\005\t\000\000\005\t\000\000\005\t\005\t\005\t\005\t\005\t\005\t\000\000\005\t\005\t\005\t\000\000\000\000\000\000\b\021\000\000\000\000\005\t\000\000\000\000\000\000\000\000\005\t\005\t\005\t\000\000\000\000\000\000\005\t\005\t\005\t\000\000\005\t\000\000\000\000\005\t\b\021\005\t\000\000\000\000\005\t\005\t\005\t\000\000\b\021\005\t\005\t\005\t\000\000\b\021\b\021\000\238\000\000\000\000\005\t\005\t\005\t\000\000\b\021\b\021\005\t\005\t\000\000\000\000\000\000\005\t\000\000\000\000\005\t\000\000\005\t\005\t\005\t\000\000\005\t\005\t\005\t\005\t\000\000\005\t\005\t\b\021\000\000\000\000\b\021\000\000\000\000\000\000\000\000\005\t\020b\005\t\005\t\b\021\000\000\002\150\005\t\000\000\000\000\000\000\000\000\005\t\005\t\n\229\000\000\005\t\n\229\005\t\005\t\n\229\n\229\012\205\012\185\n\229\000\000\n\229\000\000\000\000\n\229\000\000\000\000\000\000\n\229\n\229\000\000\n\229\n\229\000\000\n\229\000\000\n\229\012\205\025\130\000\000\002\030\n\229\000\000\002\"\n\229\002\006\000\000\000\000\000\000\000\000\002*\000\000\n\229\000\000\n\229\002\n\002.\n\229\n\229\0026\012\185\000\000\000\000\001\210\n\229\000\000\000\000\n\229\000\000\000\000\n\229\n\229\000\000\n\229\000\000\n\229\n\229\000\000\000\000\000\000\003\154\000\000\000\000\002:\000\000\000\000\007J\001\222\n\229\000\000\000\000\000\000\000\000\002\178\000\000\000\000\n\229\n\229\000\000\000\000\n\229\000\000\n\229\000\000\000\000\000\000\000\000\005\166\000\000\000\000\000\000\000\000\001\202\001\206\n\229\n\229\000\000\n\229\n\229\000\000\n\229\007N\n\229\000\000\n\229\000\000\n\229\002>\n\229\b\249\b\249\001\210\001\214\001\230\b\249\000\000\001\206\b\249\000\000\000\000\000\000\001\242\000\000\000\000\018\246\b\249\000\000\b\249\b\249\b\249\000\000\b\249\b\249\b\249\001\246\020^\000\000\019~\000\000\002\158\000\000\002\178\004\030\004*\000\000\b\249\000\000\000\000\020n\000\000\000\000\b\249\b\249\000\000\000\000\b\249\000\000\000\000\002\154\000\000\b\249\000\000\000\000\b\249\000\000\004:\000\000\000\000\b\249\b\249\b\249\000\000\000\000\000\000\000\000\000\000\000\000\b\249\b\249\000\000\000\000\000\000\000\000\000\000\b\249\000\000\000\000\000\000\004\154\000\000\000\000\b\249\000\000\000\000\000\000\000\000\000\000\000\000\b\249\b\249\b\249\000\000\b\249\b\249\000\000\004e\000\000\000\000\000\000\000\000\004e\000\000\b\249\004e\b\249\b\249\000\000\000\000\000\000\b\249\000\000\000\000\000\000\004e\b\249\000\000\000\000\004e\b\249\004e\b\249\b\249\012\141\012\141\000\000\000\000\004e\012\141\000\000\001\206\012\141\004e\000\000\000\000\000\000\000\000\000\000\004e\004\186\000\000\012\141\012\141\012\141\004B\012\141\012\141\012\141\000\000\000\000\004e\004e\000\000\000\000\000\000\004e\002\226\000\000\000\000\012\141\000\000\000\000\000\000\000\000\000\000\012\141\012\141\000\000\000\000\012\141\000\000\004e\002\154\004e\012\141\000\000\000\000\012\141\000\000\000\000\000\000\004e\012\141\012\141\012\141\004e\004e\002\226\000\238\004e\004e\012\141\012\141\000\000\000\000\004R\004e\000\000\012\141\000\000\000\000\000\000\004\154\000\000\000\000\012\141\004e\000\000\000\000\000\000\000\000\021f\012\141\012\141\012\141\000\000\012\141\012\141\000\000\007\005\000\000\004e\000\000\000\000\007\005\000\000\012\141\007\005\012\141\012\141\004e\000\000\000\000\012\141\000\000\000\000\000\000\007\005\012\141\000\000\000\000\007\005\012\141\007\005\012\141\012\141\b\253\b\253\000\000\000\000\000\000\b\253\000\000\001\206\b\253\007\005\000\000\000\000\000\000\000\000\000\000\007\005\b\253\000\000\b\253\b\253\b\253\000\000\b\253\b\253\b\253\000\000\000\000\007\005\000\000\000\000\000\000\000\000\007\005\007\005\000\000\000\000\b\253\000\000\000\000\000\000\000\000\000\000\b\253\b\253\000\000\000\000\b\253\000\000\007\005\002\154\000\000\b\253\000\000\000\000\b\253\000\000\000\000\000\000\000\000\b\253\b\253\b\253\007\005\007\005\016\238\000\000\007\005\007\005\b\253\b\253\002\225\000\000\000\000\000\000\000\000\b\253\000\000\002\225\000\000\004\154\018\030\000\000\b\253\007\005\000\000\000\000\000\000\000\000\002\225\b\253\b\253\b\253\002\225\b\253\b\253\000\000\000\n\002\225\002\225\002\225\000\000\000\000\002\225\b\253\002\225\b\253\b\253\002\225\002\225\002\225\b\253\002\225\002\225\002\225\002\225\b\253\002\225\002\225\002\225\b\253\002\225\b\253\b\253\000\000\002\225\000\n\000\000\002\225\002\225\002\225\000\000\002\225\000\000\002\225\002\225\000\n\002\225\002\225\002\225\000\n\002\225\002\225\002\225\000\000\000\000\001*\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\000\n\002\225\002\225\000\000\002\225\002\225\002\225\000\000\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\000\000\000\000\002\225\000\n\002\225\002\225\002\225\002\225\002\225\000\000\000\000\002\225\002\225\002\225\002\225\002\225\000\000\006\157\002\225\0009\002\225\002\225\000\000\0009\0009\002\225\0009\0009\002\225\000\000\002\225\002\225\0009\000\000\002\225\000\000\000\000\006\157\002\225\002\225\000\000\000\000\0009\002\225\002\225\002\225\0009\003\190\0009\0009\000\000\000\000\000\000\002\225\000\000\0009\000\000\0009\000\000\000\000\000\000\0009\0009\007&\0009\0009\0009\0009\0009\000\000\000\000\000\000\0009\000\000\000\000\0009\000\000\000\000\000\000\0009\0009\0009\0009\000\000\0009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0009\000\000\000\000\000\000\012\205\012\185\000\000\0009\0009\0009\0009\0009\000\000\006\153\000\000\0005\000\000\000\000\000\000\0005\0005\000\000\0005\0005\012\205\000\000\000\000\002\030\0005\000\000\002\"\000\000\000\000\006\153\0009\0009\000\000\002\206\0005\0009\0009\0009\0005\002.\0005\0005\0026\012\185\000\000\000\000\000\000\0005\000\000\0005\000\000\000\000\000\000\0005\0005\000\000\0005\0005\0005\0005\0005\000\000\000\000\000\000\0005\000\000\002:\0005\000\000\000\000\000\000\0005\0005\0005\0005\000\000\0005\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0005\000\000\000\000\000\000\000\000\000\000\000\000\0005\0005\0005\0005\0005\000\000\006\169\000\000\012U\000\000\000\000\000\000\012U\012U\000\000\012U\012U\002>\000\000\000\000\000\000\012U\000\000\000\000\000\000\000\000\006\169\0005\0005\000\000\000\000\012U\0005\0005\0005\012U\000\000\012U\012U\000\000\000\000\000\000\000\000\000\000\012U\000\000\012U\000\000\000\000\000\000\012U\012U\000\000\012U\012U\012U\012U\012U\000\000\000\000\000\000\012U\000\000\000\000\012U\000\000\000\000\000\000\012U\012U\012U\012U\000\000\012U\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012U\000\000\000\000\000\000\000\000\000\000\000\000\012U\012U\012U\012U\012U\000\000\006\165\000\000\012Q\000\000\000\000\000\000\012Q\012Q\000\000\012Q\012Q\000\000\000\000\000\000\000\000\012Q\000\000\000\000\000\000\000\000\006\165\012U\012U\000\000\000\000\012Q\012U\012U\012U\012Q\000\000\012Q\012Q\000\000\000\000\000\000\000\000\000\000\012Q\000\000\012Q\000\000\000\000\000\000\012Q\012Q\000\000\012Q\012Q\012Q\012Q\012Q\000\000\001\202\001\206\012Q\000\000\000\000\012Q\000\000\000\000\000\000\012Q\012Q\012Q\012Q\000\000\012Q\000\000\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\012Q\000\000\000\000\000\000\000\000\001\242\000\000\012Q\012Q\012Q\012Q\012Q\001\250\000\000\000\000\000\000\000\000\000\000\001\246\002\146\000\000\000\000\000\000\002\158\000\000\002\178\004\030\004*\012\145\012\145\000\000\000\000\0046\012\145\012Q\012Q\012\145\000\000\000\000\012Q\012Q\012Q\000\000\000\000\004\138\000\000\012\145\012\145\012\145\004:\012\145\012\145\012\145\000\000\001\021\000\000\000\000\000\000\000\000\001\021\000\000\000\000\000\000\000\000\012\145\000\000\000\000\000\000\000\000\000\000\012\145\012\145\000\000\000\000\012\145\000\000\000\000\000\000\001\021\012\145\000\000\000\000\012\145\000\000\000\000\000\000\000\000\012\145\012\145\012\145\000\000\000\000\000\000\000\000\000\000\000\000\012\145\012\145\000\000\000\000\001\021\000\000\018\254\012\145\000\000\000\000\000\000\012\145\001\021\000\000\012\145\000\000\000\000\001\021\000\000\000\000\000\000\012\145\012\145\012\145\000\000\012\145\012\145\001\021\000\000\000\000\000\000\000\000\000\000\000\000\b\017\012\145\000\006\012\145\012\145\b\017\002\186\002\190\012\145\002\234\002\130\000\000\000\000\012\145\000\000\002\246\000\000\012\145\001\021\012\145\012\145\000\000\003\254\000\000\b\017\001\210\000\000\001\021\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\000\000\000\000\003F\000\000\002\254\000\000\000\000\000\000\003\214\003\218\b\017\003\222\0032\003\234\003\242\007\030\000\000\000\000\b\017\002\178\000\000\000\000\003:\b\017\b\017\000\238\bz\b~\b\138\b\158\000\000\005v\b\017\b\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\018\000\000\000\000\000\000\000\000\000\000\000\000\t\030\t6\t\130\005\130\005\134\000\000\000\000\b\017\000\000\000\000\b\017\000\000\000\000\000\000\000\000\000\000\000\006\000\000\000\000\b\017\002\186\002\190\000\000\002\234\002\130\000\000\000\000\005\138\b\146\002\246\000\000\000\000\b\170\004r\t\150\000\000\014\154\000\000\000\000\001\210\000\000\000\000\000\000\002\250\000\000\003>\003B\000\000\000\000\000\000\001\197\000\000\003F\000\000\002\254\001\197\000\000\000\000\003\214\003\218\000\000\003\222\0032\003\234\003\242\007\030\000\000\000\000\000\000\002\178\000\000\000\000\003:\000\000\001\197\000\000\bz\b~\b\138\b\158\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0059\r\r\t\018\000\000\000\000\005=\r\r\001\197\000\000\t\030\t6\t\130\005\130\005\134\000\000\001\197\000\000\000\000\000\000\0059\001\197\001\197\000\238\0059\005=\000\000\003\029\003\029\005=\001\197\001\197\003\029\000\000\000\000\003\029\000\000\005\138\b\146\000\000\000\000\000\000\b\170\004r\t\150\003\029\003\029\003\029\000\000\003\029\003\029\003\029\000\000\000\000\000\000\000\000\001\197\000\000\000\000\000\000\000\000\000\000\000\000\003\029\000\000\001\197\000\000\000\000\000\000\003\029\004\130\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\r\r\r\r\003\029\000\000\000\000\r\r\r\r\003\029\003\029\003\029\000\000\000\000\000\000\0059\000\000\000\000\003\029\003\029\005=\r\r\000\000\r\r\000\000\003\029\r\r\000\000\r\r\003\029\0059\000\000\003\029\0059\000\000\005=\000\000\000\000\005=\003\029\003\029\003\029\004\137\003\029\003\029\000\000\000\000\019\014\000\000\000\000\000\000\000\000\000\000\003\029\000\000\003\029\003\029\000\000\000\000\000\000\003\029\000\000\000\000\000\000\000\000\003\029\003\182\n\241\000\000\003\029\n\241\003\029\003\029\003V\002\190\000\000\000\000\002\130\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\n\241\n\241\019:\n\241\n\241\000\000\001\210\000\000\007\014\000\000\017>\000\000\000\000\003Z\000\000\017V\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\241\019v\003f\000\000\000\000\003r\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\n\241\003\250\000\000\004\002\005j\011\022\005v\000\000\004\137\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\019\218\005z\001\202\001\206\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\005\202\n\241\000\000\n\241\000\000\000\000\000\000\000\000\000\000\001\210\001\214\000\000\000\000\000\000\000\000\n\241\000\000\000\000\n\241\n\241\000\000\005\138\000\000\n\241\000\000\n\241\000\000\004r\n\237\n\241\000\000\n\237\001\246\002\162\003V\002\190\000\000\002\158\002\130\002\178\004\030\004*\000\000\002\246\000\000\000\000\0046\n\237\n\237\000\000\n\237\n\237\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\004:\000\000\000\000\026b\000\000\000\000\000\000\000\000\n\237\000\000\003f\000\000\000\000\006\n\001\190\000\000\000\000\000\000\000\000\026N\002\178\000\000\000\000\003\246\000\000\000\000\n\237\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\012q\000\000\000\000\012q\000\000\000\000\005\130\005\134\000\000\005\202\n\237\000\000\n\237\012q\000\000\000\000\000\000\000\000\000\000\012q\000\000\001\221\001\221\000\000\n\237\000\000\001\221\n\237\n\237\001\221\005\138\012q\n\237\000\000\n\237\000\000\004r\012q\n\237\001\221\001\221\001\221\000\000\001\221\001\221\001\221\012q\000\000\000\000\012q\000\000\000\000\000\000\000\000\012q\000\000\000\000\001\221\000\000\000\000\000\000\000\000\000\000\001\221\001\221\000\000\000\000\001\221\000\000\000\000\012q\000\000\001\221\000\000\012q\001\221\000\000\000\000\000\000\000\000\001\221\001\221\001\221\000\000\012q\012q\000\000\000\000\012q\001\221\001\221\000\000\000\000\000\000\028>\000\000\001\221\004\145\000\000\000\000\001\221\000\000\022\014\001\221\000\000\012q\000\000\000\000\000\000\000\000\001\221\001\221\001\221\000\000\001\221\001\221\000\000\000\000\000\000\000\000\000\000\003\182\000\000\000\000\001\221\000\000\001\221\001\221\003V\002\190\000\000\001\221\002\130\000\000\006\238\000\000\001\221\002\246\000\000\000\000\004\254\000\000\001\221\022~\000\000\000\000\000\000\001\210\000\000\007\014\000\000\017>\000\000\000\000\003Z\000\000\017V\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\023\"\0232\003f\000\000\000\000\011\006\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\n\201\003\250\000\000\004\002\000\000\011\022\005v\000\000\004\145\000\000\000\000\000\000\000\000\000\000\000\000\004\017\000\000\024&\005z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\000\000\011\030\005\137\005\137\000\000\000\000\000\000\005\137\000\000\000\000\005\137\000\000\000\000\000\000\000\000\n\201\000\000\000\000\n\201\n\201\005\137\005\138\005\137\000\000\005\137\n\201\005\137\004r\000\000\n\201\004\017\000\000\000\000\000\000\000\000\000\000\000\246\000\000\005\137\002\194\000\000\000\000\000\000\000\000\005\137\005\137\000\000\000\000\000\000\028\150\005\137\000\000\000\000\005\137\000\000\003\182\005\137\000\000\000\000\000\000\000\000\005\137\005\137\005\137\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\218\000\000\000\000\000\000\005\137\005\137\000\000\000\000\005\137\024\166\000\000\001\006\017>\000\000\000\000\000\000\000\000\017V\005\137\005\137\005\137\000\000\005\137\005\137\000\000\000\000\000\000\001\n\007\246\000\000\000\000\002\142\000\000\017^\000\000\005\137\000\000\028F\005\137\005\137\001\014\001\018\001\022\001\026\001\030\001\"\000\000\017r\017\158\000\000\005\137\004\161\000\000\001&\000\000\001.\0012\000\000\000\000\000\000\000\000\0016\000\000\000\000\001:\000\000\000\000\000\000\021\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\003]\003]\001R\000\000\000\000\003]\001V\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\003]\003]\000\000\003]\001^\003]\000\000\003]\003]\000\000\000\000\000\000\000\000\000\000\001\154\027z\000\000\000\000\003]\003]\003]\001\158\003]\001\162\003]\003]\003]\001\166\000\000\001\170\001\174\005\017\000\000\000\000\003]\000\000\003]\003]\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\000\000\000\000\005\021\000\000\000\000\003]\000\000\000\000\003]\000\000\000\000\000\000\003]\003]\003]\003]\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\003]\003]\003]\000\000\003]\000\000\000\000\005\017\000\000\000\000\000\000\000\000\000\000\000\000\003]\003]\003]\000\000\003]\003]\005}\005}\000\000\000\000\005\021\005}\000\000\000\000\005}\003]\000\000\003]\003]\000\000\000\000\003]\000\000\000\000\005}\000\000\005}\000\000\005}\000\000\005}\000\000\003]\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005}\000\000\000\000\000\000\000\000\000\000\005}\005}\000\000\000\000\000\000\000\000\b>\000\000\000\000\005}\000\000\000\000\005}\000\000\000\000\000\000\000\000\005}\005}\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005}\005}\000\000\000\000\005}\000\000\t\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005}\005}\005}\000\000\005}\005}\000\000\000\000\n\"\000\000\000\000\012j\t\t\000\000\t\t\t\t\000\000\005}\000\000\000\000\005}\005}\nZ\nr\nz\nb\n\130\000\000\000\000\001\202\002~\000\000\005}\002\130\000\000\000\000\n\138\n\146\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\154\000\000\000\000\001\210\001\214\001\230\002\134\000\000\000\238\000\000\000\000\000\000\000\000\001\242\001\006\000\000\000\000\n*\nj\n\162\n\170\n\186\000\000\000\000\000\000\000\000\002\138\002\146\000\000\n\194\001\n\002\158\000\000\002\178\004\030\004*\000\000\000\000\n\202\000\000\021>\000\000\021B\001\014\001\018\001\022\001\026\001\030\001\"\000\000\000\000\000\000\n\234\000\000\n\242\n\178\001&\004:\001.\0012\t\t\n\210\000\000\000\000\0016\000\000\005\134\001:\000\000\n\218\n\226\000\000\000\000\000\000\000\000\000\000\021N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001B\001F\001J\001N\000\000\b\133\b\133\001R\021R\000\000\b\133\001V\000\000\b\133\000\000\000\000\000\000\000\000\000\000\000\000\001Z\000\000\000\000\b\133\000\000\b\133\001^\b\133\000\000\b\133\000\000\000\000\000\000\000\000\000\000\000\000\001\154\027\150\000\000\000\000\000\000\b\133\000\000\001\158\000\000\001\162\000\000\b\133\b\133\001\166\000\000\001\170\001\174\000\000\000\000\000\000\b\133\000\000\000\000\b\133\000\000\000\000\000\000\000\000\b\133\b\133\b\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\133\000\000\000\000\000\000\b\133\rY\rY\000\000\000\000\000\000\rY\000\000\000\000\rY\b\133\b\133\b\133\000\000\b\133\b\133\000\000\000\000\000\000\rY\000\000\rY\000\000\rY\b\133\rY\000\000\b\133\001\202\001\206\000\000\b\133\000\000\000\000\000\000\000\000\000\000\rY\000\000\000\000\004\254\000\000\b\133\rY\rY\r]\r]\001\210\001\214\004B\r]\000\000\rY\r]\000\000\rY\000\000\000\000\000\000\000\000\rY\rY\rY\r]\000\000\r]\000\000\r]\000\000\r]\001\246\002\154\000\000\000\000\000\000\002\158\rY\002\178\004\030\004*\rY\r]\000\000\000\000\0046\000\000\015\202\r]\r]\000\000\rY\rY\rY\004B\rY\rY\r]\000\000\000\000\r]\004R\004:\000\000\000\000\r]\r]\r]\rY\000\000\000\000\000\000\rY\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\r]\000\000\rY\000\000\r]\001\205\000\000\000\000\000\000\000\000\001\205\000\000\001\206\001\205\r]\r]\r]\000\000\r]\r]\000\000\b\229\000\000\001\205\004R\000\000\000\000\001\205\006\237\001\205\000\000\r]\000\000\006\237\000\000\r]\000\000\000\000\000\000\000\000\000\000\001\205\000\000\000\000\000\000\000\000\r]\001\205\001\205\000\000\000\000\000\000\006\237\000\000\002\154\000\000\001\205\000\000\000\000\001\205\000\000\000\000\000\000\000\000\001\205\001\205\001\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\237\000\000\000\000\000\000\000\000\000\000\001\205\001\205\006\237\000\000\004\154\003A\000\000\006\237\006\237\000\238\003A\000\000\001\206\003A\001\205\001\205\006\237\006\237\001\205\001\205\000\000\b\225\000\000\003A\000\000\000\000\000\000\003A\001\205\003A\000\000\000\000\000\000\000\000\000\000\001\205\000\000\000\000\000\000\000\000\001\205\003A\006\237\000\000\000\000\000\000\001\205\003A\001\201\000\000\000\181\006\237\000\000\000\000\002\154\000\181\003A\000\000\000\181\003A\000\000\000\000\000\000\000\000\003A\003A\003A\024\006\000\181\000\000\000\181\000\000\000\181\000\000\000\181\000\000\000\000\000\000\000\000\000\000\003A\003A\000\000\000\000\004\154\000\000\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\000\003A\003A\000\181\000\000\003A\003A\000\000\000\181\000\000\000\000\000\181\000\000\000\000\000\000\003A\000\181\000\181\000\238\000\000\000\000\000\000\003A\000\000\000\000\000\181\000\181\003A\000\000\000\000\000\000\000\000\000\181\003A\000\000\000\249\000\181\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\181\000\181\000\000\000\000\000\181\000\181\000\000\000\249\000\000\000\249\000\000\000\249\000\000\000\249\000\181\000\000\000\000\000\000\000\000\000\000\000\181\000\181\000\000\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\181\000\249\000\181\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\249\000\000\000\000\000\000\000\000\000\249\000\249\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\000\000\000\000\189\000\249\000\000\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\249\000\249\000\000\000\000\000\249\000\249\000\000\000\189\000\000\000\189\000\000\000\189\000\000\000\189\000\249\000\000\000\000\000\000\000\000\000\000\000\249\000\249\000\000\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\249\000\189\000\249\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\189\000\000\000\000\000\000\000\000\000\189\000\189\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\000\000\000\000\189\000\000\000\000\000\185\000\189\000\000\000\000\r\025\000\185\000\000\000\000\000\185\r\025\000\000\000\189\000\189\000\000\000\000\000\189\000\189\000\000\000\185\000\000\000\185\000\000\000\185\000\000\000\185\000\189\000\000\000\000\r\025\000\000\000\000\000\189\000\189\000\000\000\000\000\000\000\185\000\000\000\000\000\000\000\000\000\189\000\185\000\189\000\000\000\000\000\185\000\000\000\000\000\000\r\025\000\185\000\000\000\000\000\185\000\000\000\000\000\000\r\025\000\185\000\185\000\238\000\000\r\025\r\025\000\238\000\000\000\000\000\185\000\185\000\000\000\000\r\025\r\025\000\000\000\185\000\000\000\000\001\169\000\185\000\000\000\000\000\000\001\169\000\000\000\000\001\169\000\000\000\000\000\185\000\185\000\000\000\000\000\185\000\185\000\000\001\169\000\000\r\025\000\000\001\169\004e\001\169\000\185\000\000\000\000\004e\r\025\000\000\000\185\000\185\000\000\000\000\000\000\001\169\001\169\000\000\000\000\000\000\000\185\001\169\000\185\000\000\000\000\000\000\004e\005\017\000\000\000\000\001\169\000\000\000\000\001\169\000\000\000\000\000\000\000\000\001\169\001\169\001\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\000\000\000\000\001\169\000\000\004e\000\000\001\169\rU\rU\004e\002\226\000\000\rU\000\000\000\000\rU\001\169\001\169\004e\004e\001\169\001\169\000\000\000\000\000\000\rU\005\017\rU\000\000\rU\001\169\rU\000\000\000\000\000\000\000\000\001\169\001\169\000\000\000\000\000\000\000\000\001\169\rU\004e\000\000\000\000\000\000\001\169\rU\rU\000\000\000\000\004e\000\000\000\000\000\000\000\000\rU\000\000\000\000\rU\000\000\000\000\000\000\000\000\rU\rU\rU\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\rU\000\000\000\000\000\000\rU\rQ\rQ\000\000\000\000\000\000\rQ\000\000\000\000\rQ\rU\rU\rU\000\000\rU\rU\000\000\000\000\000\000\rQ\000\000\rQ\000\000\rQ\000\000\rQ\000\000\rU\000\000\000\000\000\000\rU\000\000\000\000\000\000\000\000\000\000\rQ\000\000\000\000\004\254\000\000\rU\rQ\rQ\000\000\000\000\000\000\000\000\000\000\000\000\004m\rQ\000\000\000\000\rQ\000\246\000\000\000\000\002\018\rQ\rQ\rQ\000\000\000\000\000\000\000\000\000\000\000\000\017\222\000\000\000\000\000\000\004m\000\000\003\182\rQ\000\000\b\137\b\137\rQ\000\000\000\000\b\137\000\000\000\000\b\137\017\226\000\000\000\000\rQ\rQ\rQ\018\n\rQ\rQ\b\137\000\000\b\137\000\000\b\137\000\000\b\137\000\000\007\146\017>\000\000\rQ\000\000\000\000\017V\rQ\000\000\000\000\b\137\000\000\000\000\000\000\000\000\000\000\b\137\b\137\rQ\000\000\000\000\000\000\018\162\000\000\000\000\b\137\000\000\000\000\b\137\000\000\000\000\000\000\000\000\b\137\b\137\000\238\017r\018\182\000\000\000\000\004m\004m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\b\137\000\000\000\000\000\000\b\137\000\000\007\001\000\000\018\198\000\000\000\000\000\000\000\000\000\000\b\137\b\137\b\137\000\000\b\137\b\137\000\000\000\000\n\"\000\000\000\000\007\001\000\000\000\000\b\137\007\001\000\000\b\137\000\000\000\000\000\000\b\137\nZ\nr\nz\nb\n\130\000\000\000\000\000\000\000\000\000\000\b\137\001\201\000\000\000\000\n\138\n\146\001\201\000\000\001\206\001\201\000\000\000\000\000\000\n\154\000\000\000\000\000\000\b\225\000\000\001\201\000\000\000\238\000\000\001\201\000\000\001\201\000\000\000\000\000\000\000\000\n*\nj\n\162\n\170\n\186\000\000\000\000\001\201\000\000\000\000\000\000\007\001\n\194\001\201\000\000\000\000\000\000\000\000\000\000\000\000\002\154\n\202\001\201\000\000\000\000\001\201\000\000\000\000\000\000\000\000\001\201\001\201\001\201\000\000\000\000\n\234\000\000\n\242\n\178\000\000\000\000\000\000\000\000\000\000\n\210\000\000\001\201\001\201\000\000\000\000\004\154\000\000\n\218\n\226\000\000\000\000\000\000\016\142\000\000\000\000\001\201\001\201\000\000\000\000\001\201\001\201\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\"\001\201\000\000\000\000\016\146\000\000\000\000\000\000\001\201\000\000\000\000\000\000\000\000\001\201\nZ\nr\nz\nb\n\130\001\201\000\000\000\000\000\000\000\000\000\000\006V\000\000\000\000\n\138\n\146\000\246\001\202\001\206\002\018\000\000\000\000\000\000\n\154\000\000\000\000\000\000\000\000\000\000\017\222\000\000\000\238\000\000\004m\000\000\003\182\001\210\001\214\001\230\000\000\n*\nj\n\162\n\170\n\186\000\000\001\242\017\226\000\000\000\000\000\000\000\000\n\194\018\n\000\000\000\000\000\000\000\000\000\000\001\246\002\146\n\202\000\000\000\000\002\158\017>\002\178\004\030\004*\000\000\017V\000\000\000\000\0046\000\000\n\234\016\150\n\242\n\178\016\166\000\000\000\000\000\000\000\000\n\210\000\000\018\162\000\000\000\000\000\000\004:\000\000\n\218\n\226\005\181\005\181\000\000\000\000\000\000\005\181\017r\018\182\005\181\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\181\000\000\005\181\000\000\005\181\000\000\005\181\000\000\000\000\018\198\000\000\000\000\000\000\000\000\004n\000\000\004r\000\000\005\181\000\000\000\000\000\000\000\000\000\000\005\181\005\181\000\000\000\000\000\000\000\000\b>\000\000\000\000\005\181\000\000\000\000\005\181\000\000\006Y\000\000\000\000\005\181\005\181\000\238\000\000\002\190\000\000\000\000\002\130\000\000\000\000\000\000\000\000\002\246\000\000\002\225\002\225\005\181\006Y\002\225\000\000\005\181\000\000\001\210\002\225\000\000\000\000\002\250\000\000\000\000\002\225\005\181\005\181\005\181\002\225\005\181\005\181\000\000\002\254\000\000\000\000\002\225\000\n\000\000\000\000\007\"\0032\001\190\005\181\000\000\000\000\015f\005\181\002\178\002\225\000\000\003:\002\225\002\225\000\000\bz\b~\b\138\005\181\002\225\005v\000\000\002\225\000\000\000\000\002\225\002\225\000\000\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\005\177\007f\000\000\005\130\005\134\005\177\002\225\000\000\005\177\000\000\000\000\000\000\000\000\000\000\002\225\002\225\000\000\015\162\005\177\000\000\005\177\000\000\005\177\000\000\005\177\000\000\000\000\005\138\b\146\000\000\000\000\000\000\b\170\004r\000\000\000\000\005\177\000\000\002\225\000\000\000\000\000\000\005\177\007\226\002\225\000\000\000\000\000\000\000\000\000\000\000\000\005\177\000\000\000\000\005\177\000\000\000\000\000\000\000\000\005\177\005\177\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\177\000\000\ra\ra\005\177\000\000\000\000\ra\000\000\000\000\ra\000\000\000\000\000\000\005\177\005\177\005\177\000\000\005\177\005\177\ra\000\000\ra\000\000\ra\000\000\ra\000\000\000\000\000\000\000\000\005\177\000\000\000\000\000\000\005\177\000\000\000\000\ra\000\000\000\000\000\000\000\000\000\000\ra\ra\005\177\000\000\000\000\000\000\000\000\000\000\000\000\ra\000\000\000\000\ra\000\000\000\000\000\000\000\000\ra\ra\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ra\000\000\re\re\ra\000\000\000\000\re\000\000\000\000\re\000\000\000\000\000\000\ra\ra\ra\000\000\ra\ra\re\000\000\re\000\000\re\000\000\re\000\000\000\000\000\000\000\000\ra\000\000\000\000\000\000\ra\000\000\000\000\re\000\000\000\000\000\000\000\000\000\000\re\007\226\ra\000\000\000\000\000\000\000\000\000\000\000\000\re\000\000\000\000\re\000\000\000\000\000\000\000\000\re\re\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\re\000\000\005\201\007f\re\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\re\re\re\000\000\re\re\005\201\000\000\005\201\000\000\005\201\000\000\005\201\000\000\000\000\000\000\000\000\re\000\000\000\000\000\000\re\000\000\000\000\005\201\000\000\000\000\000\000\000\000\000\000\005\201\007\226\re\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\000\000\005\201\000\000\000\000\000\000\000\000\005\201\005\201\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\201\000\000\005\205\005\205\005\201\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\005\201\005\201\005\201\000\000\005\201\005\201\005\205\000\000\005\205\000\000\005\205\000\000\005\205\000\000\000\000\000\000\000\000\005\201\000\000\000\000\000\000\005\201\000\000\000\000\005\205\000\000\000\000\000\000\000\000\000\000\005\205\005\205\005\201\000\000\000\000\000\000\000\000\000\000\000\000\005\205\000\000\000\000\005\205\000\000\000\000\000\000\000\000\005\205\005\205\005\205\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\205\003V\002\190\000\000\005\205\002\130\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\005\205\005\205\005\205\000\000\005\205\005\205\001\210\000\000\007\014\000\000\000\000\000\000\000\000\003Z\000\000\000\000\tB\005\205\000\000\000\000\000\000\005\205\000\000\000\000\000\000\000\000\003f\000\000\000\000\011\006\001\190\000\000\b\n\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\011\022\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003=\000\000\000\000\005z\000\000\003=\000\000\001\206\003=\000\000\000\000\005\130\005\134\000\000\000\000\011\030\000\000\000\000\003=\000\000\000\000\000\000\003=\000\000\003=\000\000\000\000\000\000\000\000\000\000\011&\000\000\000\000\0112\000\000\005\138\003=\000\000\000\000\000\000\000\000\004r\003=\000\000\000\000\001M\000\000\000\000\000\000\002\154\001M\003=\000\000\001M\003=\000\000\000\000\000\000\000\000\003=\003=\003=\000\000\001M\000\000\001M\000\000\001M\000\000\001M\000\000\000\000\000\000\000\000\000\000\003=\003=\000\000\000\000\004\154\000\000\001M\000\000\000\000\000\000\000\000\000\000\001M\000\000\003=\003=\001M\000\000\003=\003=\000\000\001M\000\000\000\000\001M\000\000\000\000\000\000\003=\001M\001M\000\238\000\000\001I\000\000\003=\000\000\000\000\001I\001M\003=\001I\000\000\000\000\000\000\001M\003=\000\000\000\000\001M\000\000\001I\000\000\001I\000\000\001I\000\000\001I\000\000\001M\001M\001M\000\000\001M\001M\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\001M\000\000\001I\000\000\000\000\000\000\001I\001M\000\000\000\000\000\000\001I\000\000\000\000\001I\000\000\000\000\000\000\001M\001I\001I\000\238\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\001I\001\133\000\000\000\000\000\000\000\000\001\133\000\000\012\177\001\133\001I\001I\001I\000\000\001I\001I\000\000\012\177\000\000\001\133\000\000\001\133\000\000\001\133\001I\001\133\000\000\000\000\000\000\000\000\000\000\001I\000\000\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001I\001\133\012\177\000\000\000\000\000\000\000\000\000\000\012\177\000\000\000\000\000\000\000\000\001\133\000\000\000\000\000\000\000\000\001\133\001\133\001\133\000\000\000\000\0019\000\000\000\000\000\000\000\000\0019\000\000\000\157\0019\000\000\000\000\001\133\000\000\000\000\000\000\012\177\000\157\000\000\0019\000\000\0019\000\000\0019\000\000\0019\001\133\001\133\001\133\000\000\001\133\001\133\000\000\000\000\000\000\000\000\000\000\0019\000\000\000\000\000\000\000\000\000\000\0019\000\157\000\000\000\000\001\133\000\000\000\000\000\157\000\000\000\000\000\000\000\000\0019\000\000\000\000\001\133\000\000\0019\0019\0019\000\000\001\213\000\000\000\000\000\000\000\000\001\213\000\000\015\174\001\213\000\000\002\130\000\000\0019\000\000\001\202\001\206\000\157\000\000\001\213\000\000\000\000\000\000\001\213\000\000\001\213\000\000\0019\0019\0019\000\000\0019\0019\000\000\001\210\002\170\001\230\001\213\000\000\000\000\000\000\000\000\000\000\001\213\001\242\000\000\000\000\000\000\0019\015\178\000\000\000\000\001\213\000\000\000\000\001\213\000\000\001\246\002\146\0019\001\213\001\213\002\158\015\190\002\178\004\030\004*\000\000\000\000\000\000\000\000\0046\000\000\000\000\000\000\000\000\001\213\000Y\000\000\000\000\001\213\000\000\000Y\000\000\000Y\000\000\000\000\000\000\004:\005\134\001\213\001\213\000\000\000Y\001\213\001\213\000Y\000\000\000\000\000\000\000Y\000Y\000\000\b\165\001\213\000\000\000\000\000\000\000\000\000\000\000\000\001\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000\000\001\213\000Y\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000Y\000\000\000\000\000\000\000\000\000Y\000Y\000Y\000\000\000\000\000\000\000\000\000\000\000\000\000Y\000Y\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\238\000\000\000Y\002\246\000\000\000Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\000Y\007\014\000\000\000Y\000\000\000\000\003Z\000\000\b\165\tB\000\000\000\000\000Y\004e\007f\000Y\000\000\t~\004e\003f\000\000\004e\r\210\001\190\000\000\000\000\000\000\000\000\000Y\002\178\000\000\004e\003\246\000\000\000\000\004e\003\250\004e\004\002\000\000\011\022\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004e\000\000\000\000\000\000\005z\000\000\004e\007\226\000\000\000\000\004e\000\000\005\130\005\134\000\000\004e\000\000\000\000\004e\000\000\000\000\000\000\000\000\004e\002\226\000\238\000\000\000\000\007\145\000\000\000\000\007\145\004e\004e\r\226\000\000\005\138\000\000\000\000\004e\004e\0035\004r\004e\000\000\000\000\0035\007\145\007\145\0035\007\145\007\145\000\000\004e\004e\000\000\000\000\004e\004e\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\004e\000\000\000\000\000\000\007\145\000\000\000\000\004e\000\000\000\000\0035\015\198\025\202\000\000\000\000\000\000\0035\000\000\004e\000\000\000\000\000\000\007\145\000\000\000\000\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\003V\002\190\000\000\000\000\002\130\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\0035\000\000\000\000\007\145\0035\007\145\001\210\000\000\007\014\000\000\000\000\000\000\000\000\003Z\0035\0035\tB\005\226\0035\0035\007\145\007\145\000\000\000\000\023\142\007\145\003f\007\145\0035\003r\001\190\007\145\000\000\000\000\016&\0035\002\178\000\000\000\000\003\246\0035\000\000\000\000\003\250\000\000\004\002\0035\011\022\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\238\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\021\254\007\014\000\000\000\000\000\000\000\000\003Z\000\000\000\000\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\024Z\003f\005\138\000\000\011\006\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\000\000\011\022\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\006\238\000\000\005z\002\246\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\000\000\001\210\011\030\007\014\000\000\000\000\000\000\000\000\003Z\000\000\000\000\tB\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\150\003f\005\138\000\000\011\006\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005\194\011\022\005v\000\000\000\000\000\000\003V\002\190\000\000\000\000\002\130\000\000\000\000\000\000\005z\002\246\000\000\000\000\000\000\000\000\005\198\000\000\005\130\005\134\000\000\001\210\011\030\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\246\003f\005\138\000\000\003r\001\190\000\000\000\000\004r\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\t%\000\000\000\000\000\000\000\000\000\000\003V\002\190\000\000\005z\002\130\000\000\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\t%\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\000\000\000\000\006\134\000\000\000\000\005\138\002\225\002\225\000\000\003f\002\225\004r\003r\001\190\000\000\002\225\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\002\225\003\250\000\000\004\002\005j\000\000\005v\002\225\000\n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\002\225\000\000\000\000\002\225\002\225\000\000\005\130\005\134\000\000\005\202\002\225\000\000\000\000\002\225\000\000\000\000\002\225\002\225\000\000\002\225\002\225\000\000\002\225\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\000\000\t%\000\000\002\225\000\000\004r\004M\004M\000\000\000\000\004M\002\225\002\225\000\000\002\225\004M\000\000\000\000\000\000\000\000\000\000\004M\000\000\000\000\000\000\004M\000\000\000\000\000\000\000\000\000\000\000\000\004M\023F\000\000\002\225\023^\000\000\000\000\002\225\000\000\002\225\000\000\000\000\000\000\004M\000\000\000\000\004M\004M\000\000\000\000\000\000\000\000\000\000\004M\000\000\000\000\004M\000\000\000\000\000\238\004M\000\000\004M\004M\000\000\004M\0035\000\000\000\000\000\000\0035\0035\000\000\000\000\0035\0035\000\000\004M\0035\000\000\000\000\000\000\000\000\000\000\0035\004M\004M\000\000\0035\000\000\0035\000\000\0035\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\015\198\000\000\000\000\0035\015\198\0035\004M\000\000\000\000\0035\000\000\000\000\004M\000\000\0035\000\000\000\000\0035\0035\000\000\000\000\0035\0035\0035\0035\000\000\0035\0035\0035\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\0035\000\000\000\000\000\000\000\000\000\000\0035\0035\025\210\000\000\0035\0035\026\002\000\000\0035\0035\012\169\000\000\000\000\000\000\000\000\012\169\000\000\000\000\012\169\000\000\016&\0035\000\000\000\000\016&\0035\0035\000\000\012\169\000\000\0035\000\000\012\169\000\000\012\169\000\000\000\000\000\000\000\000\000\000\005\t\000\000\000\000\000\000\000\000\000\000\012\169\000\000\000\000\000\000\000\000\000\000\012\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\169\000\000\000\000\012\169\000\000\000\000\003V\002\190\012\169\012\169\002\130\000\000\006\238\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\169\001\210\000\000\007\014\012\169\000\000\000\000\000\000\003Z\000\000\000\000\tB\000\000\000\000\012\169\012\169\002z\000\000\012\169\012\169\000\000\003f\000\000\000\000\tn\001\190\000\000\000\000\012\169\000\000\000\000\002\178\026\194\000\000\003\246\012\169\000\000\000\000\003\250\000\000\004\002\000\000\011\022\005v\005a\000\000\012\169\000\000\000\000\005a\000\000\000\000\005a\000\000\000\000\005z\000\000\000\000\000\000\000\000\000\000\000\000\005a\005\130\005\134\000\000\005a\000\000\005a\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005a\000\000\000\000\000\000\000\000\000\000\005a\005\138\000\000\000\000\000\000\000\000\b>\004r\000\000\005a\000\000\000\000\005a\000\000\000\000\000\000\000\000\005a\005a\000\238\000\000\005e\000\000\000\000\000\000\000\000\005e\000\000\000\000\005e\000\000\000\000\000\000\005a\005a\000\000\000\000\005a\000\000\005e\000\000\000\000\000\000\005e\000\000\005e\000\000\005a\005a\000\000\000\000\005a\005a\000\000\000\000\000\000\000\000\005e\000\000\000\000\000\000\000\000\000\000\005e\000\000\0035\000\000\000\000\005a\b>\0035\000\000\005e\0035\000\000\005e\000\000\000\000\000\000\005a\005e\005e\000\238\0035\000\000\000\000\000\000\0035\000\000\0035\000\000\000\000\000\000\000\000\000\000\000\000\005e\005e\000\000\000\000\005e\0035\015\198\000\000\000\000\000\000\000\000\0035\000\000\000\000\005e\005e\000\000\000\000\005e\005e\0035\000\000\000\000\0035\000\000\000\000\000\000\000\000\0035\0035\0035\006\017\000\000\000\000\000\000\005e\006\017\000\000\000\000\006\017\000\000\000\000\000\000\000\000\0035\000\000\005e\000\000\0035\006\017\000\000\000\000\000\000\006\017\000\000\006\017\000\000\000\000\0035\0035\017\174\000\000\0035\0035\000\000\000\000\000\000\006\017\000\000\000\000\000\000\000\000\000\000\006\017\000\000\000\000\000\000\000\000\016&\0035\000\000\000\000\006\017\000\000\000\000\006\017\000\000\000\000\000\000\000\000\006\017\006\017\000\238\000\000\000\000\000\000\000\000\000\000\025\170\000\000\000\000\000\000\000\000\000\000\003V\002\190\006\017\000\000\002\130\000\000\006\017\000\000\000\000\002\246\000\000\000\000\000\000\000\000\000\000\000\000\006\017\006\017\021\138\001\210\006\017\006\017\000\000\000\000\000\000\000\000\003Z\001\202\001\206\000\000\006\017\000\000\000\000\000\000\000\000\000\000\000\000\006\017\000\000\003f\000\000\000\000\003r\001\190\000\000\000\000\001\210\001\214\006\017\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\005\238\000\000\000\000\000\000\001\246\002\162\003V\002\190\005z\002\158\002\130\002\178\004\030\004*\000\000\002\246\005\130\005\134\0046\005\202\000\000\000\000\003\254\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\004:\000\000\000\000\004\217\000\000\005\138\000\000\006\218\000\000\t*\003f\004r\000\000\003r\001\190\000\000\000\000\000\000\000\000\026N\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\006J\000\000\000\000\000\000\000\000\000\000\003V\002\190\000\000\005z\002\130\000\000\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\006\158\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\006j\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\003f\002\130\004r\003r\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003Z\000\000\000\000\000\000\000\000\007\165\000\000\000\000\007\165\000\000\000\000\005z\000\000\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\005\202\002\178\007\165\007\165\003\246\007\165\007\165\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\006]\000\000\000\000\005z\007\165\004r\003V\002\190\000\000\000\000\002\130\005\130\005\134\000\000\005\202\002\246\000\000\000\000\000\000\000\000\006]\000\000\000\238\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\005\138\011\210\000\000\000\000\000\000\000\000\004r\003V\002\190\000\000\003f\002\130\000\000\003r\001\190\000\000\002\246\007\165\000\000\007\165\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\007\165\005v\003Z\005\234\007\165\000\000\000\000\000\000\007\165\000\000\007\165\000\000\000\000\005z\007\165\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\011\222\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\005z\002\130\004r\000\000\000\000\000\000\002\246\000\000\005\130\005\134\000\000\005\202\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\000\000\000\000\000\000\003Z\000\000\000\000\000\000\011\234\000\000\000\000\000\000\000\000\005\138\003V\002\190\000\000\003f\002\130\004r\003r\001\190\000\000\002\246\000\000\000\000\000\000\002\178\000\000\000\000\003\246\000\000\000\000\001\210\003\250\000\000\004\002\005j\000\000\005v\003Z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005z\000\000\003f\000\000\000\000\003r\001\190\000\000\005\130\005\134\000\000\005\202\002\178\000\000\000\000\003\246\000\000\000\000\000\000\003\250\000\000\004\002\005j\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\138\006\129\000\000\000\000\005z\000\000\004r\000\000\002\190\000\000\000\000\002\130\005\130\005\134\000\000\005\202\002\246\000\000\000\000\000\000\000\000\006\129\000\000\000\000\000\000\000\000\001\210\000\000\000\000\000\000\002\250\000\000\000\000\000\000\000\000\000\000\005\138\000\000\000\000\000\000\000\000\002\254\004r\000\000\000\000\000\000\000\000\000\000\000\000\0032\001\190\000\000\000\000\000\000\000\000\000\000\002\178\000\000\000\000\003:\000\000\000\000\000\000\bz\b~\b\138\000\000\000\000\005v\000\000\000\000\000\000\007\t\007f\000\000\000\000\000\000\007\t\000\000\000\000\007\t\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\130\005\134\007\t\000\000\000\000\000\000\007\t\000\000\007\t\000\000\001\181\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001\181\000\000\007\t\000\000\000\000\000\000\005\138\b\146\007\t\007\226\001\181\b\170\004r\000\000\001\181\000\000\001\181\007\t\000\000\000\000\007\t\000\000\000\000\000\000\000\000\007\t\007\t\000\238\001\181\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\000\000\000\000\000\000\000\000\007\t\000\000\001\181\000\000\007\t\001\181\000\000\000\000\000\000\000\000\001\181\001\181\001\181\000\000\007\t\007\t\000\000\000\000\007\t\007\t\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\001\217\001\181\000\000\000\000\000\000\001\217\007\t\000\000\001\217\000\000\000\000\001\181\001\181\000\000\000\000\001\181\001\181\000\000\001\217\000\000\000\000\017\186\001\217\000\000\001\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\181\000\000\000\000\000\000\001\217\001\181\000\000\000\000\000\000\000\000\001\217\000\000\000\000\006\021\000\000\000\000\000\000\000\000\006\021\001\217\000\000\006\021\001\217\000\000\000\000\000\000\000\000\001\217\001\217\000\000\000\000\006\021\000\000\000\000\000\000\006\021\000\000\006\021\000\000\000\000\000\000\000\000\000\000\001\217\000\000\000\000\000\000\001\217\000\000\006\021\000\000\000\000\000\000\000\000\000\000\006\021\000\000\001\217\001\217\000\000\000\000\001\217\001\217\000\000\006\021\000\000\000\000\006\021\000\000\000\000\000\000\001\217\006\021\006\021\000\238\000\000\000\000\000\000\001\217\000\000\000\000\000\000\000\000\021f\000\000\000\000\000\000\000\000\006\021\001\217\012\169\000\000\006\021\000\000\000\000\012\169\000\000\000\000\012\169\000\000\000\000\000\000\006\021\006\021\000\000\000\000\006\021\006\021\012\169\000\000\000\000\000\000\012\169\000\000\012\169\000\000\006\021\000\000\000\000\000\000\005\t\000\000\000\000\006\021\000\000\000\000\012\169\000\000\000\000\000\000\000\000\000\000\012\169\000\000\006\021\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\169\000\000\000\000\000\000\000\000\012\169\012\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012a\000\000\002\190\012a\000\000\028N\000\000\012\169\000\000\000\000\028R\000\000\000\000\012a\000\000\000\000\000\000\000\000\000\000\012a\000\000\012\169\012\169\002z\000\000\012\169\012\169\000\000\000\000\000\000\000\000\012a\000\000\004e\000\000\012\169\000\000\012a\004e\026\250\000\000\004e\012\169\001\002\001\190\000\000\012a\000\000\000\000\012a\000\000\004e\000\000\012\169\012a\004e\000\000\004e\000\000\000\000\004e\000\000\028V\004e\000\000\000\000\000\000\000\000\000\000\004e\012a\000\000\000\000\004e\012a\004e\000\000\004e\000\000\004e\000\000\000\000\000\000\028Z\012a\012a\000\000\004e\012a\000\000\000\000\004e\004e\002\226\000\000\000\000\000\000\004e\bE\bE\000\000\000\000\bE\b>\000\000\012a\004e\bE\004e\004e\000\000\000\000\000\000\016V\004e\002\226\000\238\bE\000\000\000\000\000\000\000\000\004e\004e\bE\000\000\004e\004e\000\000\000\000\004e\000\000\007\246\000\000\004e\000\000\000\000\bE\000\000\000\000\bE\bE\000\000\004e\004e\004e\000\000\bE\004e\004e\bE\000\000\000\000\000\000\bE\000\000\bE\bE\007\146\bE\000\000\000\000\000\000\000\000\001q\004e\000\000\000\000\000\000\001q\000\000\bE\001q\000\000\000\000\000\000\004e\000\000\000\000\bE\bE\000\000\001q\000\000\001q\000\000\001q\000\000\001q\000\000\000\237\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\237\000\000\001q\000\000\000\000\bE\000\000\000\000\001q\000\000\000\237\bE\000\000\000\000\000\237\000\000\000\237\000\000\000\000\000\000\001q\000\000\000\000\000\000\000\000\001q\001q\000\238\000\237\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\000\000\000\001q\000\000\000\237\000\000\000\000\000\237\000\000\000\000\000\000\000\000\000\237\000\237\000\238\000\000\001q\001q\001q\000\000\001q\001q\000\000\000\000\000\000\000\000\000\000\000\000\000\237\000\000\000\000\000\241\000\237\000\000\000\000\000\000\000\241\001q\000\000\000\241\000\000\000\000\000\237\000\237\000\000\000\000\000\237\000\237\001q\000\241\000\000\000\000\000\000\000\241\000\000\000\241\000\000\007\005\000\000\000\000\000\000\000\000\007\005\000\237\000\000\007\005\000\000\000\241\000\000\000\000\000\000\000\000\000\000\000\241\000\237\007\005\000\000\000\000\000\000\007\005\000\000\007\005\000\241\000\000\000\000\000\241\000\000\000\000\000\000\000\000\000\241\000\241\000\238\007\005\000\000\000\000\000\000\000\000\000\000\007\005\000\000\000\000\000\000\000\000\000\000\000\000\000\241\000\000\007\005\000\000\000\241\007\005\000\000\000\000\000\000\000\000\007\005\007\005\000\000\000\000\000\241\000\241\000\000\000\000\000\241\000\241\000\000\000\000\000\000\000\000\000\000\000\000\007\005\000\000\000\000\000\000\007\005\0116\000\000\000\000\000\000\000\241\000\000\001\202\001\206\011j\007\005\007\005\016\238\000\000\007\005\007\005\000\241\006\t\000\000\000\000\000\000\000\000\006\t\000\000\000\000\006\t\001\210\002\170\001\230\000\000\000\000\007\005\017\142\000\000\000\000\006\t\001\242\000\000\000\000\006\t\000\000\006\t\000\000\005m\007f\000\000\000\000\000\000\005m\001\246\002\146\005m\000\000\006\t\002\158\000\000\002\178\004\030\004*\006\t\000\000\005m\000\000\0046\000\000\005m\000\000\005m\006\t\000\000\000\000\006\t\000\000\000\000\000\000\000\000\006\t\006\t\000\000\005m\004:\000\000\000\000\000\000\000\000\005m\007\226\000\000\000\000\000\000\000\000\000\000\006\t\000\000\000\000\000\000\006\t\005m\000\000\000\000\000\000\000\000\005m\005m\000\238\000\000\006\t\006\t\000\000\000\000\006\t\006\t\000\000\000\000\000\000\000\000\012\017\000\000\005m\000\000\000\000\012\017\000\000\000\000\012\017\000\000\000\000\006\t\000\000\000\000\000\000\000\000\005m\005m\012\017\000\000\005m\005m\012\017\000\000\012\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\017\005m\000\000\000\000\000\000\000\000\012\017\000\000\000\000\000\000\000\000\000\000\000\000\001\202\002~\012\017\000\000\002\130\012\017\000\000\000\000\000\000\000\000\012\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\012\017\n\022\000\000\001\242\012\017\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\012\017\012\017\002\138\002\146\012\017\012\017\000\000\002\158\000\000\002\178\004\030\004*\004=\000\000\000\000\000\000\021>\004=\026\166\0045\004=\012\017\000\000\000\000\0045\000\000\000\000\0045\000\000\000\000\004=\000\000\n\250\004:\004=\000\000\004=\0045\000\000\000\000\000\000\0045\005\134\0045\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\026\178\000\000\004=\0045\000\000\000\000\000\000\000\000\000\000\0045\000\000\004=\000\000\000\000\004=\000\000\000\000\021R\0045\004=\000\000\0045\000\000\000\000\000\000\000\000\0045\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004=\000\000\000\000\000\000\004=\004U\000\000\0045\000\000\000\000\004U\0045\004%\004U\004=\004=\000\000\004%\004=\004=\004%\0045\0045\004U\000\000\0045\0045\004U\000\000\004U\004%\000\000\000\000\000\000\004%\004=\004%\000\000\000\000\000\000\000\000\004U\0045\000\000\000\000\000\000\017\022\004U\004%\000\000\000\000\000\000\000\000\020\030\004%\000\000\004U\000\000\000\000\004U\000\000\000\000\000\000\004%\004U\000\000\004%\000\000\000\000\000\000\000\000\004%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004U\000\000\000\000\011*\004U\000\000\000\000\004%\000\000\001\202\001\206\004%\000\000\000\000\004U\004U\000\000\000\000\004U\004U\000\000\004%\004%\002\142\000\000\004%\004%\000\000\001\210\001\214\001\230\000\000\000\000\000\000\000\000\004U\000\000\000\000\001\242\000\000\000\000\000\000\004%\000\000\000\000\001\250\021\002\006\221\006\221\000\000\000\000\001\246\002\146\024z\000\000\000\000\002\158\000\000\002\178\004\030\004*\000\000\000\000\004.\000\000\0046\006\221\006\221\006\221\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\221\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\000\000\000\000\000\006\221\006\221\000\000\000\000\000\000\006\221\000\000\006\221\006\221\006\221\000\000\004E\000\000\000\000\006\221\000\000\004E\000\000\004-\004E\000\000\000\000\015\182\004-\000\000\000\000\004-\000\000\000\000\004E\000\000\006\221\000\000\004E\000\000\004E\004-\000\000\000\000\000\000\004-\000\000\004-\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\004E\004-\000\000\004]\000\000\000\000\000\000\004-\004]\000\000\000\000\004]\004E\000\000\004\"\000\000\006\221\004E\000\000\004-\000\000\004]\000\000\000\000\004-\004]\000\000\004]\000\000\000\000\000\000\000\000\000\000\004E\000\000\000\000\000\000\000\000\000\000\004]\004-\000\000\000\000\000\000\000\000\004]\000\000\004E\004E\000\000\000\000\004E\004E\000\000\004-\004-\000\000\004]\004-\004-\000\000\000\000\004]\0116\000\000\000\000\000\000\000\000\004E\001\202\001\206\000\000\000\000\000\000\000\000\004-\000\000\000\000\004]\018Z\000\000\000\000\000\000\000\000\000\000\003\254\020\170\000\000\001\210\001\214\001\230\000\000\004]\004]\000\000\000\000\004]\004]\001\242\004y\000\000\000\000\000\000\000\000\000\246\000\000\000\000\002\194\000\000\000\000\000\000\001\246\002\146\004]\000\000\000\000\002\158\003\178\002\178\004\030\004*\004y\000\000\003\182\021*\0046\007}\000\000\000\000\007}\000\000\000\000\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\218\004:\000\000\000\000\007}\007}\000\000\007}\007}\024\166\000\000\000\000\017>\000\000\000\000\000\000\000\000\017V\000\000\000\000\000\000\007\169\000\000\000\000\007\169\000\000\000\000\000\000\007}\000\000\000\000\000\000\000\000\017^\000\000\000\000\000\000\004n\000\000\004r\007\169\007\169\000\000\007\169\007\169\000\000\007}\017r\017\158\000\000\000\000\004y\004y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\169\000\000\007\153\000\000\021\230\007\153\000\000\000\000\000\000\000\000\000\000\000\000\007}\000\000\007}\000\000\000\000\000\000\000\238\000\000\000\000\007\153\007\153\000\000\007\153\007\153\007}\000\000\000\000\005\234\007}\000\000\006\217\006\217\007}\000\000\007}\000\000\000\000\000\000\007}\000\000\000\000\000\000\000\000\007\153\000\000\000\000\007\169\000\000\007\169\006\217\006\217\006\217\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\217\007\169\000\238\000\000\005\234\007\169\000\000\000\000\000\000\007\169\000\000\007\169\000\000\006\217\006\217\007\169\ri\ri\006\217\000\000\006\217\006\217\006\217\000\000\000\000\000\000\000\000\006\217\000\000\000\000\000\000\000\000\007\153\000\000\007\153\ri\ri\ri\007z\000\000\000\000\000\000\000\000\000\000\006\217\ri\006F\000\000\000\000\005\234\007\153\000\000\000\000\000\000\007\153\000\000\007\153\000\000\ri\ri\007\153\000\000\000\000\ri\000\000\ri\ri\ri\000\000\000\000\000\000\000\000\ri\001\202\001\206\022\154\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\202\001\206\022\250\004\230\000\000\ri\000\000\000\000\001\210\002\170\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\001\210\002\170\001\230\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\242\000\000\001\246\002\146\001\202\001\206\000\000\002\158\000\000\002\178\004\030\004*\000\000\001\246\002\146\000\000\0046\000\000\002\158\000\000\002\178\004\030\004*\001\210\001\214\000\000\000\000\0046\000\000\000\000\000\000\000\000\000\000\004:\000\000\000\000\000\000\000\246\000\000\000\000\002\194\000\000\000\000\000\000\004:\000\000\001\246\002\162\000\000\000\000\004\153\002\158\000\000\002\178\004\030\004*\003\182\000\000\000\000\000\000\0046\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\186\000\000\000\000\000\000\000\000\000\000\016\218\000\000\000\000\004:\000\000\000\000\004\221\000\000\000\000\024\166\000\000\000\000\017>\000\000\000\000\000\000\000\000\017V\000\000\000\000\000\000\000\000\026N\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017^\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\017r\017\158\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\021\230")) and lhs = - (8, "\012\011\n\t\b\007\006\005\004\003\002\001\000\216\216\215\215\214\213\213\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\212\211\211\210\209\209\209\209\209\209\209\209\208\208\208\208\208\208\208\208\207\207\207\206\206\205\204\204\204\203\203\202\202\202\202\202\202\201\201\201\201\201\201\201\201\200\200\200\200\200\200\200\200\199\199\199\199\198\197\196\196\196\196\195\195\195\195\194\194\194\193\193\193\193\192\191\191\191\190\190\189\189\188\188\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\187\186\186\185\185\184\183\182\181\181\180\180\179\179\179\179\178\178\178\178\177\177\176\176\176\176\175\174\173\173\172\172\171\171\170\169\169\168\167\167\166\165\164\164\164\163\163\162\161\161\161\161\161\160\160\160\160\160\160\160\160\159\159\159\159\159\159\158\158\157\157\157\156\156\155\155\155\154\154\153\153\152\152\151\151\150\150\149\149\148\148\147\147\146\146\145\145\144\144\144\143\143\143\143\142\142\141\141\140\140\139\139\139\139\139\138\138\138\138\137\137\137\136\136\136\136\136\136\136\135\135\135\135\135\135\135\134\134\133\133\132\132\132\132\132\132\131\131\130\130\129\129\128\128\127\127\127~}}}||{{{{{{{{{zzyyxxxxxxxxxxxwvuutttttsrrqqppppppppppppppoonnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmllkkjjiihhggffeeddccbbaaaaaaaaaaa`_^]\\[ZYXWWWWWWWWWWVVVUUUTTTTSSSSSSSSSRRQQQQQPPOONMLLKKKKKJJIIHHHGGGGGGFFFEEDDCCBBAA@@@??>>==<<;;::9988776655544433322211110/..................-----,,,,,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**))))))))))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((''&&&%%$$$$$$$$$$$$$$$$##\"\"!!!!!!! \031\031\030\030\030\030\030\029\029\028\027\026\026\026\025\025\024\024\024\024\024\024\024\024\024\024\023\023\022\022\022\022\021\021\020\019\019\019\019\019\018\017\017\016\016\016\015\015\015\014\014\014\014\r\r") + (8, "\012\011\n\t\b\007\006\005\004\003\002\001\000\218\218\217\217\216\215\215\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\214\213\213\212\211\211\211\211\211\211\211\211\210\210\210\210\210\210\210\210\209\209\209\208\208\207\206\206\206\205\205\204\204\204\204\204\204\203\203\203\203\203\203\203\203\202\202\202\202\202\202\202\202\201\201\201\201\200\199\198\198\198\198\197\197\197\197\196\196\196\195\195\195\195\194\193\193\193\192\192\191\191\190\190\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\189\188\188\187\187\186\185\184\183\183\182\182\181\181\181\181\180\180\180\180\179\179\178\178\178\178\177\176\175\175\174\174\173\173\172\171\171\170\169\169\168\167\166\166\166\165\165\164\163\163\163\163\163\162\162\162\162\162\162\162\162\161\161\160\160\160\160\160\160\159\159\158\158\158\157\157\156\156\156\156\155\155\154\154\153\153\152\152\151\151\150\150\149\149\148\148\147\147\146\146\145\145\145\144\144\144\144\143\143\142\142\141\141\140\140\140\140\140\139\139\139\139\138\138\138\137\137\137\137\137\137\137\136\136\136\136\136\136\136\135\135\134\134\133\133\133\133\133\133\132\132\131\131\130\130\129\129\128\128\128\127~~~}}|||||||||{{zzyyyyyyyyyyyxwvuutttttsrrqqppppppppppppppoonnmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmllkkjjiihhggffeeddccbbaaaaaaaaaaa`_^]\\[ZYXWWWWWWWWWWVVVUUUTTTTTSSSSSSSSSRRQQQQQPPOONMLLKKKKKJJIIHHHGGGGGGFFFEEDDCCBBAA@@@??>>==<<;;::9988776655544433322211110/...................-----,,,,,,,+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++**))))))))))))))))))))))(((((((((((((((((((((((((((((((((((((((((((((((((((''&&&%%$$$$$$$$$$$$$$$$##\"\"!!!!!!! \031\031\030\030\030\030\030\029\029\028\027\026\026\026\025\025\024\024\024\024\024\024\024\024\024\024\023\023\022\022\022\022\021\021\020\019\019\019\019\019\018\017\017\016\016\016\015\015\015\014\014\014\014\014\014\r\r") and goto = - ((16, "\000%\000\193\000G\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\012\000\000\000\000\000\129\001\152\000\030\0003\000#\000\004\000\190\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000b\000\000\000\000\000\000\000\000\000\000\000t\000\000\000\000\000\000\000\242\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=2\000\000\000\000\000\000\000\254\000\000\000\000\000\000\000\000\000\000\000\000\000\000'\238\001T\001>\000\223\000\000\001B9\220\001\236\001\218\000:\000\000\000\000\000\000\001x\000\000\000\000\000\182\000\000\000\000\000\000\000\000\003\156\000\000\002\150\000\000\000\000\000\000\000\000\000\000\001\022\000\000\000\218\003\202\bf\000\000\000\000\011\018'\238\000\000\000\000\001\254\000\000\000\027\000\000:~\002\184\000\000\001\156\001r\000\000\000\000\002\172\002\142\002\208\003b\001\226\003\202\004\142\000f\001\194\0022\003\216\002\152\011b\000\000\005(\003\244\003\188\002h\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004r\000\000\t>\005(\011\194\000\000\000\000\004.\005d\004\0301\236\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\148\000\000\004\168\005l\005@\000\000\000\000\000\000\000\000\000\173\000\000\000\000\005\144\000\167\006\018\006(\007\214\000\000\0050\005H\006*\000Q\004\228\006L \232\000\000\000\000\005X\006\254\011\204\000\000!\b\001\244!\026\"V\000\000\003B\000\000\000\000\000\000\000\000\006\018=F\006\020\000\000\001\012\0064\000\000\004P6\150\000\131\000\000\001\172\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0002:\005\190\000\000\000\000\000\000\000\192\000\000\tD\000\000\000\000\002\164\000o\000\000\000\000\003\248\000\000\006n\000\000\002\164\t\148\002\164\000\000\000\000\000\000\000\000\000\0007 \000\000\007\"\006@\000\000=\168\007N\030`\000\000\000\000\000\000\0062\000\000\000\000\000\000\000\000\006F\000\000\000\000\000\000\000\000\000\0002L\000\000\000\000\000\000\000\000\000\000\000\000\001\158\007N\000\000\000\000\000\000\006F\007\1342\146\006\224\007p\015\214\000\000\003\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000(\000\000\000\000\000\000\000\000\b\0122\160\000\000\000\000\007\030\b\0042\214\000\000\000\000\000\00038\007\0143\152\000\000\007\014\000\0003\164\007\014\000\0003\228\007\014\000\000\007\014\000\000\000\000\007\014\000\000\000\0004J\000\000\007\0144\138\000\000\007\014\002|\000\000\000\000\"V\000\000\000\000\000\000\000\000\007\014\"z\000\000\000\000\000\000\007\014\000\000\006F\007\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\016\000\000\007\136\000\000=\132\006F\000\000\000\000\000\000\000\000\b\b\b\184\012$\b\026\b\030\b@\b\028\005\014\b`\0001\t\006\000\000\000\000\000\029\005\136\b\160\001\172\b\200\bL\000\000\000\145\004\138\005\180\007\136\n\"\000\000\000\000C\158\000\000C\224\t\212\000\000=\198\006F>@\006F\000\000\003\"\000\000\003x\000\000\000\000\003\220\000\000\000\000\000\000\nt\000\000\n\030\000\145\000\000\000\000\t>\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\145\000\000\000\000\000\145\000\000\b\200\007\014\000\000\002\182\004\228\000\000\002\182\000\000\000\000\n\206\000\145\000\000\000\000\000\000\000\000\000\000\000\000\002\182\012\132\rL\n4\t\218\"\152\000n\000\000\t\130\b\182\r\158\t\234\b\228\025X1N\000\000\000\000\000\000\000\000\000\000\0032\t\188\000\000\000\000\000\000\t\250\b\244\007V\002\182\011\240\000\000\000\145\000\000\000\000\000\000\001\244\000\000>T\006F\r\166\n\018\t\030\r\254\n \t0\014\180\"\186\007\014\015\024\n\"\t89\190\n\244\000\000#\002\007\014>x\006F\n\238\000\000\000\000\000\000\000\000\007\148\011&\011L\000\000\000\000\b\176\015 \n\208\t>4\172\007\014\015t\n\222\tF6(\000\000>\172\000\000\000\000\015|\"\244\018\\\000\000\000\000\000\000\000\000>\208\000\000\000\000\000\000\007\172\016B\000\000\000\000\000\000\000\000#^>\222\000\000\000\000\000\000\000\000\000\000\n\170\016\150\000\000\n\180$\"\n\180$,\n\180\000\000?\026\000\000$\128\n\180\016\234\004\152\016\244\000\000\000\000$\136\n\180%\022\n\180%\030\n\180%\250\n\180&\002\n\180&\026\n\180&\152\n\180&\246\n\180&\254\n\180'\140\n\180'\148\n\180'\232\n\180(v\n\180(\128\n\180)\014\n\180)^\n\180)h\n\180)\246\n\180*F\n\180*\212\n\180\t\170*\2484\232\007\148\011x\000\000+8;l\000\000\017N\000\000?,\000\000\006F;\166\000\000\006F?P\006F\000\000\017\184\000\000\000\000\000\000+\\\000\000\000\000\000\000\000\000\000\000\007\014\000\000\000\000?\210\000\000\006F\000\000\000\000;\166\011\136\000\000@6\006F\018\018\000\000\000\000\011\"\000\000@H\006F\018\160\000\000\000\000\018\196\000\000\000\000\000\000@Z\006F\019\028\000\000\n\252\019\132\000\0005J\000\000\007\0145\142\000\000\007\0145\176\000\000\007\014\003d\000\000\000\000\000\000\000\000\000\0005\240\007\014\004\222\005\022\000\000\000\000\000\000\n\180\019\222\000\000\000\000\000\000+\150\n\180\000\000\000\000\000\000\000\000\0206\000\000\000\000\000\000\n\180\020D\000\000\020\158\000\000\000\000\000\000\021\004\000\000\000\000\000\000\000\000@\146\000\000\000\000\021^\000\000\000\000\000\000,H\n\180\021l\000\000\000\000\000\000,\138\n\180\021\196\000\000\000\000,\176\n\180\n\180\000\000\007\228\022\030\000\000\000\000-\b\n\180\022l\000\000\000\000-(\n\180-v\n\180\000\000.\004\n\180\000\000\000\000\022\250\000\000\000\000.\152\n\180\023,\000\000\000\000.\200\n\180\023\\\000\000\000\000.\232\n\180\000\000/\000\n\180\000\000;\138\000\000\000\000\n\180\000\000\000\000\023\142\000\000\000\000\023\192\000\000\000\000\011D\000\000\000\000\024\028\000\000\024$\000\000\000\000\000\000\007\148\011\226\000\0007\022\n<\002\164\025\004\000\0007r\000\000\000\000\000\0007\194\000\000\000\000\025$\000\000\025\146\000\000\000\000\000\000\000\000/\n\000\000\000\000\000\000/f\n\1800r\n\180\000\000\n\252\025\156\000\000\000\000\025\236\000\0000T\000\000\000\0001N\000\000\000\000\000\000\026\134\000\000\000\000\000\000\000\000\026\144\000\000\000\000\000\000\000\000\012\152\000\000\000\000\000\000\003\154\000\000\000<\000\000\000;\000\000\0128\000\000\004\144\000\000\000\000\000\000\000\000\000\000\000\000\0032\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\180\000\000\012\164\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\184\007\232\002\182\027T\000\000\011\166\t\224\012*\001\144\t\136\002\182\r@\000\145\t\176\002\182\000\000\027x\000\000\004\142\000\000\011\194\t\238\004X\000\000\000\000\000\000\000\000\000\000\011\218\001.\000\146\000\000\000\000\000\000;\222\000\000C\240\000\000\t\246\000\000\n\016\000\000\000\000\000\000\000\000\002\158\000\000\000\000\000\000\011*\002\164\000\000\002\164\001\178\000\000\rv\002\164\002\164\n\024\000\000\027\186\000\000\000\000\n8\012\172\000\0000\180\005$\000\000\000\000\000\000\000\000\000\000\000\000\n\180\000\000\028\180\000\000\n\180\000\000\000\000\014\242\000\000\000\145\000\000\016H\000\000\000\145\000\000\017\012\000\145\000\000\003Z\000\000\n<\n\022\005`\000\000\011\226\011\234\nV\012\024\012\164\017T\000\145\006\012\000\000\nZ\012\134\012\188\005\024\006\184\012\150\n\130\r\014\006\146\b\132\012\228\000\000\000\000\007\188\b\148\000\000\004\168\002\2426N\007\014\028\028\000\000\007X\003\178\012\158\n\154\011^\005\224\000\000\012\168\n\158\006\200\000\000@\172\006F\rZ\r\132\000\000\t:\000\000\012\244\n\166\006>\r2\003V\000\000\000\000\000\000\000\000\n\216\tZ\000\000\n\222\tl\000\000\bb\0164\rF\rP\n\228\006\216\t\172\000\000\n\230\007\138\n\018\000\000\rR\n\238\r\220\000\000\t\028\000\000\n\132\000\000\r\252\000\000\018\024\000\145\r\216\011\002\014\022\000\000\018\202\0056\r\236\000\000\000\000\003j\006\160\011$\000\000\019\228\000\145\011F\000\000\004\022\000\000\r\210\011\016\0212\006\154\000\000\r\222\011>\007\176\r2\r\230\r\240\011L\015F\000\000\014\000\001\200\000\000\000\000\000\000\000\000\000\171\011X\r\226@\190\006F\000\000\002\200\011\142\014\148\000\000\000\000\000\000\000\000\000\000\000\000A\000\006\164\000\000\011\182\014\246\000\000\000\000\000\000\000\000\000\000\000\000\006\174\000\000A\030\006F\011\226\000\000\006F\011\218\000\184\000\000\011\230\011\232\007\024\000\000\001\004\004L\000\000\002\190\000\000A\"\006F\006F\000\000\000\000\007\b\000\000\b\252\000\000\001\186\007\b\007\b\000\000\011\236;\204\006FA\152\006F\012\b\000\000\000\000\000\000\000\000\012\014\000\000\000\000\007N\000\000\007l\014`\011\240\015p\014*\000\000\000\000\001\196\b|\014h\000\000\000\000\011\250\015\128\014@\000\000\000\000\029\018\000\000\012\222\000\000!(6H\006F\000\000,N\018\132\000\000A\252\000\000\000\000\000\000\007\b\000\000\000\000\012:\014|\012\000\015\144\014J\000\000\000\000B\014\012\144\014\140\000\000\000\000\000\000<:\000\000\000\000\000\000\000\000\000\000\000\000\012\146\000\000\014\152\012\020\006\162\000\000\015\134\015>\012\180\014\166\000\000\000\000\014\170\012>\b*\000\000\000\000\tl6\150\005|\000\000\000\000\000\000\bL\014p\012p\000\000\014z\bL\000\000\015V\012\188\014\196\000\000\000\000\000\000\006F\003v\004(\005\180\000\000\000\000\000\000\000\000\014\138\012t\000\000\006\128\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006F\014z\012\128\015\208\014\138\000\0007\224\000\237\012\146\014^\003\156\000\019\012\150\015\016\000\000\015\200\028\130\000\000\000\000\029J\000\000\012\208\000\000\nL\000\000\000\000\000\000\000\000\000\000\000\000B\018\006F\000\000\015\204\029l\000\000\000\000\030\002\000\000\000\245\012\156\015r\000\000\000\0007\250:\020\015(\000\000B0\006F\0302\000\000\000\000\030T\000\000\000\000\r0\000\000\000\\\000\000\000\000\000\000\000\000\000\000\000\000:\204\000\000\000\0008\188:\208\015*\000\000BP\006F\030\234\000\000\000\000\031\028\000\000\000\000\012\184\031<\r<\000\000\012\190\012\198\002\016\002\208\012\200\t&\012\214\015|0\214\r\\\000\000\r\016\r2\tf\000\000\004*\002k\000\200\004\219\002X\006\022\006%\001%\006\024\006\213\001W\001F\002Y\003\217\006\237\004\220\006+\006\025\006&\004\221\006\131\003\137\002\246\002\247\001%\002g\006e\001\147\001e\001\019\003\253\006,\001\016\0009\001.\001\023\001\016\001H\001\023\001$\006\031\001\016\001\023\001\026\000\128\006!\006\026\001\023\001\026\006\238\006Z\003\254\000\200\001\127\001)\006#\001\016\000\203\002l\000\203\002r\006\166\001\023\001$\001n\003\220\002x\000\200\001\132\002n\001\016\006$\000\147\000\135\006q\001\215\001\023\001$\000\196\001\238\006\027\000\200\000\201\006\021\002i\002\020\002\021\001e\006\028\002z\001%\006\167\003\140\003\145\004\219\002\024\004\000\002k\000\200\004\219\002X\006\022\006%\000=\006\024\000\174\004\220\001`\002Y\005\210\004\226\004\220\006+\006\025\006&\004\252\006y\004\003\003\181\001e\000\134\002g\000\196\001\129\000\186\000\200\000\201\006,\001%\006i\006j\001\130\002\001\001\132\001l\000\203\006\031\005\212\006k\006l\003\234\006!\006\026\002\244\001e\000\147\006-\000\181\001\215\006m\004\b\006#\005\213\001\016\002l\001.\002r\005\215\006\214\001\023\001$\005\238\002x\000\179\001\132\002n\001\016\006$\000\189\002\020\002\021\001e\001\023\001\026\000\196\000\151\006\027\000\200\000\201\006\021\002i\002\020\002\021\001e\006\028\002z\004\236\003\248\003\247\003\249\000\150\002\024\003\165\002k\000\200\002\251\002X\006\022\006%\003\174\006\024\000\202\000\183\005F\002Y\005\210\001\016\000\172\006+\006\025\006&\004\239\001\023\001$\002\001\001\217\000\178\002g\000\200\006i\006j\002\251\003\175\006,\001\031\000\203\004\241\001+\006k\006l\000\203\000\196\006\031\005\212\000\200\001\002\004\215\006!\006\026\006m\004\b\004c\006)\001\003\000\200\002\002\004\242\006#\005\213\004\147\002l\001\"\002r\005\215\007\005\002\021\001e\005\231\002x\001\219\001\132\002n\004'\006$\002\023\001\023\001\031\001\006\001\031\001 \004c\001 \006\027\000\200\0012\003\178\002i\002k\000\200\001\002\006\028\002z\006\021\001\223\002\020\002\021\001e\002\024\006\180\002k\000\200\005\251\005F\001\"\0013\001\"\007\b\007\t\004\213\002X\007\011\001O\004\149\006\024\006+\005M\005N\002Y\004f\001\222\001\132\003\168\006\025\007\r\000\194\001\023\0007\005\254\006\167\006,\002g\005^\003\173\001\016\0007\005W\004\b\002\002\006\031\001\023\001$\001\224\006\000\006!\002l\004\150\001*\006c\001*\001\132\000\184\006\026\002m\006#\001\132\002n\002l\000\196\002r\000\196\000\200\000\201\000\200\000\201\002x\0018\001\132\002n\006\001\006$\007\006\006\206\002k\000\200\006\179\001\016\000\188\001\016\002\020\002\021\001e\001\023\001$\001\023\001$\006\027\000\203\002z\005\210\002i\000\193\001%\006\021\006\028\002\020\002\021\001e\007\028\004\149\002\251\002\024\006G\002k\000\200\005M\005N\003\221\007\020\000\196\002X\007\021\000\200\001\002\006\024\007\016\000\204\005\212\002Y\001.\000\211\005V\001\246\006\025\007\029\005W\004\b\001>\002\251\001>\006?\002g\005\213\006,\001%\002\251\001%\005\215\004\218\005\205\001F\005\222\006\031\001\246\002\251\003\168\006\207\006!\001\250\003\230\004\b\002\003\006\026\000\147\000\200\001\202\001\215\006#\006\221\003\220\002l\001.\002r\001.\001H\002\251\001H\002\253\002x\002\005\001\132\002n\002\003\006$\002\023\000\200\0049\006\208\000\203\006\168\006\169\000\224\006\215\001\023\002\001\002\024\006\027\002k\000\200\004c\002i\002z\000\200\000\228\006\028\002\252\001d\001e\002~\005W\004\b\002\024\004\014\002k\000\200\006\021\004F\002\020\002\021\001e\002\004\004\138\004c\004\019\007!\000\200\001f\002\192\003\234\001h\001i\006\216\002X\006\022\0063\001\198\006\024\001\239\003\220\002\251\002Y\002\004\004+\006,\001\230\006\025\006&\000\212\001\234\005\245\001\023\000\225\006\031\002g\002l\006\217\003\234\006!\002\001\004(\001\031\002\251\002m\001 \001\132\002n\006\222\006#\001\132\000\234\002l\000\241\002r\006\218\006\026\005?\003\247\003\249\002x\000\249\001\132\002n\000\147\006$\0050\001\215\001\229\001\"\001\235\006o\001Y\001\132\001\031\000\196\001\n\001 \000\200\000\201\004U\001e\001m\002z\001\236\005S\003\247\003\249\004Q\002\002\006\027\000\203\001\r\001n\002i\000\203\000\200\001\030\006\028\001;\006\021\001\"\002\020\002\021\001e\002\024\005\210\002k\000\200\006\002\0044\004\198\001*\000\203\002\251\007\020\000\236\002X\007\021\002\251\000\196\006\024\006+\000\200\001\002\002Y\004\201\002\193\000\242\002\251\006\025\007\024\001\164\006v\005\212\005\254\005\217\006,\002g\000\196\003\234\001\016\000\200\000\201\001*\000\245\006\031\001\023\001$\005\213\006\000\006!\001\129\002\002\005\215\001B\001\006\004>\005\219\006\026\001\157\006#\001\132\001l\002l\004\143\002r\006\144\000\200\002\251\005\210\0007\002x\001\016\001\132\002n\006\001\006$\000\203\001\023\001$\004\155\001d\001e\004`\004\b\004\188\005[\003\247\003\249\000\203\001\246\001-\006\027\004r\002z\004:\002i\005\212\001%\001\023\006\028\001f\001v\001G\001h\001i\000\203\002\024\003\220\002k\000\200\006\021\005\213\002\020\002\021\001e\001\247\005\215\002\251\002\003\007\027\005\216\000\200\001>\004\210\001.\001\246\000\200\002X\006\022\001%\001\016\006\024\000\250\004\203\004\228\002Y\001\023\001$\006,\001V\006\025\006/\006\176\001w\001\229\001x\002\199\006\031\002g\001G\001E\002!\006!\001\159\002\003\001\\\001.\000\200\000\147\001H\005:\001\215\006#\001\156\001\016\002l\004\243\002r\000m\006\026\001\023\001$\001C\002x\001\127\001\132\002n\002\004\006$\000\196\005#\004v\000\200\001\002\004\245\001n\001t\001\023\000\200\001]\001\031\004\239\001\031\001 \000\203\001 \002z\003\b\001\246\004\222\000\200\001\002\001~\006\027\004C\001\031\004\241\002i\005$\005d\005%\006\028\000\203\002\004\001\163\001\203\001\175\001\"\002\024\001\"\002k\000\200\001d\001e\003\204\003@\004\242\002\003\000\200\001\002\000\200\001\016\006@\003\025\000\203\0062\005F\001\023\001\026\005&\004L\001\016\001f\002\192\001\129\001h\001i\001\023\001$\004\222\006,\000\203\001\130\002\251\001\132\001l\003\220\002\251\005\254\006\031\001*\003Q\001*\001u\006!\002\251\002\251\004\159\004\b\001\198\003\234\001\199\005'\006\000\006#\001\186\006\157\002l\001\230\002r\001\180\005(\001\234\005)\001\023\002x\002\004\001\132\002n\001\016\006$\001\016\002\020\002\021\001e\001\023\001$\001\023\001$\006\001\0007\006\143\002\251\001\031\001\016\004\016\005e\002X\002z\001\188\001\023\001$\004\t\006\133\003\202\002Y\001m\006\152\003\247\003\249\004\253\006Q\001\235\001\031\004?\000\203\001 \001n\002g\005+\000\200\001\185\004D\006z\005-\0057\001\236\000\203\005M\005N\001>\001\195\001>\001\031\005a\005C\004\b\001%\002\251\001%\001\"\005f\002\015\005O\005_\002\020\002\021\001e\005W\004\b\005b\003r\001%\006g\002\251\004\224\001\191\005F\000\200\006\187\002X\000\203\006h\002\251\001.\002\018\001.\001H\002Y\001H\003u\000m\004~\002 \003\147\004\222\001\129\002i\001\023\006\131\001\237\002g\001\031\001*\001\157\001 \001\132\001l\002\024\001\208\002k\000\200\001\016\000\203\002/\002\251\001\246\005I\001\023\001$\002\020\002\021\001e\0022\000\203\004\\\001\210\0028\005\200\001\"\002M\000\200\001\016\005\130\002R\002X\001\246\001\031\001\023\001$\002o\004h\003\212\002Y\001G\002\003\005F\000\203\000\200\006\229\004k\001\226\001\016\001\233\000m\000\203\002g\003\195\001\023\001$\002i\001\031\003\216\003\191\001 \002\003\002\251\002l\000\200\002r\001%\002\024\001*\002k\000\200\002x\000\203\001\132\002n\005M\005N\005\192\004s\001>\002\170\000\203\006\159\001\246\001\"\000\203\001%\003\203\000\203\006\231\005O\005_\000\203\001&\002z\005W\004\b\001\016\002\014\002o\002\004\005F\005\224\001\023\001$\000\200\001%\003\209\001\198\004*\001\228\002i\002\003\001.\003\224\000\200\001H\001\230\003\241\002\251\002\004\001\234\002\024\001\023\002k\000\200\002l\001*\002r\004w\005\134\003\243\001\016\0010\002x\004\005\001\132\002n\001\023\001$\001\031\006\173\000\203\001 \005M\005N\006a\004\b\001>\000\203\002\017\004\n\001\031\004)\002o\001%\001\016\002z\002\031\005O\005_\001\235\001\023\001$\005W\004\b\004/\001\"\0046\000\203\002.\002\004\002\020\002\021\001e\001\236\000\203\0021\0027\002C\000\203\002l\001.\002r\005F\001H\004\127\002X\004<\002x\001%\001\132\002n\000\203\002@\002Y\001\198\000\203\001\254\002\251\004O\006V\004T\005M\005N\001\230\004_\001>\002g\001\234\001*\001\023\002z\000\203\001%\000\203\002\251\003o\005O\005_\002\020\002\021\001e\005W\004\b\002\020\002\021\001e\000\203\000\196\000\203\004g\000\200\000\201\004j\002X\002H\004q\004u\001\016\002X\001.\004z\002Y\001H\001\023\001$\001\246\002Y\001\235\000\203\001\016\004\134\006D\004\021\002G\002g\001\023\001$\004\153\005\210\002g\000\203\001\236\000\203\002L\004\144\002i\000\203\002\020\002\021\001e\002Q\004P\002\254\002w\002\003\002\174\002\024\000\200\002k\000\200\004\158\004\148\002X\002\209\005M\005N\005\212\004\163\001>\002\216\002Y\000\203\002\251\004\173\000\203\001%\004\015\000\203\000\203\006\155\006\156\005\213\000\203\002g\005W\004\b\005\215\001%\002o\002\245\005\226\002\251\000\203\002i\002\251\002\020\002\021\001e\002i\000\203\004\179\001\246\001.\003d\002\024\001H\002k\000\200\003l\002\024\002X\002k\000\200\002\004\003\252\002l\002\251\002r\002Y\001\198\004\190\002$\000\203\002x\003\201\001\132\002n\006K\001\230\000\203\002\003\002g\001\234\000\200\001\023\000\203\002o\003\161\004\205\004\202\003\171\002o\002i\003\193\004\223\004\209\002z\004\230\001\031\004\247\003\208\005\b\003\210\002\024\005\001\002k\000\200\005\026\004\235\002\251\002\251\004\240\000\203\002l\003\223\003\014\004\004\005/\002l\004\012\002r\002x\001\235\001\132\002n\001\"\002x\002\251\001\132\002n\0045\002\251\000\203\005\024\004.\002o\001\236\006\021\0059\002\004\002i\002\251\0040\0043\002z\002\020\002\021\001e\004B\002z\000\203\002\024\007\020\002k\000\200\007\021\000\203\000\203\006\024\000\203\002X\000\203\002l\005E\002r\005Y\000\203\006\025\002Y\000\203\002x\005i\001\132\002n\001\031\0048\005 \005,\003\198\000\203\005o\002g\005s\002o\004A\005\143\002\020\002\021\001e\002\251\002\020\002\021\001e\002z\0054\002\251\006\026\001\016\005K\005\183\000\203\002X\005\243\001\023\001$\002X\005\188\005\227\005|\002Y\002l\002\251\002r\002Y\005\193\003\184\004=\002\251\002x\003\136\001\132\002n\002g\004@\004N\000\203\002g\000\203\000\196\004S\006\027\000\200\000\201\000\203\002\020\002\021\001e\001\198\006\028\003\214\002i\002z\000\203\005\223\000\203\004[\001\230\000\203\002\251\002X\001\234\002\024\001\023\002k\000\200\001%\005\159\002Y\007\023\005\210\005\199\000\203\005\185\003\131\000\203\002\251\004Z\004^\000\203\000\203\002g\005\207\005\248\001\016\006\r\006J\000\203\006\030\005\196\001\023\001$\002i\001.\002o\005\230\002i\006\031\005\212\004i\002\251\001\235\006!\002\024\002\251\002k\000\200\002\024\002\251\002k\000\200\002\251\006#\005\213\002\251\001\236\000\203\002\251\005\215\004t\006d\002l\005\244\003\014\004p\004y\005\242\002\251\006$\002x\004\141\001\132\002n\000\203\006p\002o\006~\001d\001e\002o\002i\002\251\001%\005\246\000\203\000\203\004\129\000\203\000\203\006\128\002\251\002\024\002z\002k\000\200\004\140\002\251\001f\001v\004\135\001h\001i\002l\002\251\002r\004\139\002l\005\250\002r\004\002\002x\005\255\001\132\002n\002x\006\011\001\132\002n\006\018\002\251\003\127\006 \000\203\002o\006'\002\251\002\020\002\021\001e\004\152\002\020\002\021\001e\002z\0060\004\157\000\203\002z\000\203\005\000\001w\002X\001x\0024\004\162\002X\004\165\004\169\006u\002Y\002l\000\203\002r\002Y\004\177\003x\004\184\006\161\002x\003i\001\132\002n\002g\006\175\004\195\004\255\002g\004\248\004\249\004\254\007\014\001\127\002\020\002\021\001e\005\002\002\020\002\021\001e\005\003\005\"\002z\001n\005\027\005\028\000\200\007\025\002X\005!\0056\0052\002X\007\030\003\130\0053\002Y\0055\005`\005D\002Y\000\196\003a\005H\000\200\000\201\001\198\005J\004\029\002g\003Y\005L\005X\002g\005h\001\230\005j\005k\005p\001\234\005t\001\023\002i\001d\001e\005x\002i\005\138\005\145\005\149\005\173\005\194\005\210\002\024\005\218\002k\000\200\002\024\005\228\002k\000\200\006\020\001\129\001f\001g\006\014\001h\001i\006\015\006\019\001\130\006\"\001\132\001l\006I\006T\006_\006s\006t\001\235\005\212\006x\006\160\006\164\006\174\002o\006\178\005#\002i\002o\007\000\000\000\002i\001\236\000\000\005\213\002\020\002\021\001e\002\024\005\215\002k\000\200\002\024\006\007\002k\000\200\000\000\000\000\000\000\000\000\002X\002l\000\000\002r\005$\002l\005%\002r\002Y\002x\000\000\001\132\002n\002x\002d\001\132\002n\000\000\000\000\000\000\002o\002g\000\000\000\000\002o\000\000\001m\002\020\002\021\001e\000\000\000\000\002z\000\000\000\000\005&\002z\001n\000\000\000\000\000\200\000\000\002X\000\000\000\000\000\000\000\000\002l\000\000\002r\002Y\002l\000\000\003\014\000\000\002x\002q\001\132\002n\002x\000\000\001\132\002n\002g\000\000\000\000\000\000\000\000\005'\002\020\002\021\001e\000\000\000\000\002\020\002\021\001e\005(\002z\005)\002i\000\000\002z\000\000\002X\000\000\001\198\000\000\004!\002X\000\000\002\024\002Y\002k\000\200\001\230\001\129\002Y\002\128\001\234\000\000\001\023\005c\002\127\001\157\002g\001\132\001l\000\000\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\002i\002o\000\000\005+\000\000\000\000\000\000\000\000\005-\0057\000\000\002\024\002X\002k\000\200\000\000\000\000\001\235\005a\000\000\002Y\000\000\000\000\000\000\000\000\000\000\002\179\000\000\002l\000\000\002r\001\236\000\000\002g\005b\000\000\002x\000\000\001\132\002n\000\000\000\000\002i\002o\000\000\000\000\000\000\002i\000\000\000\000\002\020\002\021\001e\002\024\000\000\002k\000\200\000\000\002\024\002z\002k\000\200\001\198\000\000\004$\002X\000\000\000\000\000\000\000\000\002l\001\230\002r\002Y\000\000\001\234\000\000\001\023\002x\002\190\001\132\002n\000\000\000\000\000\000\002o\002g\000\000\000\000\000\000\002o\000\000\002i\000\000\000\000\002\020\002\021\001e\001\198\000\000\0042\002z\000\000\002\024\000\000\002k\000\200\001\230\000\000\000\000\002X\001\234\002l\001\023\002r\001\235\000\000\002l\002Y\002r\002x\000\000\001\132\002n\002\213\002x\000\000\001\132\002n\001\236\000\000\002g\002\020\002\021\001e\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\002i\000\000\000\000\002z\000\000\000\000\001\235\000\000\000\000\000\000\003T\002\024\000\000\002k\000\200\001\031\000\000\002l\005\015\002r\001\236\002\020\002\021\001e\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\000\000\003U\000\000\002X\000\000\000\000\002\020\002\021\001e\001\"\002o\002Y\002i\000\000\000\000\002z\000\000\002\220\001\198\000\000\004\131\002X\000\000\002\024\002g\002k\000\200\001\230\000\000\002Y\000\000\001\234\000\000\001\023\000\000\002\223\000\000\002l\000\000\002r\006\021\000\000\002g\000\000\000\000\002x\000\000\001\132\002n\002\023\002\020\002\021\001e\000\000\000\000\002o\000\000\000\000\006\022\000\000\002\024\006\024\002k\000\200\000\000\002X\000\000\000\000\002z\000\000\006\025\001\235\000\000\002Y\000\000\000\000\000\000\000\000\000\000\002\229\000\000\001\016\002l\002i\002r\001\236\002g\001\023\001$\000\000\002x\000\000\001\132\002n\002\024\003W\002k\000\200\000\000\006\026\000\000\002i\002\020\002\021\001e\000\000\000\000\001\198\000\000\004\137\000\000\000\000\002\024\002z\002k\000\200\001\230\002X\000\000\002l\001\234\000\000\001\023\000\000\000\000\002Y\002o\002m\000\000\001\132\002n\002\232\000\000\006\027\000\000\000\000\000\000\000\000\002g\001%\000\000\006\028\000\000\000\000\002o\002i\000\000\002\020\002\021\001e\000\000\000\000\000\000\002l\000\000\002r\002\024\000\000\002k\000\200\001\235\002x\002X\001\132\002n\006\029\001.\000\000\000\000\000\000\002Y\002l\000\000\002r\001\236\000\000\003\001\000\000\000\000\002x\006\030\001\132\002n\002g\002z\000\000\000\000\000\000\002o\006\031\000\000\002\020\002\021\001e\006!\000\000\000\000\002i\002\020\002\021\001e\000\000\002z\000\000\006#\000\000\002X\000\000\002\024\000\000\002k\000\200\000\000\002X\002Y\002l\000\000\002r\000\000\000\000\006$\002Y\000\000\002x\003\011\001\132\002n\002g\000\000\000\000\000\000\003\016\000\000\000\000\002g\000\000\002\020\002\021\001e\000\000\002o\000\000\002i\002\020\002\021\001e\002z\000\000\001\198\000\000\004\146\000\000\000\000\002\024\000\000\002k\000\200\001\230\002X\003T\000\000\001\234\000\000\001\023\000\000\000\000\002Y\002l\000\000\002r\000\000\000\000\000\000\000\000\000\000\002x\003\018\001\132\002n\002g\000\000\000\000\000\000\005\214\000\000\002o\002i\000\000\000\000\000\000\000\000\000\000\000\000\002i\002\020\002\021\001e\002\024\002z\002k\000\200\001\235\000\000\000\000\002\024\000\000\002k\000\200\000\000\002X\000\000\000\000\002l\000\000\002r\001\236\000\000\002Y\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\003\022\000\000\002o\002g\002\023\000\000\000\000\000\000\000\000\002o\000\000\002i\002\020\002\021\001e\002\024\002z\002k\000\200\002\020\002\021\001e\002\024\000\000\002k\000\200\000\000\002X\000\000\002l\000\000\003\014\000\000\000\000\002X\002Y\002l\002x\003\014\001\132\002n\000\000\002Y\000\000\002x\003\030\001\132\002n\002g\000\000\003W\000\000\003$\000\000\002o\002g\000\000\000\000\000\000\000\000\002z\000\000\002i\002\020\002\021\001e\000\000\002z\000\000\000\000\000\000\000\000\000\000\002\024\002l\002k\000\200\000\000\002X\000\000\000\000\002l\002m\003\014\001\132\002n\002Y\000\000\001\198\002x\004\154\001\132\002n\000\000\000\000\000\000\003*\001\230\000\000\002g\000\000\001\234\000\000\001\023\000\000\002o\000\000\002i\002\020\002\021\001e\000\000\002z\000\000\002i\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\002X\000\000\002\024\000\000\002k\000\200\000\000\000\000\002Y\002l\000\000\003\014\000\000\000\000\0032\000\000\000\000\002x\001\235\001\132\002n\002g\000\000\000\000\002\020\002\021\001e\002o\000\000\000\000\000\000\000\000\001\236\000\000\002o\002i\000\000\000\000\000\000\002X\002z\000\000\000\000\000\000\000\000\000\000\002\024\002Y\002k\000\200\000\000\000\000\000\000\0037\002l\000\000\003\014\000\000\000\000\000\000\002g\002l\002x\003\014\001\132\002n\000\000\000\000\000\000\002x\000\000\001\132\002n\001\198\000\000\006O\000\000\000\000\002o\000\000\002i\000\000\001\230\000\000\000\000\002z\001\234\000\000\001\023\000\000\000\000\002\024\002z\002k\000\200\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\003.\000\000\000\000\002X\000\000\000\000\002x\000\000\001\132\002n\000\000\002Y\002i\002\020\002\021\001e\002o\000\000\000\000\001\235\000\000\003C\000\000\002\024\002g\002k\000\200\000\000\002X\002z\000\000\000\000\000\000\001\236\000\000\000\000\002Y\002\020\002\021\001e\000\000\000\000\000\000\002l\000\000\002r\003H\000\000\000\000\002g\000\000\002x\002X\001\132\002n\002o\000\000\000\000\000\000\000\000\002Y\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\003M\000\000\000\000\002g\002z\000\000\000\000\002X\000\000\000\000\000\000\000\000\002l\002i\002r\002Y\000\000\002\020\002\021\001e\002x\000\000\001\132\002n\002\024\003\\\002k\000\200\002g\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\002i\000\000\002Y\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\002\024\003_\002k\000\200\002g\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\002i\002\020\002\021\001e\000\000\002\020\002\021\001e\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\002X\000\000\000\000\002o\002X\002l\000\000\003\014\002Y\002i\000\000\000\000\002Y\002x\003e\001\132\002n\000\000\003g\000\000\002\024\002g\002k\000\200\000\000\002g\000\000\002o\000\000\000\000\002l\000\000\003\014\000\000\002i\000\000\002z\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\002o\000\000\002l\000\000\003\014\000\000\000\000\000\000\000\000\002z\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002o\000\000\002l\002i\003\014\000\000\000\000\002i\002z\000\000\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\002\024\000\000\002k\000\200\000\000\000\000\002\020\002\021\001e\002l\000\000\003.\000\000\000\000\000\000\002z\000\000\002x\000\000\001\132\002n\002X\002\020\002\021\001e\000\000\000\000\000\000\002o\002Y\000\000\000\000\002o\000\000\000\000\003q\000\000\002X\000\000\000\000\002z\000\000\002g\000\000\000\000\002Y\000\000\000\000\002\020\002\021\001e\003z\000\000\000\000\000\000\002l\000\000\002r\002g\002l\000\000\002r\000\000\002x\000\000\001\132\002n\002x\000\000\001\132\002n\003\182\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\000\000\000\000\002\020\002\021\001e\000\000\002z\000\000\000\000\000\000\002z\000\000\002X\000\000\000\000\000\000\000\000\002X\000\000\000\000\002Y\002i\000\000\000\000\000\000\002Y\003}\000\000\000\000\000\000\000\000\003\139\002\024\002g\002k\000\200\000\000\002i\002g\000\000\000\000\000\000\002\020\002\021\001e\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\002\023\002o\002Y\000\000\000\000\000\000\000\000\000\000\003\142\000\000\000\000\002\024\000\000\002k\000\200\002g\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002i\002r\000\000\000\000\000\000\002i\000\000\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\002l\002\024\002r\002k\000\200\000\000\000\000\000\000\002x\000\000\001\132\002n\002\020\002\021\001e\002z\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\002l\002X\002o\000\000\002i\002z\002X\002o\002m\002Y\001\132\002n\000\000\000\000\002Y\002\024\000\000\002k\000\200\003\152\000\000\000\000\002g\000\000\003\157\000\000\000\000\002g\000\000\002l\000\000\002r\000\000\000\000\002l\000\000\002r\002x\000\000\001\132\002n\000\000\002x\000\000\001\132\002n\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002r\000\000\000\000\000\000\006\021\002i\002x\000\000\001\132\002n\002i\000\000\000\000\002\020\002\021\001e\002\024\000\000\002k\000\200\000\000\002\024\006\022\002k\000\200\006\024\000\000\000\000\002X\002z\000\000\002\020\002\021\001e\006\025\000\000\002Y\000\000\000\000\000\000\000\000\000\000\003\206\000\000\000\000\000\000\002X\000\000\002o\002g\000\000\000\000\000\000\002o\002Y\000\000\000\000\000\000\000\000\000\000\003\219\000\000\000\000\006\026\002\020\002\021\001e\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\003\014\000\000\002X\002l\000\000\003\014\002x\000\000\001\132\002n\002Y\002x\000\000\001\132\002n\000\000\004\007\000\000\000\000\000\000\006\027\000\000\000\000\002g\000\000\000\000\000\000\000\000\006\028\002z\000\000\002i\000\000\000\000\002z\000\000\002\020\002\021\001e\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\002i\000\000\002X\006(\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002\024\000\000\002k\000\200\000\000\004J\000\000\006\030\000\000\000\000\000\000\000\000\002g\000\000\002o\000\000\006\031\000\000\000\000\000\000\000\000\006!\002i\000\000\000\000\000\000\000\000\002\020\002\021\001e\000\000\006#\002o\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\002l\002X\002r\000\000\000\000\000\000\006$\000\000\002x\002Y\001\132\002n\001d\001e\000\000\005w\000\000\000\000\002l\000\000\002r\000\000\002g\000\000\002o\000\000\002x\000\000\001\132\002n\002i\002z\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\002z\000\000\002l\000\000\002r\000\000\004\023\000\000\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\001\031\000\000\000\000\005\012\000\000\000\000\000\000\002o\000\000\001w\000\000\001x\0024\000\000\000\000\002i\002z\000\000\000\000\000\000\002\020\002\021\001e\000\000\000\000\000\000\002\024\001\"\002k\000\200\000\000\000\000\000\000\000\000\002l\002X\002r\002\020\002\021\001e\001\127\000\000\002x\002Y\001\132\002n\000\000\000\000\000\000\005z\000\000\001n\002X\000\000\000\200\000\000\002g\000\000\002o\000\000\002Y\000\000\003\130\000\000\000\000\002z\005\137\000\000\000\000\000\000\005\014\000\000\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002r\000\000\000\000\000\000\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\005\017\000\000\000\000\000\000\001\129\000\000\002\020\002\021\001e\002i\002z\000\000\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\002\024\002X\002k\000\200\000\000\000\000\002i\000\000\000\000\002Y\002\020\002\021\001e\000\000\000\000\005\140\000\000\002\024\000\000\002k\000\200\000\000\002g\000\000\000\000\002X\000\000\002\020\002\021\001e\000\000\005\018\002o\002Y\000\000\000\000\000\000\000\000\000\000\005\153\000\000\001\031\002X\004\220\001 \005\023\002g\005\020\000\000\002o\002Y\000\000\000\000\000\000\000\000\000\000\005\156\000\000\001.\002l\000\000\002r\000\000\002g\000\000\000\000\000\000\002x\001\"\001\132\002n\000\000\000\000\000\000\000\000\000\000\002l\000\000\002r\000\000\000\000\002i\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\002z\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\002i\000\000\002z\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\002\024\002X\002k\000\200\000\000\000\000\002i\000\000\002o\002Y\000\000\002\020\002\021\001e\000\000\005\177\000\000\002\024\000\000\002k\000\200\000\000\002g\000\000\001\016\000\000\002X\002\020\002\021\001e\001\023\001$\002o\000\000\002Y\002l\000\000\002r\000\000\000\000\005\180\000\000\002X\002x\000\000\001\132\002n\002g\000\000\002o\002Y\000\000\000\000\000\000\000\000\000\000\005\184\000\000\000\000\002l\000\000\002r\000\000\002g\000\000\000\000\002z\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\001>\002l\000\000\002r\000\000\006\021\002i\001%\000\000\002x\000\000\001\132\002n\000\000\000\000\002z\000\000\002\024\000\000\002k\000\200\000\000\000\000\006\022\000\000\000\000\006\024\000\000\000\000\000\000\000\000\002i\002z\000\000\001.\006\025\000\000\001?\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\002i\000\000\002o\000\000\000\000\002\020\002\021\001e\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\006\026\000\000\000\000\002X\000\000\000\000\000\000\001d\001e\000\000\002o\002Y\002l\000\000\002r\000\000\000\000\006\191\000\000\000\000\002x\000\000\001\132\002n\002g\000\000\002o\001f\001v\000\000\001h\001i\000\000\000\000\006\027\000\000\000\000\002l\000\000\002r\000\000\000\000\006\028\002z\000\000\002x\000\000\001\132\002n\000\000\006Y\000\000\000\000\002l\000\000\002r\000\000\000\000\000\000\000\000\000\000\002x\000\000\001\132\002n\000\000\0061\000\000\002z\000\000\001w\000\000\001x\0024\000\000\000\000\000\000\002\020\002\021\001e\000\000\006\030\000\000\002i\002z\000\000\000\000\000\000\000\000\000\000\006\031\000\000\002X\000\000\002\024\006!\002k\000\200\000\000\000\000\002Y\001\127\002\020\002\021\001e\006#\006\193\000\000\000\000\000\000\000\000\000\000\001n\002g\000\000\000\200\000\000\002X\002\020\002\021\001e\006$\000\000\003\130\000\000\002Y\002o\000\000\001d\001e\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\002g\000\000\000\000\002Y\001\031\000\000\000\000\005\012\000\000\000\000\001f\001v\000\000\001h\001i\002l\002g\002r\000\000\000\000\001\166\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\001\"\000\000\001\129\002i\000\000\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\132\001l\002\024\002z\002k\000\200\000\000\000\000\000\000\000\000\001w\000\000\001x\001\153\000\000\000\000\002i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\005\014\002i\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\001\127\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\002o\001\016\002l\000\000\002r\000\000\000\000\001\023\005\017\000\000\002x\000\000\001\132\002n\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\004\024\000\000\000\000\000\000\002z\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\002l\000\000\004\020\001d\001e\000\000\000\000\000\000\002x\001\129\001\132\002n\000\000\000\000\000\000\002z\005\018\001\130\000\000\001\132\001l\001d\001e\001f\001v\000\000\001h\001i\004\220\000\000\005\022\002z\005\020\001\150\000\000\002\020\002\021\001e\000\000\000\000\000\000\001f\001v\001.\001h\001i\000\000\000\000\000\000\000\000\002X\001\155\000\000\001d\001e\000\000\000\000\000\000\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001w\000\000\001x\001\153\000\000\002g\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\002\020\002\021\001e\001w\000\000\001x\001\153\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\002X\001\127\000\000\000\000\000\000\000\000\000\000\000\000\002Y\000\000\000\000\000\000\001n\001f\001v\000\200\001h\001i\000\000\001\127\001w\002g\001x\0024\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\002i\000\000\000\000\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\001\127\000\000\002X\000\000\000\000\001w\000\000\001x\002<\000\000\002Y\001n\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\001\129\000\000\003~\002g\000\000\000\000\002o\000\000\001\130\002i\001\132\001l\000\000\000\000\000\000\000\000\001\127\000\000\001\129\000\000\002\024\000\000\002k\000\200\000\000\000\000\001\130\001n\001\132\001l\000\200\000\000\000\000\002l\000\000\003\190\000\000\000\000\000\000\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\000\000\001\129\000\000\002o\000\000\000\000\000\000\000\000\002?\001\130\000\000\001\132\001l\002i\000\000\002z\002\020\002\021\001e\000\000\000\000\002\020\002\021\001e\002\024\000\000\002k\000\200\000\000\000\000\002l\002X\003X\000\000\000\000\000\000\002X\001\129\002x\002Y\001\132\002n\000\000\000\000\002Y\001\130\000\000\001\132\001l\000\000\000\000\000\000\002g\000\000\000\000\000\000\002o\002g\000\000\000\000\000\000\002z\000\000\002\020\002\021\001e\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\000\000\000\000\000\000\002X\002l\000\000\002\255\002Y\000\000\000\000\000\000\002Y\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\002g\000\000\000\000\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002i\000\000\000\000\002z\000\000\002i\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\002o\000\000\000\000\002X\002i\002o\000\000\002Y\002i\000\000\000\000\002Y\000\000\000\000\000\000\002\024\000\000\002k\000\200\002\024\002g\002k\000\200\000\000\002g\000\000\000\000\002l\000\000\002t\000\000\000\000\002l\000\000\002v\002x\000\000\001\132\002n\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\002o\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002{\000\000\002l\002i\002\130\000\000\002x\002i\001\132\002n\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\002\024\000\000\002k\000\200\002\020\002\021\001e\000\000\002\020\002\021\001e\002z\000\000\000\000\000\000\002z\000\000\000\000\000\000\002X\002\020\002\021\001e\002X\000\000\000\000\000\000\002Y\002o\000\000\000\000\002Y\002o\000\000\000\000\002X\000\000\000\000\000\000\000\000\002g\000\000\000\000\002Y\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002g\002\132\000\000\002l\000\000\002\134\000\000\002x\000\000\001\132\002n\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\002z\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\002i\000\000\000\000\000\000\002i\000\000\000\000\002Y\000\000\000\000\000\000\002\024\000\000\002k\000\200\002\024\002i\002k\000\200\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\002\020\002\021\001e\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\002X\002o\000\000\000\000\002X\000\000\000\000\000\000\002Y\000\000\000\000\000\000\002Y\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002g\000\000\000\000\002l\002g\002\136\000\000\002l\000\000\002\138\000\000\002x\002i\001\132\002n\002x\000\000\001\132\002n\002l\000\000\002\140\000\000\002\024\000\000\002k\000\200\002x\000\000\001\132\002n\000\000\000\000\000\000\002z\000\000\000\000\000\000\002z\002\020\002\021\001e\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\002X\002o\000\000\000\000\002X\002i\000\000\000\000\002Y\002i\000\000\000\000\002Y\000\000\000\000\000\000\002\024\000\000\002k\000\200\002\024\002g\002k\000\200\000\000\002g\000\000\000\000\002l\000\000\002\142\002\020\002\021\001e\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\001\031\000\000\000\000\001 \002X\000\000\002o\000\000\000\000\000\000\002o\000\000\002Y\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002g\000\000\001\"\000\000\006\140\000\000\000\000\000\000\002l\000\000\002\144\000\000\002l\002i\002\146\000\000\002x\002i\001\132\002n\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\002\024\000\000\002k\000\200\000\000\000\000\000\000\002\020\002\021\001e\000\000\002z\002\020\002\021\001e\002z\000\000\001*\000\000\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\002X\002o\000\000\002Y\002i\002o\000\000\000\000\002Y\000\000\000\000\000\000\000\000\000\000\000\000\002\024\002g\002k\000\200\001\016\000\000\002g\000\000\000\000\000\000\001\023\001$\000\000\002l\000\000\002\148\000\000\002l\000\000\002\150\000\000\002x\000\000\001\132\002n\002x\000\000\001\132\002n\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\002z\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\001>\002X\000\000\000\000\002l\002i\002\152\001%\000\000\002Y\002i\006\147\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\000\000\002\024\002g\002k\000\200\000\000\002\020\002\021\001e\000\000\000\000\002\020\002\021\001e\001.\002z\000\000\001H\000\000\000\000\000\000\002X\000\000\000\000\000\000\000\000\002X\000\000\002o\002Y\000\000\000\000\000\000\002o\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002g\000\000\000\000\000\000\000\000\002g\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002\154\000\000\000\000\002l\002i\002\156\002x\000\000\001\132\002n\000\000\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002\020\002\021\001e\000\000\002z\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\002X\000\000\000\000\000\000\002i\000\000\000\000\002o\002Y\002i\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\002\024\002g\002k\000\200\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002\158\000\000\000\000\000\000\002X\000\000\002x\000\000\001\132\002n\000\000\002o\002Y\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002g\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\000\000\002\160\000\000\000\000\002l\002i\002\162\002x\000\000\001\132\002n\000\000\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\002z\000\000\000\000\000\000\000\000\002z\002X\000\000\000\000\000\000\002\171\001e\000\000\000\000\002Y\002i\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\024\002g\002k\000\200\002\225\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\002l\000\000\002\164\000\000\000\000\000\000\002\188\000\000\002x\000\000\001\132\002n\000\000\002o\002\191\001d\001e\001f\002\192\000\000\001h\001i\000\000\000\000\002\188\000\000\000\000\002\230\002\246\002\247\000\000\002z\002\191\000\000\000\000\001f\002\192\000\000\001h\001i\002l\002i\002\166\002\020\002\021\001e\000\000\000\000\002x\000\000\001\132\002n\002\024\000\000\002k\000\200\000\000\006\021\002X\001\127\000\000\000\000\000\000\000\000\000\000\000\000\002Y\000\000\000\000\000\000\001n\002z\007\020\000\200\000\000\007\021\000\000\000\000\006\024\002g\000\000\000\000\000\000\000\000\002o\000\000\000\000\006\025\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\002\250\000\000\000\200\000\000\000\000\000\000\001m\000\000\002l\000\000\002\168\000\000\000\000\006\026\000\000\000\000\002x\001n\001\132\002n\000\200\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\002\020\002\021\001e\000\000\002\193\001\130\002i\001\132\001l\000\000\002z\001\031\000\000\000\000\005\012\002X\000\000\002\024\006\027\002k\000\200\000\000\002\193\002Y\002\195\000\000\006\028\000\000\000\000\001\129\000\000\000\000\000\000\002\020\002\021\001e\002g\001\157\001\"\001\132\001l\000\000\002\194\000\000\000\000\000\000\007\022\001\129\002X\002o\000\000\000\000\002\020\002\021\001e\001\157\002Y\001\132\001l\000\000\000\000\000\000\000\000\000\000\000\000\006\030\000\000\002X\000\000\002g\000\000\000\000\000\000\000\000\006\031\002Y\002l\000\000\003\005\006!\000\000\005\014\000\000\000\000\002x\000\000\001\132\002n\002g\006#\000\000\000\000\000\000\000\000\000\000\002i\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\000\000\006$\002\024\002z\002k\000\200\001\016\002X\002\020\002\021\001e\000\000\001\023\005\017\000\000\002Y\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002X\002i\000\000\000\000\000\000\002g\000\000\000\000\002Y\000\000\000\000\002o\002\024\000\000\002k\000\200\000\000\000\000\000\000\000\000\002i\002g\000\000\000\000\002\020\002\021\001e\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\000\000\000\000\000\000\002l\002X\003\"\005\018\000\000\000\000\002o\000\000\002x\002Y\001\132\002n\000\000\000\000\000\000\004\220\000\000\005\021\000\000\005\020\000\000\000\000\002g\000\000\000\000\002o\002i\000\000\000\000\000\000\001.\002z\000\000\002l\000\000\003(\000\000\002\024\005#\002k\000\200\002x\002i\001\132\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002\024\003-\002k\000\200\002\020\002\021\001e\002x\000\000\001\132\002n\002z\000\000\005$\006\199\005%\002o\000\000\000\000\002X\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002Y\002i\000\000\002z\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\002\024\002g\002k\000\200\002l\005&\0035\000\000\000\000\000\000\000\000\000\000\002x\000\000\001\132\002n\000\000\000\000\000\000\000\000\002l\000\000\003:\000\000\000\000\000\000\000\000\000\000\002x\000\000\001\132\002n\002o\000\000\000\000\002z\000\000\000\000\005'\002\020\002\021\001e\000\000\000\000\000\000\000\000\000\000\005(\000\000\005)\000\000\002z\000\000\000\000\002X\000\000\000\000\000\000\000\000\002l\002i\003<\002Y\002\020\002\021\001e\000\000\002x\000\000\001\132\002n\002\024\005e\002k\000\200\002g\000\000\000\000\002X\002\020\002\021\001e\000\000\000\000\001\031\000\000\002Y\001 \000\000\000\000\002z\002\020\002\021\001e\002X\005+\006\201\001d\001e\002g\005-\0057\002Y\002o\000\000\000\000\002X\000\000\000\000\000\000\005a\001\"\000\000\000\000\002Y\002g\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\005b\002g\000\000\000\000\002l\000\000\003?\000\000\002i\000\000\000\000\000\000\002x\000\000\001\132\002n\002\020\002\021\001e\002\024\000\000\002k\000\200\000\000\000\000\000\000\006\021\000\000\001*\000\000\000\000\002X\002i\000\000\001w\002z\001x\0024\000\000\002Y\000\000\007\020\000\000\002\024\007\021\002k\000\200\006\024\002i\000\000\000\000\002o\002g\000\000\000\000\000\000\006\025\001\016\000\000\002\024\002i\002k\000\200\001\023\001$\001\127\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\002o\001n\000\000\002l\000\200\003F\000\000\000\000\000\000\000\000\006\026\002x\003\129\001\132\002n\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002l\002o\003K\000\000\000\000\000\000\006\139\002z\002x\002i\001\132\002n\000\000\001%\000\000\000\000\002l\006\027\003P\000\000\002\024\000\000\002k\000\200\002x\006\028\001\132\002n\002l\000\000\003S\002z\000\000\001\129\002\171\001e\002x\000\000\001\132\002n\001.\001\130\000\000\001\132\001l\007\026\000\000\002z\002\020\002\021\001e\000\000\002o\000\000\002\225\001v\000\000\001h\001i\002z\000\000\000\000\000\000\002X\006\030\000\000\000\000\000\000\000\000\000\000\000\000\002Y\000\000\006\031\000\000\000\000\000\000\000\000\006!\002l\000\000\003\133\002\171\001e\002g\000\000\000\000\002x\006#\001\132\002n\000\000\000\000\000\000\000\000\000\000\002\230\002\246\002\247\002\171\001e\000\000\002\225\001v\006$\001h\001i\000\000\000\000\000\000\002z\002\171\001e\000\000\000\000\000\000\000\000\001d\001e\002\225\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\001\127\000\000\000\000\002\225\001v\000\000\001h\001i\000\000\001f\001v\001n\001h\001i\000\200\002i\002\230\002\246\002\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\024\000\000\002k\000\200\002\020\002\021\001e\002\230\002\246\002\247\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\144\002\230\002\246\002\247\001\127\000\000\000\000\000\000\001w\002\022\001x\006\245\000\000\006\247\002o\001n\000\000\000\000\000\200\000\000\000\000\001\127\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\001n\001\127\001\130\000\200\001\132\001l\000\000\001\127\000\000\002l\000\000\003\135\001n\000\000\000\000\000\200\004\r\002x\001n\001\132\002n\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\005\195\001d\001e\000\000\000\000\000\000\000\000\002z\000\000\001\129\000\000\000\000\005\229\000\000\000\000\000\000\002\023\001\130\000\000\001\132\001l\001f\001v\000\000\001h\001i\001\129\002\024\000\000\002k\000\200\000\000\000\000\000\000\001\130\000\000\001\132\001l\001\129\000\000\000\000\000\000\000\000\000\000\001\129\000\000\001\130\001\031\001\132\001l\001 \000\000\001\130\0012\001\132\001l\001\031\000\000\000\000\001 \000\000\000\000\0012\000\000\001w\000\000\001x\006:\000\000\000\000\000\000\000\000\000\000\0013\001\"\000\000\000\000\000\000\000\000\000\000\0014\000\000\0013\001\"\001d\001e\002l\000\000\000\000\001M\000\000\001d\001e\000\000\002m\001\127\001\132\002n\000\000\000\000\000\000\000\000\000\000\000\000\001f\001v\001n\001h\001i\000\200\000\000\001f\001v\000\000\001h\001i\000\000\001*\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0018\000\000\000\000\000\000\001f\001v\000\000\001h\001i\0018\000\000\000\000\001\016\001w\000\000\001x\001\158\000\000\001\023\001$\001w\001\016\001x\001\136\000\000\000\000\000\000\001\023\001$\000\000\000\000\001\129\000\000\001d\001e\000\000\000\000\000\000\000\000\001\130\000\000\001\132\001l\000\000\001\127\000\000\000\000\001w\000\000\001x\001\133\001\127\000\000\001f\001v\001n\001h\001i\000\200\000\000\000\000\000\000\001n\001>\000\000\000\200\000\000\000\000\000\000\000\000\001%\000\000\001>\000\000\001F\000\000\000\000\000\000\001\127\001%\000\000\001d\001e\001F\000\000\000\000\000\000\001d\001e\001n\000\000\000\000\000\200\000\000\000\000\000\000\001w\001.\001x\001z\001H\001f\001v\000\000\001h\001i\001.\001f\001v\001H\001h\001i\000\000\000\000\001\129\000\000\000\000\000\000\000\000\001d\001e\001\129\001\130\000\000\001\132\001l\000\000\001\127\000\000\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\000\000\001n\001f\001v\000\200\001h\001i\001w\000\000\001x\001}\001\129\000\000\001w\000\000\001x\001\128\000\000\000\000\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\001\127\001w\000\000\001x\001\131\001n\000\000\000\000\000\200\001f\001v\001n\001h\001i\000\200\000\000\001\129\000\000\000\000\000\000\000\000\001d\001e\000\000\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\001f\001v\001n\001h\001i\000\200\000\000\000\000\000\000\000\000\000\000\001w\000\000\001x\001\141\000\000\000\000\001f\001v\000\000\001h\001i\000\000\001\129\000\000\000\000\000\000\001d\001e\001\129\000\000\001\130\000\000\001\132\001l\000\000\002\221\001\130\000\000\001\132\001l\000\000\001\127\001w\002\224\001x\001\144\001f\002\192\000\000\001h\001i\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\001w\001\129\001x\002N\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\132\001l\000\000\001\127\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\001\127\000\000\000\000\000\000\000\000\001f\001v\000\000\001h\001i\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\000\000\001d\001e\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\001m\001\132\001l\000\000\000\000\000\000\001d\001e\000\000\001f\001v\001n\001h\001i\000\200\000\000\000\000\000\000\001w\000\000\001x\002\235\000\000\001\129\000\000\000\000\001f\001v\000\000\001h\001i\001\130\000\000\001\132\001l\000\000\000\000\000\000\001d\001e\001\129\000\000\000\000\000\000\000\000\002\193\000\000\000\000\001\130\001\127\001\132\001l\001w\000\000\001x\002\238\000\000\000\000\001f\001v\001n\001h\001i\000\200\000\000\002\020\002\021\001e\000\000\001w\001\129\001x\002\241\000\000\000\000\000\000\000\000\000\000\001\157\000\000\001\132\001l\000\000\001\127\000\000\001d\001e\000\000\002S\001\031\000\000\000\000\001 \000\000\001n\001I\000\000\000\200\000\000\000\000\001\127\001w\000\000\001x\002\249\001f\001v\000\000\001h\001i\000\000\001n\000\000\000\000\000\200\001K\001\"\000\000\000\000\001\129\000\000\004\213\000\000\000\000\000\000\000\000\000\000\001\130\001\031\001\132\001l\001 \001\127\000\000\001I\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\001w\000\000\001x\004H\000\000\001\129\001K\001\"\000\000\000\000\000\000\001*\002\023\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\000\000\001\129\002\024\000\000\002k\000\200\000\000\0018\000\000\001\130\001\127\001\132\001l\000\000\000\000\000\000\001d\001e\000\000\001\016\000\000\001n\000\000\000\000\000\200\001\023\001$\000\000\001\031\001*\000\000\001 \000\000\001\129\0012\000\000\001f\002\192\000\000\001h\001i\001\130\000\000\001\132\001l\000\000\0018\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0017\001\"\000\000\000\000\001\016\000\000\000\000\002l\001d\001e\001\023\001$\000\000\000\000\000\000\002m\001>\001\132\002n\000\000\000\000\000\000\000\000\001%\000\000\000\000\001\129\005\011\001f\002\192\000\000\001h\001i\000\000\001\130\000\000\001\132\001l\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\001d\001e\001.\000\000\000\000\001H\000\000\001>\001m\000\000\000\000\000\000\000\000\0018\001%\001d\001e\000\000\001F\001n\001f\002\192\000\200\001h\001i\001\016\000\000\000\000\001d\001e\000\000\001\023\001$\000\000\000\000\001f\002\192\000\000\001h\001i\000\000\001.\000\000\000\000\001H\005\157\000\000\000\000\001f\002\192\000\000\001h\001i\003r\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\003t\000\000\000\000\000\000\001>\000\000\001\129\000\000\000\000\000\000\000\000\001%\000\000\000\000\001\157\001F\001\132\001l\000\000\000\000\000\000\000\000\001m\000\000\000\000\000\000\000\000\003r\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\001m\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\003s\000\000\001n\000\000\001m\000\200\001\129\001d\001e\000\000\000\000\000\000\000\000\000\000\001\157\001n\001\132\001l\000\200\000\000\000\000\003r\000\000\000\000\005\181\000\000\000\000\001f\002\192\000\000\001h\001i\000\000\000\000\000\000\000\000\006\b\000\000\000\000\000\000\003w\000\000\000\000\000\000\001d\001e\001\129\000\000\000\000\002\193\000\000\000\000\000\000\000\000\001\157\000\000\001\132\001l\000\000\000\000\000\000\001\129\000\000\000\000\001f\002\192\000\000\001h\001i\001\157\000\000\001\132\001l\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\157\006\n\001\132\001l\001d\001e\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\000\000\000\000\001d\001e\000\000\001m\000\000\000\000\000\000\000\000\001f\002\192\000\000\001h\001i\000\000\001n\001f\002\192\000\200\001h\001i\001f\002\192\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\001m\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\193\000\000\005#\001n\000\000\000\000\000\200\000\000\000\000\000\000\001f\002\192\000\000\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\005$\006\181\005%\001\157\001m\001\132\001l\005\208\000\000\000\000\001\031\001m\000\000\001 \000\000\001n\001m\000\000\000\200\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\001n\000\000\000\000\000\200\005&\001\129\000\000\000\000\000\000\000\000\001\"\000\000\000\000\001\157\000\000\001\132\001l\000\000\000\000\000\000\004\198\000\000\005\208\000\000\000\000\000\000\005\221\001m\000\000\006\b\000\000\000\000\000\000\000\000\006\b\005\154\001\031\005'\001n\001 \000\000\000\200\000\000\000\000\000\000\000\000\005(\001\129\005)\000\000\000\000\000\000\000\000\001*\001\129\001\157\000\000\001\132\001l\001\129\000\000\000\000\001\157\001\"\001\132\001l\000\000\001\157\005\220\001\132\001l\005e\003v\003\237\000\000\001\031\006\t\001\031\001 \000\000\001 \006\017\001\016\000\000\000\000\000\000\000\000\006}\001\023\001$\000\000\000\000\000\000\000\000\005+\000\000\000\000\001\129\000\000\005-\0057\006\021\001\"\000\000\001\"\001\157\001*\001\132\001l\005a\000\000\000\000\004\198\000\000\004\198\000\000\007\020\000\000\000\000\007\021\000\000\000\000\006\024\000\000\000\000\005b\000\000\005\168\000\000\005\178\000\000\006\025\000\000\001>\000\000\001\016\000\000\000\000\000\000\000\000\001%\001\023\001$\000\000\004\203\001*\000\000\001*\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\026\000\000\002\020\002\021\001e\000\000\000\000\001.\001f\002\177\001H\001h\001i\000\000\001\016\000\000\001\016\000\000\000\000\000\000\001\023\001$\001\023\001$\001\031\003T\001>\001 \000\000\000\000\000\000\000\000\000\000\001%\006\027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006\028\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\001\"\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\001.\002\214\007\031\003\244\000\000\001>\000\000\001>\000\000\000\000\001\"\000\000\001%\000\000\001%\000\000\004\203\000\000\004\203\001\"\000\000\006\030\001m\000\000\000\000\000\000\000\000\000\000\005#\003\237\006\031\000\000\000\000\001n\001*\006!\000\200\002\023\000\000\001.\000\000\001.\001H\003\240\001H\006#\000\000\000\000\002\024\000\000\002k\000\200\000\000\001*\001\031\000\000\005$\001 \005%\000\000\000\000\006$\001*\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\001\016\003V\000\000\000\000\005\203\005&\001\023\001$\000\000\001\016\001\129\000\000\000\000\000\000\001\031\001\023\001$\001 \001\157\000\000\001\132\001l\000\000\000\000\000\000\002l\001\031\000\000\000\000\001 \000\000\000\000\001>\002m\000\000\001\132\002n\000\000\005'\001%\000\000\001\"\001*\002\185\000\000\000\000\000\000\005(\000\000\005)\000\000\001>\000\000\001\"\000\000\000\000\000\000\000\000\001%\000\000\001>\000\000\004\231\000\000\000\000\004\234\001.\001%\006\021\001H\000\000\001\016\005*\000\000\000\000\000\000\000\000\001\023\001$\000\000\001\031\000\000\000\000\001 \001*\001.\007\011\000\000\001H\006\024\001\031\000\000\006\225\001 \001.\005+\001*\003\244\006\025\000\000\005-\0057\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\005a\000\000\000\000\001\016\000\000\000\000\000\000\001\"\000\000\001\023\001$\001\031\001>\000\000\001 \001\016\005b\006\026\000\000\001%\000\000\001\023\001$\004\218\000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\001\"\000\000\001*\000\000\000\000\000\000\001\031\000\000\001.\001 \000\000\001H\001*\006\027\000\000\000\000\001>\000\000\001\"\000\000\000\000\006\028\000\000\001%\000\000\000\000\001<\004\231\001>\000\000\005\249\001\016\000\000\001\"\000\000\001%\000\000\001\023\001$\006\226\000\000\001\016\007\012\001*\000\000\000\000\000\000\001\023\001$\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\006\030\001*\001.\000\000\000\000\001H\000\000\001\031\000\000\006\031\001 \000\000\001\016\000\000\006!\000\000\001*\001\031\001\023\001$\001 \000\000\001>\000\000\006#\000\000\000\000\000\000\000\000\001%\001\016\000\000\001>\006\186\001\"\001\031\001\023\001$\001 \001%\006$\000\000\000\000\001X\001\"\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\002\020\002\021\001e\001.\000\000\000\000\001H\000\000\000\000\001\"\001>\000\000\000\000\001.\000\000\000\000\001H\001%\002\020\002\021\001e\001\174\000\000\002U\001*\002\020\002\021\001e\001>\000\000\000\000\000\000\000\000\000\000\001*\001%\000\000\000\000\000\000\000\000\000\000\002_\000\000\001>\001.\000\000\000\000\001H\002j\000\000\001%\000\000\001*\001\016\001\212\002\020\002\021\001e\000\000\001\023\001$\000\000\001.\001\016\000\000\001D\000\000\000\000\000\000\001\023\001$\000\000\001\031\000\000\000\000\001 \000\000\001.\002y\000\000\001H\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\001\031\000\000\000\000\001 \000\000\002\023\000\000\000\000\000\000\001\"\000\000\000\000\000\000\000\000\001>\000\000\002\024\000\000\002k\000\200\000\000\001%\000\000\002\023\001>\001\214\000\000\001\"\000\000\000\000\002\023\001%\000\000\000\000\002\024\002+\002k\000\200\000\000\000\000\000\000\002\024\001>\002k\000\200\000\000\000\000\000\000\001.\001%\000\000\001H\001*\002>\000\000\000\000\000\000\000\000\001.\000\000\002\023\001H\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\001*\002\024\000\000\002k\000\200\002l\001.\000\000\000\000\001H\000\000\001\016\000\000\002m\000\000\001\132\002n\001\023\001$\000\000\000\000\000\000\001\"\002l\000\000\000\000\000\000\000\000\000\000\001\016\002l\002m\000\000\001\132\002n\001\023\001$\000\000\002m\000\000\001\132\002n\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\002l\000\000\001>\001\031\000\000\001*\001 \000\000\002m\001%\001\132\002n\001\"\002\182\000\000\000\000\000\000\000\000\000\000\000\000\001>\001\"\000\000\002\020\002\021\001e\000\000\001%\000\000\000\000\001\"\002\187\000\000\000\000\001\016\000\000\001.\000\000\000\000\001H\001\023\001$\000\000\000\000\001\031\000\000\003\027\001 \000\000\000\000\000\000\000\000\000\000\001\031\001.\001*\001 \001H\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\000\000\001\016\001>\001\031\000\000\000\000\001 \001\023\001$\001%\001\016\000\000\000\000\002\204\000\000\000\000\001\023\001$\001\031\001\016\001\031\001 \000\000\001 \000\000\001\023\001$\000\000\000\000\000\000\001\"\001*\000\000\000\000\000\000\002\023\001.\000\000\000\000\001H\001*\000\000\000\000\000\000\000\000\001\"\002\024\001\"\002k\000\200\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\001\016\001>\000\000\002\211\000\000\000\000\001\023\001$\001%\001\016\001>\000\000\002\218\001*\000\000\001\023\001$\001%\000\000\001\031\000\000\002\227\001 \000\000\000\000\000\000\001.\000\000\001*\001H\001*\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\001\016\000\000\001.\002l\001\"\001H\001\023\001$\000\000\001>\000\000\002m\000\000\001\132\002n\001\016\001%\001\016\001>\000\000\004W\001\023\001$\001\023\001$\001%\000\000\001\031\000\000\004\175\005\012\000\000\000\000\000\000\000\000\000\000\001\031\000\000\001\031\005\012\000\000\001 \000\000\001.\000\000\000\000\001H\001*\000\000\000\000\000\000\001>\001.\001\031\001\"\001H\001 \000\000\001%\000\000\000\000\000\000\004\187\001\"\000\000\001\"\001>\000\000\001>\001\031\000\000\000\000\001 \001%\000\000\001%\001\016\004\200\000\000\004\217\001\"\000\000\001\023\001$\001\031\001.\001\031\001 \001H\005\012\000\000\000\000\000\000\000\000\000\000\000\000\001\"\005\014\000\000\000\000\001.\000\000\001.\001H\000\000\001H\005\014\000\000\001*\000\000\000\000\001\"\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\001\016\001>\000\000\000\000\000\000\000\000\001\023\005\017\001%\001\016\000\000\001\016\004\233\001*\000\000\001\023\005\017\001\023\001$\001\031\000\000\000\000\005\012\000\000\000\000\000\000\001\016\000\000\001*\000\000\005\014\000\000\001\023\001$\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\001\016\000\000\000\000\000\000\001\"\000\000\001\023\001$\000\000\001\031\000\000\000\000\001 \000\000\000\000\001\016\005\018\001\016\000\000\000\000\001>\001\023\001$\001\023\005\017\005\018\001\031\001%\004\220\001 \005\019\005\133\005\020\000\000\000\000\001>\001\"\004\220\000\000\005\031\000\000\005\020\001%\001.\000\000\000\000\005\151\005\014\000\000\000\000\000\000\001>\001.\001\"\001.\000\000\000\000\001H\001%\000\000\000\000\000\000\005\175\000\000\000\000\000\000\001>\000\000\001\031\001.\000\000\001 \001H\001%\000\000\005\018\001\016\006=\000\000\001*\000\000\000\000\001\023\005\017\000\000\001.\000\000\004\220\001H\005\235\000\000\005\020\000\000\000\000\000\000\001\"\001*\000\000\000\000\000\000\001.\001\031\001.\001H\001 \000\000\000\000\000\000\001\016\001\031\000\000\000\000\001 \000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\001\"\000\000\000\000\001\023\001$\000\000\005\018\000\000\001\"\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\220\000\000\006\005\000\000\005\020\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\000\000\001.\000\000\000\000\000\000\000\000\001%\001\016\000\000\000\000\006\146\001*\000\000\001\023\001$\000\000\001>\000\000\000\000\001*\000\000\000\000\000\000\001%\000\000\000\000\000\000\006\150\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001\016\000\000\001.\000\000\000\000\001H\001\023\001$\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\001.\000\000\000\000\001\207\000\000\000\000\001%\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\209\000\000\000\000\000\000\000\000\001.\000\000\000\000\003\239")) + ((16, "\000%\001k\000O\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\000\000\000\000\000\245\000\208\000&\001K\000\241\000!\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\195\000\000\000\000\000\000\000\000\000\000\000\187\000\000\000\000\000\000\000\155\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000=\192\000\000\000\000\000\000\000\139\000\000\000\000\000\000\000\000\000\000\000\000\000\000;(\0001\000&\000\217\000\000\000\234\002\132\000 \000\250\000\025\000\000\000\000\000\000\000|\000\000\000\000\002\132\000\000\000\000\000\000\000\000\001\234\000\000\000\238\000\000\000\000\000\000\000\000\000\000\000H\000\000\002\234\002$\b\"\000\000\000\000\n\226;(\000\000\000\000\000)\000\000\002P\000\000\031V\001\014\000\000\000\250\001~\000\000\000\000\000\254\001B\002\188\003\158\004\200\002$\002\000\000\139\002\188\001\200\001L\002p\011\160\000\000>(\001\222\003\234\000\161\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\132\000\000\t\022>(\011\208\000\000\000\000\002 \004\252\002\0141\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000#h\000\000\002F\005\012\002\210\000\000\000\000\000\000\000\000\0068\000\000\000\000\005\016\000#\005@\006d\b\006\000\000\002\144\003\000\005\146\001\128\002\224\005\226\001H\000\000\000\000\003$\006f\012\006\000\000\002\234\012\144#\242$&\000\000\000u\000\000\000\000\000\000\000\000\003\226>$\004J\000\000\007\020\004f\000\000!>7\016\000\129\000\000\000\213\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0001R\004\014\000\000\000\000\000\000\011\028\000\000\000\234\000\000\000\000\004\218\002(\000\000\000\000\007\158\000\000\015\224\000\000\004\218\000\254\004\218\000\000\000\000\000\000\000\000\000\0007$\000\000\006\188\0050\000\000\0216\007.\027V\000\000\000\000\000\000\004\218\000\000\000\000\000\000\000\000\004\158\000\000\000\000\000\000\000\000\000\0001\206\000\000\000\000\000\000\000\000\000\000\000\000\000@\005v\000\000\000\000\000\000\004\158\005\1542*\005\028\0074;\138\000\000\005T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\000\000\000\000\000\000\000\000\006\1362<\000\000\000\000\005\142\007\2302J\000\000\000\000\000\0003\000\005~32\000\000\005~\000\0003<\005~\000\0003\162#h\006j\006\178\000\000\000\000;\196\000\000\000\000\000\000\000\000\000\000\000\000\005~\000\000\000\0003\234\000\000\005~>\\\000\000\004\158\000\000\000\0004\160\000\000\005~\000>\000\000\000\000\005~\005~\000\000\000\000\005~\000\000\000\000$&\000\000\000\000\000\000\000\000\005~$\176\000\000\000\000\005~\000\000\001P\006\244\000\000\000\000\000\000\000\000\000\000\000\000\000\0007v\000\000\006\136\000\000>\134\004\158\000\000\000\000\000\000\000\000\006\200\007^\012\132\006\190\006\218\006\222\b\218\004\246\b\230\000\015\007\186\000\000\000\000\t \tl\tZ\000&\007R\n\198\000\000\004\200\004\174\003\254\000\222\b\198\000\000\000\000.\204\000\000DL\b\142\000\000>\192\004\158>\216\004\158\000\000\000\188\003>\000\000\012f\004\200\000\000\000\000\007\198\000\000\000\000\000\000\000\000\000\000\014\246\004\200\016^\004\200\000\000\002\230\000\000\000\000\003\148\000\000\000\000\000\000\t\024\000\000\000\000\000\000\004\200\000\000\000\000\004\200\000\000\007R\0060\000\000\000>\002\224\000\000\000>\000\000\000\000\0174\004\200\000\000\000\000\000\000\000\000\000\000\000\000\000>\012\206\rx\t\022\b\206\004\1404\170\000\000\b>\n\000\r\194\bz\n\002?\024?N\000\000\000\000\000\000\000\000\000\000\004\014\t\192\000\000\000\000\000\000\b\166\nD\006\198\000>\017\198\000\000\004\200\000\000\000\000\000\000\012\144\000\000?\170\004\158\r\204\b\190\np\014\022\b\228\nv\014<$l\005~\0154\t:\n\200:\024\n:\000\000$\144\005~?\180\004\158\n>\000\000\000\000\000\000\000\000#h\n&\000\0007\172\015<\t\186\n\2024\224\005~\015~\t\208\n\212?V\000\000?~\000\000\000\000\015\164\006.\007F\000\000\000\000\000\000\000\000@>\000\000\000\000\000\000\000\252\015\254\000\000\000\000\000\000\000\000%\n@\146\000\000\000\000\000\000\000\000\000\000\t\166\016n\000\000\t\208%`\t\208%\180\t\208\000\000@\208\000\000%\190\t\208\017\012\004T\017h\000\000\000\000&\"\t\208&~\t\208&\162\t\208'D\t\208'd\t\208'\150\t\208(0\t\208(b\t\208(\130\t\208(\252\t\208),\t\208)N\t\208)\248\t\208*\026\t\208*:\t\208*\220\t\208*\228\t\208+&\t\208+\200\t\208+\208\t\208\n\218\017t5j#h\n\176\000\000,\148;\246\000\000\018\006\000\000@\012\000\000\004\158\000\0007\246\002\160\004\218\026^\000\0008\000\000\000\000\000\000\0008D\000\000\000\000\026\244\000\000\027P\000\000\000\000\000\000\000\0000.\000\000\000\000\000\000/\170\t\2080n\t\208\000\000\n\026\027Z\000\000\000\000\027\180\000\0000\158\000\000\000\000?N\000\000\000\000\000\000\028\026\000\000\000\000\000\000\000\000\028J\000\000\000\000\000\000\000\000\011\204\000\000\000\000\000\0006\178\000\000\001\216\000\000\004F\000\000\011\150\000\000\002(\000\000\000\000\000\000\000\000\000\000\000\000\004\014\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t\208\000\000\012\006\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\n\224\006\250\000>\028\196\000\000\011\024\n\228\011\194\004\180\007\182\000>\017\208\004\200\007\214\000>\000\000\029\026\000\000\006~\000\000\011\142\n\240\006\184\000\000\000\000\000\000\000\000\000\000\011\188\000\025\001\178\000\000\000\000\000\000<\154\000\000D\174\000\000\011$\000\000\011(\000\000\000\000\000\000\000\000\006\014\000\000\000\000\000\000\004\150\004\218\000\000\004\218\000\016\000\000\006j\004\218\004\218\011J\000\000\029\132\000\000\000\000\011T\012\142\000\000\029\180\b,\000\000\000\000\000\000\000\000\000\000\000\000\t\208\000\000\030\028\000\000\t\208\000\000\000\000\018L\000\000\004\200\000\000\018~\000\000\004\200\000\000\019>\004\200\000\000\001\b\000\000\011V\bp\001\244\000\000\011\208\011\216\011p\012\n\012\164\019\214\004\200\b\158\000\000\011\128\012\132\012\148\007\012\b\178\012l\011\152\012\176\007r\b\202\012\128\000\000\000\000\007\146\b\248\000\000\004\252\003 6\224\005~\030\128\000\000\006\000\003j\012:\011\154\t\n\003\184\000\000\012D\011\182\b\152\000\000A\206\004\158\012\244\012\248\000\000\t$\000\000\012h\011\196\bn\012\198\006\248\000\000\000\000\000\000\000\000\011\214\tn\000\000\011\244\t\146\000\000\bH3>\012\206\012\236\012\b\004\248\t\178\000\000\012\"\005\238\t\206\000\000\012\242\r\b\0126\r2\012\164\022\144\004\200\000\000\012>\r\164\000\000\b\006\000\000\nX\000\000\r\186\000\000\022\192\005\026\r\142\012J\r\200\000\000\0248\005Z\r\156\000\000\000\000\004\\\003^\n\138\000\000\024d\004\200\n\156\000\000\005\208\000\000\rZ\012~\024\140\005\168\000\000\r\\\012\142\b\194\012\198\r^\rh\012\170\014\196\000\000\r\160\003N\000\000\000\000\000\000\000\000\007\136\012\174\rxA\226\004\158\000\000\000i\012\186\014<\000\000\000\000\000\000\000\000\000\000\000\000A\242\006\026\000\000\012\198\014\144\000\000\000\000\000\000\000\000\000\000\000\000\022\b\000\000B2\004\158\n\160\000\000\004\158\012\214\b\196\000\000\012\246\012\254\t\248\000\000\n\150\026~\000\000\006\n\000\000B\166\004\158\004\158\000\000\000\000\006@\000\000\n \000\000\n\208\006@\006@\000\000\r$\":\004\158B\204\004\158\011x\000\000\000\000\000\000\000\000\011\154\000\000\000\000\0072\000\000\b\190\014\004\r6\015\028\r\214\000\000\000\000\011\166\t\002\014<\000\000\000\000\rH\015Z\014\024\000\000\000\000\012\158\000\000\b\188\000\000\015\2065|\004\158\000\000*\246\n\000\000\0002\226\000\000\000\000\000\000\006@\000\000\000\000\011\156\014~\r^\015\150\014h\000\000\000\0004l\011\180\014\216\000\000\000\000\000\0009\194\000\000\000\000\000\000\000\000\000\000\000\000\000\000\011\222\000\000\014\244\r`\005\014\000\000\015\230\015\162\011\238\015\012\000\000\000\000\015 \rn\005\236\000\000\000\000\tp7\016\006\182\000\000\000\000\000\000\tb\014\238\rv\000\000\015\004\tb\000\000\015\222\012*\015N\000\000\000\000\000\000\004\158\000O\000\208\t\020\000\000\000\000\000\000\000\000\015\018\rx\000\000\tl\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\158\015\000\r\128\016\\\015\022\000\0008\180\000\165\r\130\014\234\003\214\0000\r\138\015\162\000\000\016R\030\178\000\000\000\000\031\026\000\000\012T\000\000\004\246\000\000\000\000\000\000\000\000\000\000\000\000B\230\004\158\000\000\016X\031J\000\000\000\000\031\178\000\000\000\248\r\194\016\004\000\000\000\0009\002:\234\015\186\000\000B\246\004\158 \026\000\000\000\000 L\000\000\000\000\012t\000\000\002\162\000\000\000\000\000\000\000\000\000\000\000\000:\252\000\000\000\0009j;\006\015\188\000\000C\n\004\158 \176\000\000\000\000 \228\000\000\000\000\r\204!\024\012\146\000\000\r\208\r\230\003\136\003\210\r\242\b\154\014\006\016\024!\218\012\250\000\000\0140\014D\n*\000\000\005*<\196\000\000\007\234\000\000\014T9N9\182\005t\015\000\005\224\000\000;Z<\146\000\000\002\154\000\000\000\000\002\154\000\000\000\000\002\154\nZ\000\000\011\002\002\154\0166\"^\r(\000\000\002\154\000\000\000\000C\030\000\000\000\000\000\000\002\154\000\000\000\000\r\180\000\000\012\254\005\184\r\212\000\000\014j<\192\r\232\000\000\000\000\000\000\000\000\014\018\000\000\000\000\006*\000\000\002\154C\178\000\000\014\184\002\1549\194\000\000\014&\015\152\014n\016\178\015h\000\000:\006\014>\015\164\000\000\000\000\000\000\014\148\006\190\000\000\000\000\000\000\000\000\000\000\000\000\t\166\014\212\000\000\015\190\000\000\000\000\000\000\000\000\014\236=D\000\000\000\000\000\000\000\000\t\166\000\000\000\000\015\030=j\000\000\000\000\000\000\000\000\000\000\000>\004\200\000\000\000\000\005~\000\000C\200\004\158\000\000\007\214\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015r\014\176\t\220\000>\000\000\024\240\000\000\004\200\000\000\016\186\000\000\000\000\000\000\000\000\000\000\"\130\000\000\000\000\000\000\000\000\000\000\000\000\016b\004\020\n4\014\238\007v\014\178\000\000\003\246\000\000\000\000\000\000\000\000\000\000\000\000\000\000\015\018\t\170\014\180\000\000\b\014\016\196\016|\015$\000\000\000\000\016t\004Z\004\\\000\000\000\000\000\000\014\186\000\000\014\200\002z\000\000\000\000\004\218\003\014\000\000\000\000\000\000\000\000\000\000\019\174\000\000\000\000\bd\bR\000\000\000\000D\000\004\158\004\158\000\000D\024\004\158\t\242\000\000\000\000\000\000\004\158\000\000\000\000\n\004\016\132\015d\000\000\000\000\016x\004\"\000R\000\000\000\000\000\000\000\000\011H\016\196\n\b\016\136\015l\000\000\000\000\016|\bR\003\b\000\000\000\000\000\000\000\000\004\200\000\000\n\178\000\000\000\000\000\000\"\252\000\000#,\000\000\000\000\000\000\000\000\000\000\000\226\000\000\000\000\000\000\007\016\000\151\000\000\000\000\000\000\000\000\000\000\000\020\000\151\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\t&\000\000\000\000\000\000=\164\000\000\004\158\000\000\n^\000\000\000\000\000\000\002\016\000\000\000\000\000\000\003T\000\000\000\000\000\000\000C\000\000\000\000\000\0000\184\005~\000\000\000\000\000|\000\000\000\000\000\000\000\000\004\014\004\194\015\188\004\150\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000'6\000\000\015\148\000\000\000\000\000\000\000\000\005\012\006\174\000\170\002L\000\000\000\000\015\174\003\238\000\000\000\000\000\000\015\206\005\144\000\000\000\000\000\000\000\000"), (16, "\006(\0007\002,\002-\001e\000q\001e\000;\001\031\003\007\001\216\006\156\000\147\006\203\006\189\001\233\001\031\002n\006)\006\214\001\240\006+\001\019\000?\001\244\002o\001\023\006\209\001\023\000@\006,\0069\006\232\005Y\000m\001\"\001\031\006(\002}\002,\002-\001e\0007\005\142\001k\000\196\004\005\000\196\000\200\000\201\000\200\000\201\001\159\001e\002n\006)\0068\007\004\006+\006-\000\147\002\012\002o\000\156\001\016\001\245\004\005\006,\0069\000\196\001\023\001\026\000\200\001\002\000\\\002}\005\229\006o\000`\001\246\002\014\001\003\007\012\002-\001e\007\005\000\147\001\214\000\157\001\233\000\203\004\254\000\203\006.\000d\001\240\006-\002\127\001T\001\244\006\207\001\023\006/\006(\000y\005\231\001\006\006I\001\016\0020\002\027\002\129\000\200\000\200\001\023\001$\001\016\005\001\007'\003\007\005\232\007(\001\023\001$\006+\005\234\006>\000\202\002\025\006\022\006.\0055\005\003\006,\002\127\001\027\001\016\005`\005a\006/\001\245\006?\001\023\001$\0007\001\031\0020\001W\002\129\000\200\007\014\0062\005\004\005q\006\216\001\031\0064\005j\004\019\0056\006\218\0057\006-\006>\000\128\0007\0066\001%\000\129\002\130\002\028\002\136\002\006\005\144\000:\001%\005Y\002\142\006?\001\139\002\132\004\b\0067\006\233\002,\002-\001e\006\185\0062\007\015\0058\002\129\000\200\0064\001.\001%\006.\001l\002\006\002n\002\144\004\011\004\t\0066\000\134\006/\002\130\002o\002\136\006(\003\007\002,\002-\001e\002\142\0009\001\139\002\132\006\186\0067\002}\001\251\004\014\0059\000\200\007*\002n\006)\0068\002\025\006+\000\203\005:\005;\002o\005<\000\203\002\144\000\196\006,\0069\000\200\001\002\002\026\0061\001\016\006(\002}\002,\002-\001e\001\023\001$\003\020\0062\001\016\000\200\001\002\005x\0064\005\177\001\023\001$\002n\006)\0068\000\132\006+\006-\0066\000\151\002o\006\142\005\179\000\135\001\221\006,\0069\0042\002\127\005`\005a\005>\006\220\002}\0067\003\178\005@\005J\002\014\003%\0020\000\150\002\129\000\200\000\196\005i\005t\000\200\001\002\005j\004\019\006.\000\183\001%\006-\002\127\001\182\000\172\006m\000\179\006/\006(\005u\001%\000\178\0041\000=\0020\002\027\002\129\000\200\000\200\002\133\001\031\000\184\003\184\007'\003\007\000\203\007(\001&\001\006\006+\003\245\006>\000\203\000\203\000\174\006.\0055\0010\006,\002\127\002\026\001\031\000\147\002\025\006/\000\152\006?\002\130\005\184\004#\000\188\0020\006\252\002\129\000\200\002\142\0062\001\139\002\132\000\196\001\031\0064\000\200\001\002\0056\006\200\0057\006-\006>\000\203\000\147\0066\006\132\001\233\002\130\002\028\002\136\000\153\002\144\004\000\004\002\004\004\002\142\006?\001\139\002\132\0007\0067\006\253\002,\002-\001e\0046\0062\001\023\0058\003\179\006\181\0064\000\196\001\016\006.\000\200\001\002\002n\002\144\001\023\001\026\0066\005\188\006/\002\130\002o\002\136\006(\001\031\002,\002-\001e\002\142\001\016\001\139\002\132\000\193\0067\002}\001\023\001$\0059\006\154\007)\002n\006)\0068\006\004\006+\003\179\005:\005;\002o\005<\001\016\002\144\000\147\006,\0069\000\152\001\023\001$\0061\006\149\006(\002}\002,\002-\001e\000\211\000\189\002\026\0062\001\016\002\014\003\007\005x\0064\006R\001\023\001$\002n\006)\0068\001(\006+\006-\0066\000\224\002o\006@\004\185\001%\000\228\006,\0069\000\147\002\127\000\181\001\233\005>\002\018\002}\0067\002\027\005@\005J\000\200\001\253\0020\001\016\002\129\000\200\001%\001\023\005t\001\023\001$\003K\006\150\006.\000\200\001\002\006-\002\127\0043\007\000\006<\001\016\006/\006(\005u\001%\000\203\001\023\001$\0020\006\152\002\129\000\200\006\150\002\133\001\236\006\199\000\147\007'\001\220\001\233\007(\003\192\001e\006+\001\240\006>\005\236\003\\\001\244\006.\001\023\003z\006,\002\127\007\001\003\007\002\028\000\200\006/\004\161\006?\002\130\000\200\004\031\000\186\0020\006\186\002\129\000\200\002\142\0062\001\139\002\132\000\241\002\025\0064\002\255\001e\003\180\001%\000\196\006-\006>\000\200\000\201\0066\003\007\002\000\002\130\001\245\002\136\000\249\002\144\001\023\006x\0007\002\142\006?\001\139\002\132\006\184\0067\001Y\002,\002-\001e\006\150\0062\007\024\002-\001e\005\229\0064\003\007\002\001\006.\001\031\000\196\002n\002\144\000\200\000\201\0066\004\\\006/\002\130\002o\002\136\006(\006\140\002,\002-\001e\002\142\006\014\001\139\002\132\003\007\0067\002}\005\231\006p\007\027\007\028\007-\002n\007\030\003\181\005\229\006+\001)\000\194\005\149\002o\006y\005\232\002\144\001\n\006,\007 \005\234\006\017\002\002\0061\006\001\006(\002}\002,\002-\001e\007/\001\r\000\147\0062\005C\001\233\006\019\005\231\0064\0007\007'\003\t\002n\007(\004\165\006z\006+\006-\0066\002\026\002o\003\007\005\232\001\030\006{\006,\0070\005\234\002\127\006|\006}\005\250\006\020\002}\0067\006\141\006\187\006\188\006~\006\127\0020\001`\002\129\000\200\000\203\007\025\001\016\002\129\000\200\006\128\004\019\006.\001\023\001$\006-\002\127\005j\004\019\000\204\003\228\006/\006(\003\007\002\014\006|\006}\006z\0020\004\167\002\129\000\200\001\016\002\133\006~\006\127\006{\007'\001\023\001$\007(\001\016\007#\006+\005\153\006\128\004\019\001\023\001$\006.\004\138\002\029\006,\002\127\002\027\003\007\004}\000\200\006/\002\148\006?\002\130\001\023\003\201\001;\0020\001%\002\129\000\200\002\142\0062\001\139\002\132\003\231\000\147\0064\005M\001\233\0074\000\212\000\196\006-\000\203\000\200\000\201\0066\001B\000\225\002\130\000\234\002\136\004\150\002\144\004\007\003\007\001G\002\142\006?\001\139\002\132\0007\0067\001\016\002,\002-\001e\001V\0062\001\023\001$\001\177\005\229\0064\000\236\002\028\006.\001\239\000\196\002n\002\144\000\200\000\201\0066\004\156\006/\002\130\002o\002\136\006(\006\b\002,\002-\001e\002\142\001\\\001\139\002\132\003\007\0067\002}\005\231\001\031\000\203\004Q\0072\002n\006)\006F\005\229\006+\000\203\003\007\000\203\002o\000\242\005\232\002\144\001\239\006,\0069\005\234\004\168\004\173\0061\005\241\006(\002}\002,\002-\001e\003\007\000\196\001\175\0062\000\200\000\201\000\203\005\231\0064\004\129\007'\002\014\002n\007(\003\245\001\023\006+\006-\0066\001\239\002o\001t\005\232\001\016\000\245\006,\007+\005\234\002\127\001\023\001\026\005\238\005\229\002}\0067\003\b\001\216\001~\002\015\006J\0020\002\027\002\129\000\200\000\200\004\167\001\240\000\203\006\225\004\206\001\244\006.\001\023\006\021\006-\002\127\001\031\001\135\001\239\001 \006/\005\231\0012\004\003\004\002\004\004\005\236\0020\004\246\002\129\000\200\001\016\002\133\002,\002-\001e\005\232\001\023\001$\003\232\006\017\005\234\0013\001\"\006>\005\235\002\014\000\203\006.\001Q\000\250\001\245\002\127\001\134\004\233\006\019\003_\006/\003\245\006?\002\130\002\028\003c\004W\0020\001\246\002\129\000\200\002\142\0062\001\139\002\132\002\014\0029\0064\001G\002\027\007.\001\181\000\200\003`\006\020\006\226\001\193\0066\001\031\001*\002\130\001+\002\136\001%\002\144\003\231\001E\004\240\002\142\006?\001\139\002\132\003\215\0067\004n\002\027\0018\000\200\000\200\0062\005R\004\002\004\004\004D\0064\001\"\000\203\006\227\001\198\001\016\004\r\002\144\006\234\001\023\0066\001\023\001$\002\130\004\027\002\136\006(\002/\002,\002-\001e\002\142\004\020\001\139\002\132\002\028\0067\003\241\004\019\0020\006\137\002\129\000\200\002n\006)\005\005\003\213\006+\001\203\001C\001\031\002o\001]\001 \002\144\000\203\006,\006B\006\235\0055\004I\002\028\003\231\004n\002}\002\014\000\200\001>\004q\001\031\001\139\005\001\001 \001\016\001%\003b\004N\001\"\001F\001\023\001\026\002\014\006\236\006\163\001\016\006-\005\003\0056\005w\0057\001\023\001$\003\223\001\209\005Y\002\027\001\"\002\005\000\200\002\130\006\237\001.\004`\001e\001H\003\007\005\004\002\131\003\227\001\139\002\132\002\027\000\203\003\231\000\200\000\203\006\198\001\226\0058\006.\001*\000\196\0007\002\127\000\200\000\201\006S\001\031\006/\003\231\005\026\006v\004\237\001\139\006\176\0020\004\144\002\129\000\200\001*\001\016\001u\001\023\001%\004\238\001\228\001\023\001$\005\006\001\243\001\016\0059\006E\006\017\001\"\002\028\001\023\001$\002\014\002\004\005:\005;\003\007\005<\002,\002-\001e\006?\006\019\001\016\001.\002\028\003\007\004\025\001\016\001\023\001$\0062\003\007\002n\001\023\001\026\0064\001\016\003\007\0045\005x\002o\002\027\001\023\001$\000\200\0066\006d\006\020\002\130\003\206\002\136\005`\005a\002}\005\224\001>\002\142\000\203\001\139\002\132\003\007\0067\001%\005>\003\202\003\007\005b\005r\005@\005J\001\031\005j\004\019\001 \001>\006\187\006\188\002&\005t\002\144\001\016\001%\003\007\004?\001\016\005y\001\023\001$\002\014\001.\001\023\001\026\001H\004E\005u\005j\004\019\001\"\006\162\005\007\006\240\002\028\002,\002-\001e\004J\000m\002)\001.\004k\004\019\001H\002\127\003\245\005Y\004[\001\204\002n\002\027\003\007\001\216\000\200\001\206\002\n\0020\002o\002\129\000\200\004O\0027\001\240\003\158\004n\005\015\001\244\000\200\001\023\003\007\002}\001%\001*\002F\001\031\004\237\001\031\005!\001\031\001 \005\211\001 \004g\004\177\004\019\003\007\005\\\004\238\002\133\003\245\001\216\004\245\002I\002\007\005f\004\002\004\004\004\240\001.\003\007\001\240\001\"\001\016\001\"\001\244\001\"\001\023\001\245\001\023\001$\002\028\000\203\001\213\002,\002-\001e\002\130\000\203\002\136\004s\005Y\001\246\005Y\000m\002\142\002\014\001\139\002\132\002n\002\127\004n\004\240\006\241\000\200\001\139\002O\002o\004v\005n\004\002\004\004\0020\006\248\002\129\000\200\001\245\001*\002\144\001*\002}\005`\005a\006^\004~\001>\002\027\003\245\002[\000\200\001\246\006\178\001%\006\192\005V\004\019\005b\005r\004\130\003\007\004\228\005j\004\019\000\200\002\133\001\016\000\203\001\016\002X\001\016\002^\001\023\001$\001\023\001$\001\023\001$\006\250\001\031\001.\004\242\001 \001H\000\200\003\007\005\219\002'\002*\000\200\006\130\002b\001\139\002\130\003\007\002\136\003\007\006\171\004\002\004\004\002\127\002\142\002g\001\139\002\132\003\007\001\"\002\028\001\031\003\n\005\243\001 \0020\000\200\002\129\000\200\005`\005a\005`\005a\001>\0028\001>\005Y\002\144\001%\002\141\001%\004\145\001%\006\195\005b\005r\005b\005r\001\"\005j\004\019\005j\004\019\002\196\001\016\002\220\002G\002\133\002\227\002J\001\023\001\026\001*\000\203\000\203\001.\004\162\001.\001\216\001.\001H\001\217\001H\006t\004\019\004\166\003\000\004\220\001\240\002,\002-\001e\001\244\001\016\001\023\002\130\006\206\002\136\003o\001\023\001\026\001*\001\016\002\142\002n\001\139\002\132\000\203\001\023\001$\002P\002c\002o\002,\002-\001e\002h\000\196\006i\002\192\000\200\000\201\003\214\004\237\003\220\002}\002\144\003\007\002n\000\203\003\235\001\016\000\203\001\245\003w\004\238\002o\001\023\001$\004\239\002,\002-\001e\003\172\003\007\003\007\006W\001\246\005\229\002}\005`\005a\004\237\001\016\001>\002n\003\252\003\007\003\254\001\023\001$\001%\001G\002o\004\238\006\174\006\175\003\182\004\244\004 \005j\004\019\003\204\000\203\000\203\004\016\002}\005\231\003\007\000\203\004\021\0044\000\203\0011\002\127\000\203\003\007\000\203\001.\003\219\001%\001H\005\232\000\203\004:\004\253\0020\005\234\002\129\000\200\001\016\005\245\004A\002,\002-\001e\001\023\001\026\002\127\003\221\001\187\001e\005\002\005*\004G\004Z\003\007\001.\002n\000\203\0020\000\203\002\129\000\200\001\031\0052\002o\005\030\002\133\004_\001f\002A\004\026\001h\001i\002\127\004j\003\007\000\203\002}\002,\002-\001e\000\203\000\203\004r\005?\0020\003\234\002\129\000\200\001\"\002\133\003\007\005G\002n\002\130\000\203\002\136\004\237\004u\004\015\004\023\002o\002\142\000\203\001\139\002\132\003\007\003\212\004|\004\238\003\148\003\001\003\002\005\014\002}\000\203\000\203\002\133\002\130\004@\003\026\004\128\005^\0049\001\216\002\144\002\142\001\238\001\139\002\132\000\203\004\134\005 \004;\001\240\004\140\002\127\000\203\001\244\004>\001\023\004\152\001\127\005\143\004M\002\130\000\203\002\136\0020\002\144\002\129\000\200\004C\002\142\001n\001\139\002\132\000\200\003\007\005\178\004L\000\203\001\016\002,\002-\001e\004H\004\171\001\023\005#\004K\000\203\004Y\002\127\005\204\004\176\002\144\004^\002n\001\245\002\133\003\007\003\151\003\156\000\203\0020\002o\002\129\000\200\004\181\004f\004\191\004e\001\246\000\203\004i\003\209\004\197\000\203\002}\002,\002-\001e\004\208\000\203\002,\002-\001e\002\130\000\196\002\136\004\223\000\200\000\201\001\129\002n\002\142\002\133\001\139\002\132\002n\005$\001\130\002o\001\139\001l\005\215\004\241\002o\003\195\000\203\004\227\004t\004\238\003\147\005)\002}\005&\000\203\002\144\005\229\002}\002,\002-\001e\002\130\004\127\002\136\001.\005\249\004\248\003\007\000\203\002\142\000\203\001\139\002\132\002n\002\127\005\t\000\203\004{\001d\001e\004\139\002o\000\203\003\007\005\019\005\231\0020\003\142\002\129\000\200\000\203\004\133\002\144\003\007\002}\005,\005B\004\135\001f\001v\005\232\001h\001i\005L\004\159\005\234\000\203\005X\005l\006\007\000\203\002\127\005|\005\130\003\007\004\147\002\127\005\134\002\133\006(\004\158\003\138\004\153\0020\003\007\002\129\000\200\004\157\0020\000\203\002\129\000\200\004\170\004\175\005\018\006\005\003\007\006)\000\203\004\180\006+\001w\004\183\001x\002L\005\162\002\130\000\203\003\026\006,\005\202\006\t\006\006\002\127\002\142\002\133\001\139\002\132\000\203\000\203\002\133\006\r\004\187\005\207\004\195\0020\000\203\002\129\000\200\005\246\000\203\000\203\001\127\004\202\004\213\000\203\000\203\002\144\006-\005\212\000\203\005\017\006\018\002\130\001n\002\136\005\n\000\200\002\130\005\011\002\136\002\142\006\030\001\139\002\132\003\141\002\142\002\133\001\139\002\132\005\242\002,\002-\001e\006%\002,\002-\001e\000\203\005\016\005\218\003\007\006.\000\203\002\144\000\203\002n\005\020\005\226\002\144\002n\006/\005\021\003\007\002o\002\130\000\203\002\136\002o\006\011\003\131\006 \000\203\002\142\003t\001\139\002\132\002}\002,\002-\001e\002}\000\203\0054\001\129\0060\000\196\005-\003\007\000\200\000\201\003\007\001\130\002n\001\139\001l\002\144\002,\002-\001e\0061\002o\005.\000\203\006]\006w\006\131\003l\001\216\006\145\0062\001\248\002n\000\203\002}\0064\006\147\005\229\001\240\0063\002o\000\203\001\244\003\007\001\023\0066\001\031\003\007\0053\005\030\003d\006:\000\203\002}\000\203\001\031\002\127\005I\001 \005E\002\127\0067\002,\002-\001e\005F\005\231\003\007\0020\005H\002\129\000\200\0020\001\"\002\129\000\200\006C\002n\005s\006\136\003\007\005\232\001\"\001\245\005W\002o\005\234\000\203\000\203\000\203\006\026\002z\000\203\002\127\005[\005]\003\007\001\246\002}\000\203\002\133\005_\005k\005{\002\133\0020\005}\002\129\000\200\005~\005\131\006\180\002\127\005\135\005\139\006\194\005 \005\157\002,\002-\001e\005\164\005\168\005\192\0020\001*\002\129\000\200\002\130\005\213\002\136\005\237\002\130\002n\002\136\007!\002\142\002\133\001\139\002\132\002\142\002o\001\139\002\132\005\247\006'\001\016\002\135\007,\006!\006\"\006&\001\023\005#\002}\001\016\002\133\002\127\0065\002\144\006\\\001\023\001$\002\144\0071\002\130\006g\002\136\006r\0020\006\134\002\129\000\200\002\142\006\135\001\139\002\132\006\139\006\179\006\183\006\193\006\197\007\019\000\000\002\130\000\000\003\026\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\002\144\002,\002-\001e\000\000\002\133\000\000\000\000\000\000\005$\000\000\001-\001\216\000\000\000\000\001\250\002n\002\127\001%\002\144\000\000\004\238\001\240\005(\002o\005&\001\244\000\000\001\023\0020\002\150\002\129\000\200\002\130\000\000\002\136\001.\002}\000\000\000\000\000\000\002\142\000\000\001\139\002\132\001.\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\002\193\001e\000\000\000\000\000\000\000\000\000\000\002\133\002n\000\000\002\144\000\000\000\000\001\245\000\000\000\000\002o\000\000\000\000\000\000\002\236\001v\002\149\001h\001i\000\000\000\000\001\246\000\000\002}\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\136\000\000\000\000\000\000\000\000\002\127\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\002\241\003\001\003\002\001\216\002\144\000\000\002\022\000\000\000\000\000\000\002,\002-\001e\001\240\000\000\000\000\000\000\001\244\000\000\001\023\000\000\000\000\000\000\000\000\002\133\002n\002\127\000\000\002,\002-\001e\000\000\001\127\002o\000\000\000\000\000\000\000\000\0020\002\201\002\129\000\200\000\000\002n\001n\000\000\002}\000\200\000\000\000\000\000\000\002o\002\130\000\000\002\136\000\000\000\000\002\212\001\245\000\000\002\142\000\000\001\139\002\132\002}\002,\002-\001e\000\000\000\000\002\133\000\000\001\246\000\000\000\000\000\000\001\216\003\005\003\006\002<\002n\001\216\000\000\002\144\003\225\000\000\001\240\000\000\002o\000\000\001\244\001\240\001\023\000\000\002\224\001\244\000\000\001\023\002\130\000\000\002\136\002}\000\000\000\000\001\129\002\127\002\142\000\000\001\139\002\132\000\000\000\000\001\130\000\000\001\139\001l\000\000\0020\000\000\002\129\000\200\000\000\000\000\002\127\000\000\000\000\000\000\000\000\000\000\002\144\000\000\001\245\000\000\000\000\000\000\0020\001\245\002\129\000\200\000\000\002,\002-\001e\001\216\000\000\001\246\004(\000\000\000\000\002\133\001\246\000\000\000\000\001\240\000\000\002n\000\000\001\244\000\000\001\023\002\127\000\000\000\000\002o\000\000\000\000\000\000\002\133\001\216\002\231\000\000\004,\0020\000\000\002\129\000\200\002}\002\130\001\240\002\136\000\000\000\000\001\244\000\000\001\023\002\142\000\000\001\139\002\132\000\000\000\000\000\000\002,\002-\001e\002\130\000\000\002\136\001\245\000\000\000\000\000\000\000\000\002\142\002\133\001\139\002\132\002n\002\144\000\000\000\000\000\000\001\246\000\000\000\000\002o\002,\002-\001e\000\000\000\000\002\234\000\000\001\245\000\000\000\000\002\144\000\000\002}\000\000\001\031\002n\002\130\001 \002\136\002\127\000\000\001\246\000\000\002o\002\142\000\000\001\139\002\132\000\000\002\240\000\000\0020\000\000\002\129\000\200\000\000\002}\002,\002-\001e\000\000\001\"\000\000\000\000\000\000\000\000\000\000\002\144\001\216\000\000\000\000\004/\002n\002,\002-\001e\000\000\000\000\001\240\000\000\002o\000\000\001\244\002\133\001\023\000\000\002\243\000\000\002n\000\000\000\000\002\127\000\000\002}\000\000\000\000\002o\002,\002-\001e\000\000\000\000\003\r\0020\001*\002\129\000\200\000\000\000\000\002}\000\000\002\130\002n\002\136\000\000\002\127\000\000\000\000\000\000\002\142\002o\001\139\002\132\001\245\000\000\000\000\003\017\0020\000\000\002\129\000\200\000\000\000\000\002}\001\016\002\133\000\000\001\246\000\000\000\000\001\023\001$\002\144\000\000\001\216\000\000\000\000\004=\000\000\000\000\000\000\000\000\002\127\000\000\001\240\000\000\000\000\000\000\001\244\002\133\001\023\000\000\000\000\002\130\0020\002\136\002\129\000\200\002\127\000\000\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\006\158\002\130\000\000\002\136\000\000\000\000\002\127\001%\002\144\002\142\002\133\001\139\002\132\001\245\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\002,\002-\001e\000\000\002\133\001\246\000\000\000\000\000\000\000\000\002\144\000\000\001.\000\000\000\000\002n\002\130\000\000\002\136\000\000\000\000\000\000\001\031\002o\002\142\001 \001\139\002\132\002\133\000\000\000\000\000\000\002\130\003\023\002\136\000\000\002}\002,\002-\001e\002\142\000\000\001\139\002\132\000\000\000\000\000\000\002\144\000\000\001\"\000\000\000\000\002n\002,\002-\001e\002\130\001<\002\136\000\000\002o\000\000\000\000\002\144\002\142\000\000\001\139\002\132\002n\000\000\003\028\000\000\000\000\002}\000\000\000\000\002o\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\003\030\002\144\000\000\002}\000\000\000\000\001*\002n\000\000\002\127\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\003\"\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\001\031\001\023\001$\001 \000\000\002\127\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\127\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\002,\002-\001e\0020\000\000\002\129\000\200\004\216\000\000\000\000\002\130\000\000\003\026\000\000\000\000\002n\002\127\001>\002\142\002\133\001\139\002\132\004\219\002o\001%\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\003*\000\000\002\133\002}\000\000\000\000\000\000\001*\002\144\000\000\000\000\000\000\000\000\000\000\002\130\000\000\003\026\000\000\001.\000\000\000\000\001D\002\142\000\000\001\139\002\132\000\000\002\133\000\000\000\000\002\130\000\000\003\026\000\000\000\000\000\000\000\000\001\016\002\142\000\000\001\139\002\132\000\000\001\023\001$\002\144\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\002\130\000\000\003\026\000\000\000\000\000\000\002\144\002\127\002\142\000\000\001\139\002\132\002n\002,\002-\001e\000\000\000\000\000\000\0020\002o\002\129\000\200\000\000\000\000\000\000\000\000\000\000\002n\000\000\0030\002\144\000\000\002}\001>\000\000\002o\002,\002-\001e\001\216\001%\000\000\004\137\000\000\004\221\0036\000\000\000\000\002}\001\240\002\133\002n\000\000\001\244\000\000\001\023\000\000\000\000\000\000\002o\002,\002-\001e\001\216\000\000\003=\004\149\001.\000\000\000\000\001H\000\000\002}\001\240\000\000\002n\000\000\001\244\002\130\001\023\003\026\000\000\000\000\002o\000\000\000\000\002\142\000\000\001\139\002\132\000\000\002\127\000\000\003N\001\245\000\000\002}\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\127\001\246\002\144\000\000\000\000\002n\002,\002-\001e\000\000\000\000\001\245\0020\002o\002\129\000\200\000\000\000\000\000\000\003B\000\000\002n\000\000\000\000\002\127\001\246\002}\000\000\002\133\002o\000\000\000\000\000\000\000\000\000\000\003G\0020\000\000\002\129\000\200\000\000\000\000\002}\000\000\002\133\000\000\000\000\000\000\002\127\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\003\026\000\000\0020\000\000\002\129\000\200\002\142\000\000\001\139\002\132\002\133\000\000\000\000\000\000\002\130\000\000\003\026\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\002\127\000\000\002\144\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\002\130\0020\002\136\002\129\000\200\002\127\000\000\002\144\002\142\000\000\001\139\002\132\000\000\000\000\002,\002-\001e\0020\000\000\002\129\000\200\002,\002-\001e\002\130\000\000\003\026\000\000\000\000\002n\000\000\002\144\002\142\002\133\001\139\002\132\002n\002o\000\000\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\003S\001\216\002\133\002}\004\155\000\000\000\000\003X\002\144\000\000\002}\001\240\000\000\000\000\002\130\001\244\002\136\001\023\000\000\002,\002-\001e\002\142\001\216\001\139\002\132\004\164\000\000\000\000\000\000\002\130\000\000\002\136\001\240\002n\000\000\000\000\001\244\002\142\001\023\001\139\002\132\002o\001\216\000\000\002\144\004\172\000\000\000\000\000\000\000\000\000\000\003g\001\240\000\000\002}\001\245\001\244\000\000\001\023\000\000\002\144\002\127\000\000\002,\002-\001e\000\000\000\000\002\127\001\246\000\000\000\000\000\000\0020\000\000\002\129\000\200\001\245\002n\000\000\0020\000\000\002\129\000\200\000\000\000\000\002o\000\000\000\000\000\000\000\000\001\246\001\216\000\000\000\000\006b\003j\001\245\000\000\002}\000\000\000\000\001\240\000\000\000\000\002\133\001\244\000\000\001\023\000\000\000\000\001\246\002\133\002\127\000\000\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\002n\000\000\002\130\000\000\003\026\000\000\000\000\000\000\002o\002\130\002\142\003\026\001\139\002\132\003p\000\000\001\245\002\142\000\000\001\139\002\132\002}\002,\002-\001e\000\000\002\133\002\127\000\000\000\000\001\246\000\000\000\000\002\144\000\000\000\000\000\000\002n\000\000\0020\002\144\002\129\000\200\000\000\000\000\002o\002,\002-\001e\000\000\000\000\003r\000\000\000\000\002\130\000\000\003\026\000\000\002}\000\000\000\000\002n\002\142\000\000\001\139\002\132\000\000\000\000\000\000\002o\001\031\002\133\000\000\001 \000\000\003|\000\000\000\000\000\000\000\000\002\127\000\000\002}\000\000\000\000\002\144\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\001\"\000\000\002\130\000\000\003\026\004\231\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\000\000\002\127\000\000\000\000\000\000\002,\002-\001e\002\133\000\000\000\000\000\000\000\000\0020\002\144\002\129\000\200\000\000\000\000\000\000\002n\000\000\000\000\000\000\001*\002\127\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\003\133\000\000\002\130\0020\002\136\002\129\000\200\002}\000\000\000\000\002\142\002\133\001\139\002\132\000\000\000\000\000\000\002,\002-\001e\001\016\000\000\002,\002-\001e\000\000\001\023\001$\001\031\000\000\000\000\001 \002n\002\144\000\000\002\133\000\000\002n\000\000\002\130\002o\002\136\000\000\000\000\000\000\002o\003\136\002\142\000\000\001\139\002\132\003\150\000\000\002}\000\000\001\"\000\000\000\000\002}\000\000\000\000\000\000\000\000\002\130\000\000\002\136\002\127\002,\002-\001e\002\144\002\142\001>\001\139\002\132\000\000\000\000\000\000\0020\001%\002\129\000\200\002n\004\236\000\000\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\002\144\000\000\003\153\000\000\001*\000\000\000\000\000\000\000\000\002}\000\000\000\000\001.\000\000\000\000\001H\002\133\000\000\002\127\000\000\000\000\000\000\000\000\002\127\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\001\016\0020\000\000\002\129\000\200\002n\001\023\001$\000\000\000\000\002\130\000\000\002\136\002o\002,\002-\001e\000\000\002\142\000\000\001\139\002\132\000\000\003\163\000\000\000\000\002}\000\000\002\133\002n\000\000\000\000\000\000\002\133\002\127\000\000\000\000\002o\000\000\000\000\000\000\002\144\000\000\000\000\000\000\000\000\0020\003\168\002\129\000\200\002}\000\000\001>\000\000\000\000\000\000\002\130\000\000\002\136\001%\000\000\002\130\000\000\002\136\002\142\000\000\001\139\002\132\000\000\002\142\000\000\001\139\002\132\000\000\000\000\002,\002-\001e\002\133\000\000\000\000\000\000\000\000\000\000\000\000\002\127\001.\002\144\000\000\001?\002n\000\000\002\144\000\000\000\000\000\000\000\000\0020\002o\002\129\000\200\000\000\000\000\000\000\003\217\000\000\002\130\000\000\002\136\002\127\000\000\002}\000\000\000\000\002\142\000\000\001\139\002\132\002,\002-\001e\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\002n\000\000\000\000\000\000\002\144\000\000\000\000\000\000\002o\000\000\000\000\000\000\000\000\000\000\003\230\000\000\000\000\000\000\000\000\000\000\002\133\002}\000\000\000\000\002\130\000\000\003\026\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\002\127\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\0020\003\026\002\129\000\200\002n\000\000\002\144\002\142\000\000\001\139\002\132\000\000\002o\000\000\002\193\001e\000\000\000\000\004\018\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\000\000\000\000\000\000\002\144\002\127\002\133\000\000\002\236\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\136\000\000\000\000\000\000\001d\001e\002\142\000\000\001\139\002\132\000\000\000\000\000\000\002\133\002\241\003\001\003\002\000\000\000\000\000\000\000\000\000\000\002\127\000\000\001f\001v\000\000\001h\001i\002\144\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\002\130\000\000\002\136\000\000\000\000\001\127\004\"\000\000\002\142\000\000\001\139\002\132\002,\002-\001e\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\000\000\002\133\001w\002n\001x\002L\000\000\002\144\000\000\000\000\000\000\002o\000\000\002,\002-\001e\000\000\004U\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\003\005\004\024\002n\002\130\000\000\002\136\000\000\001\127\000\000\000\000\002o\002\142\000\000\001\139\002\132\000\000\005\138\000\000\000\000\001n\000\000\000\000\000\200\002}\000\000\000\000\000\000\001\129\000\000\000\000\003\141\000\000\000\000\000\000\002\144\001\130\000\000\001\139\001l\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\002\127\000\000\000\000\000\000\000\000\002o\002,\002-\001e\000\000\000\000\005\141\0020\000\000\002\129\000\200\000\000\000\000\002}\000\000\001\031\002n\001\129\001 \000\000\002\127\000\000\000\000\000\000\002o\001\130\000\000\001\139\001l\000\000\005\156\000\000\0020\000\000\002\129\000\200\000\000\002}\000\000\002\133\000\000\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\248\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\006\144\002\130\002n\002\136\000\000\000\000\002\127\000\000\000\000\002\142\002o\001\139\002\132\000\000\000\000\000\000\005\159\000\000\0020\001*\002\129\000\200\000\000\002}\000\000\000\000\002\130\000\000\002\136\000\000\002\127\000\000\002\144\000\000\002\142\000\000\001\139\002\132\000\000\002,\002-\001e\0020\000\000\002\129\000\200\000\000\000\000\000\000\001\016\002\133\000\000\000\000\000\000\002n\001\023\001$\002\144\000\000\000\000\000\000\000\000\002o\000\000\002,\002-\001e\000\000\005\172\000\000\000\000\000\000\000\000\000\000\002\133\002}\000\000\000\000\002\130\002n\002\136\000\000\002\127\000\000\000\000\000\000\002\142\002o\001\139\002\132\000\000\000\000\000\000\005\175\0020\000\000\002\129\000\200\000\000\000\000\002}\001>\002\130\000\000\002\136\000\000\000\000\000\000\001%\002\144\002\142\000\000\001\139\002\132\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\000\000\002n\000\000\000\000\000\000\002\144\002\127\001.\000\000\002o\003\255\000\000\002,\002-\001e\005\196\000\000\000\000\0020\000\000\002\129\000\200\002}\000\000\000\000\000\000\002\130\002n\002\136\000\000\000\000\002\127\000\000\000\000\002\142\002o\001\139\002\132\002,\002-\001e\005\199\000\000\0020\000\000\002\129\000\200\000\000\002}\000\000\002\133\000\000\000\000\002n\000\000\000\000\000\000\002\144\000\000\000\000\000\000\002o\000\000\000\000\000\000\001\031\000\000\005\203\001 \000\000\000\000\0012\000\000\000\000\002}\002\133\000\000\000\000\002\130\000\000\002\136\002\127\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\0013\001\"\0020\000\000\002\129\000\200\000\000\001O\000\000\000\000\000\000\000\000\002\130\000\000\002\136\000\000\002\127\000\000\002\144\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\127\002\144\001*\002\193\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\002\133\0018\002\130\000\000\002\136\002\236\001v\000\000\001h\001i\002\142\000\000\001\139\002\132\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\002\133\000\000\002\130\000\000\002\136\000\000\000\000\002\144\000\000\000\000\002\142\000\000\001\139\002\132\001\031\000\000\000\000\001 \000\000\000\000\000\000\002\241\003\001\003\002\000\000\002\193\001e\000\000\002\130\000\000\002\136\000\000\000\000\002\144\000\000\000\000\002\142\000\000\001\139\002\132\001>\001\"\000\000\001d\001e\002\236\001v\001%\001h\001i\000\000\001F\000\000\001\127\000\000\000\000\000\000\000\000\000\000\002\144\000\000\000\000\000\000\001f\001v\001n\001h\001i\000\200\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\006l\002\241\003\001\003\002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\003\005\005\214\000\000\000\000\000\000\002,\002-\001e\001w\000\000\001x\002L\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\002n\001\127\001\023\001$\000\000\000\000\000\000\001\129\002o\002,\002-\001e\000\000\001n\006\210\001\130\000\200\001\139\001l\001\127\000\000\002}\000\000\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\001n\002o\000\000\000\200\000\000\000\000\000\000\006\212\000\000\001d\001e\003\141\000\000\000\000\002}\003\005\005\248\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\004\249\001f\001v\004\252\001h\001i\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\002\127\001\130\001.\001\139\001l\001H\000\000\000\000\000\000\000\000\000\000\001\129\0020\000\000\002\129\000\200\000\000\000\000\000\000\001\130\000\000\001\139\001l\001w\002\127\001x\001\143\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\002\133\000\000\000\000\000\000\000m\001f\001v\000\000\001h\001i\001\127\001d\001e\000\000\000\000\001\184\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\002\133\000\200\000\000\000\000\002\130\000\000\002\136\001f\001v\000\000\001h\001i\002\142\000\000\001\139\002\132\000\000\001\169\000\000\000\000\000\000\000\000\001d\001e\001w\000\000\001x\001\172\002\130\000\000\002\136\000\000\000\000\000\000\000\000\002\144\002\142\000\000\001\139\002\132\001d\001e\001f\001v\000\000\001h\001i\000\000\000\000\000\000\001w\000\000\001x\001\172\000\000\001\127\001d\001e\001\129\002\144\001f\001v\000\000\001h\001i\000\000\001\130\001n\001\139\001l\000\200\000\000\000\000\000\000\000\000\000\000\001f\001v\000\000\001h\001i\001\127\000\000\000\000\000\000\001w\001\174\001x\002L\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\002,\002-\001e\001w\000\000\001x\002T\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002n\001\127\000\000\000\000\001w\000\000\001x\001\172\002o\000\000\000\000\000\000\001\129\001n\000\000\000\000\000\200\000\000\000\000\001\127\001\130\002}\001\139\001l\003\137\000\000\000\000\000\000\002,\002-\001e\001n\000\000\000\000\000\200\001\127\000\000\000\000\001\129\000\000\000\000\000\000\000\000\002n\000\000\000\000\001\130\001n\001\139\001l\000\200\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002W\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\001\129\000\000\002,\002-\001e\000\000\000\000\002\127\001\130\000\000\001\139\001l\002n\000\000\000\000\000\000\000\000\002n\001\129\0020\002o\002\129\000\200\000\000\000\000\002o\001\130\000\000\001\139\001l\000\000\000\000\000\000\002}\001\129\000\000\000\000\000\000\002}\000\000\000\000\000\000\001\130\000\000\001\139\001l\000\000\000\000\000\000\000\000\002\127\002\133\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\002n\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\002\130\000\000\003\011\000\000\000\000\000\000\000\000\000\000\002\142\002}\001\139\002\132\000\000\002\127\000\000\002\133\000\000\000\000\002\127\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\0020\002\144\002\129\000\200\002n\000\000\000\000\002,\002-\001e\000\000\000\000\002o\002\130\000\000\002\138\000\000\000\000\000\000\000\000\000\000\002\142\002n\001\139\002\132\002}\000\000\002\133\000\000\000\000\002o\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002\127\000\000\000\000\000\000\000\000\002}\002\144\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\002\130\000\000\002\140\000\000\000\000\002\130\000\000\002\145\002\142\000\000\001\139\002\132\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\006(\000\000\000\000\002\133\000\000\002\127\000\000\002\144\000\000\002,\002-\001e\002\144\000\000\000\000\000\000\000\000\0020\007\030\002\129\000\200\006+\000\000\002\127\002n\002,\002-\001e\000\000\000\000\006,\002\130\002o\002\152\000\000\0020\000\000\002\129\000\200\002\142\002n\001\139\002\132\000\000\000\000\002}\000\000\000\000\002o\002\133\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\006-\000\000\002}\002\144\000\000\000\000\002n\000\000\002\133\000\000\000\000\000\000\000\000\000\000\002o\000\000\000\000\000\000\002\130\000\000\002\154\000\000\000\000\000\000\000\000\000\000\002\142\002}\001\139\002\132\000\000\000\000\000\000\000\000\006.\000\000\002\130\000\000\002\156\000\000\000\000\000\000\000\000\006/\002\142\002\127\001\139\002\132\000\000\002\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\127\000\000\000\000\007\031\000\000\000\000\002\144\002,\002-\001e\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\000\000\0061\002n\000\000\000\000\002\127\000\000\000\000\002\133\000\000\002o\0062\002,\002-\001e\000\000\0064\0020\000\000\002\129\000\200\000\000\000\000\002}\002\133\000\000\0066\002n\002,\002-\001e\000\000\000\000\000\000\000\000\002o\002\130\000\000\002\158\000\000\000\000\000\000\0067\002n\002\142\000\000\001\139\002\132\002}\002\133\000\000\002o\002\130\000\000\002\160\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\002}\000\000\000\000\002\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\162\000\000\000\000\002\127\002\144\000\000\002\142\000\000\001\139\002\132\002,\002-\001e\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\002\127\002\144\000\000\000\000\000\000\002o\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\127\000\000\002}\002\133\000\000\002n\000\000\002,\002-\001e\000\000\000\000\0020\002o\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\002}\000\000\002\133\000\000\002o\002\130\000\000\002\164\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\002}\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\166\000\000\000\000\002\127\002\144\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\002\130\0020\002\168\002\129\000\200\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\002\127\000\000\002\144\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\0020\000\000\002\129\000\200\000\000\002\127\002\144\000\000\002\133\000\000\002n\000\000\002,\002-\001e\000\000\000\000\0020\002o\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002n\002,\002-\001e\002}\002\133\000\000\000\000\002o\002\130\000\000\002\170\000\000\000\000\000\000\000\000\002n\002\142\000\000\001\139\002\132\002}\002\133\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\172\000\000\002}\000\000\000\000\002\144\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\174\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\002\127\002\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\002\127\002\144\002,\002-\001e\000\000\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\127\002n\000\000\000\000\000\000\002n\000\000\001\031\000\000\002o\005\030\002\133\0020\002o\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002}\002,\002-\001e\002}\000\000\002\133\000\000\000\000\000\000\000\000\000\000\001\"\000\000\000\000\000\000\002n\002\130\000\000\002\176\000\000\000\000\002\133\000\000\002o\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\178\002}\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\000\000\002\144\000\000\002\130\000\000\002\180\000\000\000\000\005 \000\000\000\000\002\142\002\127\001\139\002\132\000\000\002\127\000\000\002\144\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\0020\000\000\002\129\000\200\000\000\000\000\002\144\002,\002-\001e\001\016\002,\002-\001e\000\000\000\000\001\023\005#\000\000\000\000\000\000\002\127\002n\000\000\000\000\000\000\002n\000\000\002\133\000\000\002o\000\000\002\133\0020\002o\002\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002\182\000\000\002\130\000\000\002\184\000\000\002\142\002\133\001\139\002\132\002\142\005$\001\139\002\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\005'\000\000\005&\000\000\002\144\000\000\000\000\000\000\002\144\000\000\002\130\000\000\002\186\001.\000\000\000\000\000\000\000\000\002\142\002\127\001\139\002\132\000\000\002\127\000\000\000\000\000\000\001d\001e\000\000\000\000\0020\000\000\002\129\000\200\0020\002\210\002\129\000\200\000\000\000\000\002\144\000\000\000\000\002\213\001d\001e\001f\002\214\000\000\001h\001i\000\000\000\000\002\210\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\213\002\133\000\000\001f\002\214\002\133\001h\001i\000\000\002,\002-\001e\000\000\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002n\000\000\000\000\000\000\002n\002\130\000\000\002\188\002o\002\130\000\000\002\190\002o\002\142\000\000\001\139\002\132\002\142\000\000\001\139\002\132\002}\000\000\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\000\000\001m\002\144\000\000\000\000\000\000\002\144\000\000\000\000\000\000\000\000\000\000\002n\001n\000\000\000\000\000\200\000\000\000\000\001m\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\002}\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\127\000\000\002\215\000\000\002\127\000\000\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\0020\000\000\002\129\000\200\002\215\002n\002\217\000\000\000\000\000\000\000\000\001\129\000\000\002o\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\002\216\000\000\002}\000\000\002\133\001\129\002\127\000\000\002\133\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\0020\000\000\002\129\000\200\002,\002-\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\003.\000\000\002\130\002n\0034\000\000\002\142\000\000\001\139\002\132\002\142\002o\001\139\002\132\000\000\000\000\002\133\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\000\000\002\127\000\000\002\144\002,\002-\001e\002\144\002,\002-\001e\000\000\000\000\0020\000\000\002\129\000\200\000\000\002\130\002n\003:\000\000\000\000\002n\000\000\000\000\002\142\002o\001\139\002\132\000\000\002o\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\002,\002-\001e\002}\002\133\000\000\000\000\000\000\002\144\000\000\000\000\001\031\000\000\000\000\001 \002n\002\127\000\000\002,\002-\001e\000\000\000\000\002o\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\002\130\002n\003@\000\000\002}\000\000\001\"\000\000\002\142\002o\001\139\002\132\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\002}\000\000\000\000\000\000\002\127\000\000\002\133\000\000\002\127\002\144\002,\002-\001e\000\000\000\000\000\000\0020\000\000\002\129\000\200\0020\000\000\002\129\000\200\000\000\002n\000\000\001*\000\000\000\000\000\000\000\000\000\000\002o\002\130\000\000\003E\000\000\000\000\000\000\000\000\002\127\002\142\000\000\001\139\002\132\002}\000\000\002\133\000\000\000\000\000\000\002\133\0020\000\000\002\129\000\200\001\016\000\000\002\127\002,\002-\001e\001\023\001$\002\144\000\000\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\002n\002\130\000\000\003J\000\000\002\130\000\000\003Q\002o\002\142\002\133\001\139\002\132\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\002}\000\000\000\000\000\000\000\000\000\000\000\000\002\133\000\000\002\127\000\000\002\144\000\000\001>\000\000\002\144\000\000\002\130\000\000\003V\001%\0020\000\000\002\129\000\200\002\142\000\000\001\139\002\132\000\000\000\000\001d\001e\000\000\000\000\002\130\000\000\003[\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\001.\002\144\000\000\001\225\001f\001v\002\133\001h\001i\000\000\000\000\000\000\002\127\000\000\000\000\002,\002-\001e\000\000\002\144\000\000\000\000\000\000\000\000\0020\000\000\002\129\000\200\000\000\000\000\002n\000\000\000\000\000\000\002\130\000\000\003^\000\000\002o\000\000\001\187\001e\002\142\000\000\001\139\002\132\000\000\001w\000\000\001x\002L\002}\000\000\001d\001e\000\000\002\133\000\000\000\000\000\000\001f\002A\000\000\001h\001i\002\144\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001f\001v\000\000\001h\001i\001\127\000\000\000\000\000\000\000\000\000\000\002\130\000\000\003\144\000\000\000\000\000\000\001n\000\000\002\142\000\200\001\139\002\132\000\000\000\000\000\000\000\000\000\000\003\140\003\148\003\001\003\002\000\000\001d\001e\000\000\000\000\002\127\000\000\000\000\000\000\000\000\002\144\001w\000\000\001x\007\b\000\000\007\n\0020\000\000\002\129\000\200\001f\001v\000\000\001h\001i\000\000\000\000\000\000\001\127\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\0012\000\000\000\000\001n\001\127\000\000\000\200\001\129\000\000\000\000\000\000\002\133\000\000\000\000\000\000\001\130\001n\001\139\001l\000\200\0013\001\"\000\000\000\000\000\000\000\000\001w\0014\001x\006M\000\000\000\000\003\155\000\000\000\000\000\000\000\000\000\000\000\000\002\130\000\000\003\146\000\000\000\000\000\000\000\000\000\000\002\142\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\001\031\001\127\000\000\001 \000\000\000\000\0012\001\129\001*\000\000\000\000\000\000\000\000\001n\002\144\001\130\000\200\001\139\001l\000\000\001\129\000\000\000\000\000\000\000\000\0018\0013\001\"\001\130\000\000\001\139\001l\000\000\001M\000\000\000\000\000\000\000\000\001\016\001d\001e\000\000\000\000\000\000\001\023\001$\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\001f\001v\001*\001h\001i\001\129\000\000\001f\001v\000\000\001h\001i\000\000\001\130\000\000\001\139\001l\000\000\000\000\0018\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001\016\001F\001w\000\000\001x\001\176\001\023\001$\000\000\000\000\000\000\001w\000\000\001x\001\164\000\000\000\000\000\000\001w\000\000\001x\001\161\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\001\031\000\000\000\000\005\030\001\127\000\000\000\000\001n\001d\001e\000\200\001\127\000\000\000\000\001>\000\000\001n\000\000\000\000\000\200\000\000\001%\000\000\001n\000\000\001F\000\200\001\"\001f\001v\000\000\001h\001i\001d\001e\000\000\0055\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\001f\001v\000\000\001h\001i\001f\001v\000\000\001h\001i\000\000\0056\000\000\0057\001\129\000\000\000\000\005 \001w\000\000\001x\001z\001\130\001\129\001\139\001l\000\000\000\000\000\000\000\000\001\129\001\130\000\000\001\139\001l\000\000\001d\001e\001\130\000\000\001\139\001l\0058\001w\000\000\001x\001}\001\016\001w\001\127\001x\001\128\000\000\001\023\005#\000\000\001f\001v\000\000\001h\001i\001n\000\000\000\000\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\001\127\0059\000\000\000\000\000\000\001\127\000\000\000\000\000\000\000\000\005:\005;\001n\005<\000\000\000\200\000\000\001n\001f\001v\000\200\001h\001i\000\000\000\000\001w\000\000\001x\001\160\000\000\000\000\000\000\005$\000\000\000\000\000\000\005v\000\000\000\000\000\000\000\000\000\000\000\000\000\000\004\238\000\000\005%\001\129\005&\000\000\000\000\000\000\000\000\000\000\000\000\001\130\001\127\001\139\001l\001.\005>\001w\000\000\001x\001\148\005@\005J\000\000\001n\000\000\001\031\000\200\001\129\005\030\000\000\005t\000\000\001\129\000\000\000\000\001\130\000\000\001\139\001l\000\000\001\130\000\000\001\139\001l\001d\001e\005u\001\127\002,\002-\001e\000\000\001\"\000\000\000\000\000\000\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\001f\001v\000\000\001h\001i\000\000\000\000\003\176\000\000\000\000\000\000\000\000\001d\001e\003\185\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\130\000\000\001\139\001l\005 \001f\001v\000\000\001h\001i\003\198\000\000\000\000\000\000\000\000\000\000\001w\000\000\001x\001\156\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\001\016\000\000\001\130\000\000\001\139\001l\001\023\005#\001f\001v\000\000\001h\001i\001\127\001w\000\000\001x\002d\002/\000\000\001d\001e\000\000\000\000\000\000\001n\001d\001e\000\200\002\232\003\189\000\000\002\129\000\200\001\002\000\000\001\031\002\235\000\000\001 \001f\002\214\001I\001h\001i\001\127\001f\001v\000\000\001h\001i\001w\000\000\001x\002\246\000\000\000\000\001n\000\000\005$\000\200\000\000\001K\001\"\000\000\000\000\000\000\003\179\004\231\000\000\000\000\004\238\000\000\0051\000\000\005&\000\000\000\000\000\000\000\000\000\000\000\000\001\127\000\000\000\000\001\129\001.\000\000\000\000\001w\002\130\001x\002\249\001\130\001n\001\139\001l\000\200\002\131\000\000\001\139\002\132\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\001d\001e\000\000\000\000\001m\000\000\000\000\001\129\000\000\000\000\001\127\000\000\000\000\0018\000\000\001\130\001n\001\139\001l\000\200\001f\001v\001n\001h\001i\000\200\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\001d\001e\000\000\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\002\215\001\130\000\000\001\139\001l\001f\001v\000\000\001h\001i\000\000\000\000\001w\000\000\001x\002\252\000\000\000\000\000\000\000\000\000\000\000\000\002,\002-\001e\001\129\000\000\001>\000\000\000\000\000\000\001\129\000\000\001\138\001%\001\139\001l\000\000\005\029\001\130\000\000\001\139\001l\001\127\000\000\003\176\001d\001e\001w\000\000\001x\003\004\003\185\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\001.\000\000\000\000\001H\000\000\001f\001v\000\000\001h\001i\000\000\000\000\000\000\000\000\003\186\000\000\001\031\000\000\001\127\001 \000\000\000\000\001I\000\000\000\000\000\000\001\031\000\000\000\000\001 \001n\000\000\0012\000\200\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001K\001\"\000\000\000\000\000\000\000\000\001w\000\000\001x\004S\0017\001\"\001\129\000\000\002/\000\000\000\000\000\000\001d\001e\001\130\000\000\001\139\001l\000\000\000\000\003\189\000\000\002\129\000\200\001\002\000\000\000\000\000\000\000\000\004\030\000\000\001\127\001f\002\214\000\000\001h\001i\000\000\001*\001d\001e\000\000\001\129\001n\000\000\000\000\000\200\000\000\001*\000\000\001\130\000\000\001\139\001l\000\000\0018\000\000\003\179\000\000\001f\002\214\000\000\001h\001i\000\000\0018\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001d\001e\001\016\000\000\002\130\001d\001e\000\000\001\023\001$\000\000\000\000\002\131\000\000\001\139\002\132\000\000\000\000\000\000\000\000\001f\002\214\000\000\001h\001i\001f\002\214\001\129\001h\001i\001m\000\000\000\000\000\000\000\000\001\130\000\000\001\139\001l\001d\001e\000\000\001n\000\000\001>\000\200\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\001>\001F\000\000\001m\000\000\001f\002\214\001%\001h\001i\000\000\001F\000\000\000\000\000\000\001n\000\000\000\000\000\200\000\000\000\000\000\000\000\000\002\215\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\001m\001d\001e\000\000\000\000\001m\000\000\000\000\001\129\000\000\003}\000\000\001n\000\000\000\000\000\200\001\138\001n\001\139\001l\000\200\001f\002\214\000\000\001h\001i\000\000\000\000\000\000\003\128\000\000\000\000\000\000\000\000\000\000\001\129\000\000\000\000\000\000\001m\001d\001e\000\000\001\138\000\000\001\139\001l\003}\000\000\000\000\000\000\001n\003}\000\000\000\200\000\000\000\000\005\176\000\000\000\000\001f\002\214\000\000\001h\001i\000\000\003\127\000\000\000\000\000\000\000\000\003~\001\129\000\000\000\000\000\000\000\000\001\129\001d\001e\001\138\000\000\001\139\001l\000\000\001\138\003}\001\139\001l\000\000\000\000\000\000\001d\001e\000\000\001m\000\000\000\000\001f\002\214\000\000\001h\001i\000\000\000\000\003\130\000\000\001n\000\000\005\200\000\200\001\129\001f\002\214\000\000\001h\001i\000\000\000\000\001\138\000\000\001\139\001l\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001d\001e\000\000\0055\001m\000\000\001d\001e\000\000\000\000\000\000\000\000\006\027\000\000\000\000\000\000\001n\000\000\000\000\000\200\001f\002\214\000\000\001h\001i\000\000\001f\002\214\000\000\001h\001i\0056\000\000\0057\000\000\000\000\000\000\001\129\000\000\000\000\001d\001e\001m\000\000\000\000\001\138\000\000\001\139\001l\001d\001e\002\215\000\000\000\000\001n\000\000\001m\000\200\000\000\006\029\001f\002\214\0058\001h\001i\000\000\000\000\000\000\001n\001f\002\214\000\200\001h\001i\000\000\000\000\001\129\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\005\227\000\000\000\000\000\000\000\000\001m\0059\000\000\000\000\000\000\000\000\001m\000\000\000\000\002\215\005:\005;\001n\005<\000\000\000\200\000\000\000\000\001n\000\000\001\129\000\200\000\000\000\000\000\000\000\000\000\000\000\000\001\138\000\000\001\139\001l\000\000\000\000\001\129\000\000\005=\000\000\000\000\000\000\001m\005\240\001\138\000\000\001\139\001l\000\000\005\227\000\000\001m\000\000\000\000\001n\006\027\000\000\000\200\000\000\000\000\000\000\000\000\005>\001n\000\000\000\000\000\200\005@\005J\001\031\000\000\000\000\001 \000\000\001\129\000\000\000\000\005t\001\031\000\000\001\129\001 \001\138\001\031\001\139\001l\001 \000\000\001\138\006\027\001\139\001l\000\000\005u\000\000\005\239\001\"\000\000\003\129\000\000\001\031\000\000\006\028\001 \000\000\001\"\004\216\000\000\000\000\000\000\001\"\000\000\000\000\000\000\001\129\004\216\000\000\002,\002-\001e\004\216\005\173\001\138\001\129\001\139\001l\000\000\001\"\000\000\006\159\005\187\001\138\000\000\001\139\001l\005\197\006$\000\000\000\000\001*\003_\000\000\001d\001e\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001f\001g\005\233\001h\001i\000\000\000\000\001\016\001*\001d\001e\000\000\000\000\001\023\001$\000\000\001\016\000\000\000\000\000\000\000\000\001\016\001\023\001$\000\000\000\000\000\000\001\023\001$\001f\001\137\000\000\001h\001i\001d\001e\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\002/\000\000\000\000\000\000\001f\002\199\000\000\001h\001i\001>\000\000\000\000\0020\000\000\002\129\000\200\001%\000\000\001>\000\000\004\221\000\000\000\000\001>\001m\001%\000\000\000\000\000\000\004\221\001%\000\000\001\031\000\000\004\221\001 \001n\000\000\000\000\000\200\001>\000\000\000\000\001.\000\000\000\000\001H\001%\003b\000\000\000\000\006\166\001.\001m\000\000\001H\000\000\001.\000\000\001\"\001H\002,\002-\001e\000\000\001n\000\000\000\000\000\200\002\225\000\000\000\000\002\130\001\031\001.\000\000\001 \001H\001m\000\000\002\131\000\000\001\139\002\132\003_\000\000\000\000\000\000\000\000\000\000\001n\000\000\001\031\000\200\001\031\001 \001\129\001 \000\000\000\000\001\"\000\000\001*\000\000\001\138\000\000\001\139\001l\000\000\000\000\003\248\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\"\000\000\001\"\000\000\000\000\003\251\001\129\005\222\000\000\000\000\000\000\000\000\000\000\001\016\001\138\000\000\001\139\001l\000\000\001\023\001$\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\006(\000\000\001\129\000\000\000\000\000\000\000\000\000\000\002/\000\000\001\138\000\000\001\139\001l\001*\000\000\001*\000\000\006)\006(\0020\006+\002\129\000\200\000\000\001\016\000\000\000\000\000\000\000\000\006,\001\023\001$\000\000\000\000\000\000\001>\006)\000\000\000\000\006+\000\000\000\000\001%\001\016\000\000\001\016\002\207\000\000\006,\001\023\001$\001\023\001$\000\000\000\000\003a\000\000\001\031\006-\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\001\031\001H\000\000\001 \000\000\001>\006-\000\000\002\130\000\000\000\000\000\000\001%\001\"\000\000\000\000\002\131\000\000\001\139\002\132\000\000\006.\000\000\000\000\001>\000\000\001>\001\"\000\000\000\000\006/\001%\000\000\001%\000\000\004\249\000\000\004\236\006\012\001.\006.\000\000\003\255\000\000\002,\002-\001e\000\000\000\000\006/\001\031\000\000\006\244\001 \006;\000\000\001*\000\000\001.\000\000\001.\001H\000\000\001H\000\000\000\000\000\000\006Z\000\000\0061\001*\000\000\000\000\006D\000\000\000\000\000\000\001\"\001\031\0062\000\000\001 \000\000\000\000\0064\000\000\001\016\000\000\0061\000\000\000\000\000\000\001\023\001$\0066\000\000\000\000\000\000\0062\001\031\001\016\000\000\001 \0064\000\000\001\"\001\023\001$\000\000\000\000\0067\000\000\000\000\0066\000\000\000\000\000\000\000\000\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\001\"\000\000\001\031\0067\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\001>\002/\001\031\000\000\000\000\001 \000\000\001%\000\000\000\000\001*\006\245\001\016\0020\001>\002\129\000\200\001\"\001\023\001$\000\000\001%\000\000\000\000\000\000\006\205\002,\002-\001e\001\"\000\000\001*\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001.\003\193\000\000\001H\000\000\002,\002-\001e\000\000\002,\002-\001e\001*\001\016\000\000\000\000\001>\000\000\000\000\001\023\001$\000\000\000\000\001%\001*\002\130\000\000\001X\002.\002,\002-\001e\002i\002\131\000\000\001\139\002\132\000\000\000\000\000\000\000\000\000\000\001\016\000\000\001>\000\000\000\000\000\000\001\023\001$\001.\001%\002k\001H\001\016\001\151\000\000\000\000\000\000\001\031\001\023\001$\001 \000\000\001\031\001>\000\000\001 \000\000\000\000\000\000\000\000\001%\002/\000\000\000\000\001\192\000\000\001.\000\000\000\000\001H\000\000\000\000\000\000\0020\001\"\002\129\000\200\000\000\000\000\001\"\000\000\000\000\001>\000\000\000\000\000\000\000\000\001.\002/\001%\001H\000\000\002/\001\230\001>\000\000\001\031\000\000\000\000\001 \0020\001%\002\129\000\200\0020\001\232\002\129\000\200\000\000\000\000\000\000\000\000\002/\002,\002-\001e\001.\001*\000\000\001H\000\000\000\000\001*\001\"\0020\000\000\002\129\000\200\001.\000\000\000\000\001H\000\000\002\130\000\000\000\000\002u\000\000\000\000\000\000\000\000\002\131\000\000\001\139\002\132\000\000\000\000\001\016\000\000\000\000\000\000\000\000\001\016\001\023\001$\002,\002-\001e\001\023\001$\002\130\000\000\000\000\000\000\002\130\000\000\001*\000\000\002\131\000\000\001\139\002\132\002\131\000\000\001\139\002\132\000\000\000\000\002\128\000\000\000\000\000\000\000\000\000\000\002\130\000\000\002,\002-\001e\000\000\000\000\000\000\002\131\000\000\001\139\002\132\001\016\001\031\000\000\001>\001 \000\000\001\023\001$\001>\000\000\001%\000\000\002/\002\143\002C\001%\000\000\001\031\000\000\002V\001 \000\000\000\000\000\000\0020\000\000\002\129\000\200\001\"\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \001.\000\000\000\000\001H\000\000\001.\000\000\001\"\001H\000\000\000\000\001\031\000\000\000\000\001 \001>\000\000\002/\000\000\000\000\000\000\000\000\001%\001\"\000\000\000\000\002\204\000\000\000\000\0020\000\000\002\129\000\200\000\000\001*\000\000\000\000\000\000\001\"\000\000\000\000\000\000\002,\002-\001e\000\000\000\000\002\130\002/\001.\001*\000\000\001H\000\000\000\000\002\131\000\000\001\139\002\132\000\000\0020\000\000\002\129\000\200\001\016\003'\001*\000\000\000\000\000\000\001\023\001$\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\001*\000\000\000\000\000\000\000\000\001\023\001$\001\031\002\130\000\000\001 \000\000\000\000\000\000\000\000\001\016\002\131\001\031\001\139\002\132\001 \001\023\001$\000\000\000\000\001\031\000\000\000\000\001 \000\000\001\016\000\000\000\000\000\000\001\"\001>\001\023\001$\000\000\002\130\000\000\000\000\001%\000\000\001\"\000\000\002\209\002\131\000\000\001\139\002\132\001>\001\"\000\000\000\000\000\000\002/\001\031\001%\000\000\001 \000\000\002\222\000\000\000\000\000\000\000\000\001>\0020\001.\002\129\000\200\001H\000\000\001%\000\000\000\000\001*\002\229\000\000\000\000\000\000\001>\000\000\001\"\001.\000\000\001*\001H\001%\000\000\000\000\000\000\002\238\000\000\001*\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001\031\001.\001\016\001 \001H\000\000\000\000\000\000\001\023\001$\001\016\000\000\001*\002\130\000\000\000\000\001\023\001$\000\000\001\031\000\000\002\131\001 \001\139\002\132\000\000\000\000\001\"\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\001\031\000\000\001\016\001 \001>\000\000\001\"\000\000\001\023\001$\001\031\001%\000\000\001 \001>\004b\000\000\000\000\000\000\001\"\001\031\001%\001>\005\030\000\000\004\193\000\000\001\"\000\000\001%\001*\000\000\000\000\004\205\000\000\000\000\000\000\001\"\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\001\"\001.\001*\000\000\001H\000\000\000\000\001>\000\000\001.\000\000\000\000\001H\001\016\001%\001*\000\000\000\000\004\218\001\023\001$\000\000\000\000\001*\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\001*\000\000\000\000\000\000\000\000\001\023\001$\000\000\001.\000\000\005 \001H\001\016\000\000\001\031\000\000\000\000\005\030\001\023\001$\001\016\000\000\000\000\000\000\000\000\001\031\001\023\001$\001 \000\000\001\016\000\000\001>\000\000\000\000\000\000\001\023\001$\000\000\001%\001\016\001\"\000\000\004\235\000\000\000\000\001\023\005#\000\000\000\000\000\000\001>\001\"\001\031\000\000\000\000\001 \000\000\001%\000\000\000\000\000\000\004\251\000\000\001>\001\031\001.\000\000\001 \001H\000\000\001%\001>\000\000\000\000\005\152\000\000\000\000\000\000\001%\001\"\000\000\001>\005\170\005 \001.\000\000\000\000\001H\001%\000\000\001\031\001\"\005\194\001 \001*\000\000\000\000\001.\005$\000\000\001H\000\000\000\000\000\000\000\000\001.\000\000\000\000\001H\000\000\004\238\000\000\005\254\001\016\005&\001.\000\000\001\"\001H\001\023\005#\000\000\001*\000\000\001\016\001.\000\000\000\000\000\000\000\000\001\023\001$\000\000\000\000\001*\000\000\000\000\000\000\000\000\001\031\000\000\000\000\001 \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\001*\000\000\000\000\000\000\001\016\000\000\001\"\000\000\000\000\000\000\001\023\001$\005$\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\004\238\000\000\006\024\006P\005&\000\000\001\016\000\000\000\000\000\000\000\000\000\000\001\023\001$\000\000\001.\000\000\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\001*\001.\001%\000\000\001H\000\000\006\165\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\006\169\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\001\016\000\000\001H\001>\000\000\000\000\001\023\001$\000\000\000\000\001%\001.\000\000\000\000\001H\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\001\227\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001>\000\000\000\000\000\000\000\000\000\000\000\000\001%\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\001.\000\000\000\000\003\250")) and semantic_action = [| @@ -1336,9 +1374,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3657 "parsing/parser.mly" +# 3745 "parsing/parser.mly" ( "+" ) -# 1342 "parsing/parser.ml" +# 1380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1361,9 +1399,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3658 "parsing/parser.mly" +# 3746 "parsing/parser.mly" ( "+." ) -# 1367 "parsing/parser.ml" +# 1405 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1386,9 +1424,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3214 "parsing/parser.mly" +# 3298 "parsing/parser.mly" ( _1 ) -# 1392 "parsing/parser.ml" +# 1430 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1433,24 +1471,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3217 "parsing/parser.mly" +# 3301 "parsing/parser.mly" ( Ptyp_alias(ty, tyvar) ) -# 1439 "parsing/parser.ml" +# 1477 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_tyvar_, _startpos_ty_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1448 "parsing/parser.ml" +# 1486 "parsing/parser.ml" in -# 3219 "parsing/parser.mly" +# 3303 "parsing/parser.mly" ( _1 ) -# 1454 "parsing/parser.ml" +# 1492 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1487,7 +1525,7 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -1496,30 +1534,30 @@ module Tables = struct let _v : (let_binding) = let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 1502 "parsing/parser.ml" +# 1540 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 1511 "parsing/parser.ml" +# 1549 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2480 "parsing/parser.mly" +# 2554 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in mklb ~loc:_sloc false body attrs ) -# 1523 "parsing/parser.ml" +# 1561 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1542,9 +1580,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3544 "parsing/parser.mly" +# 3629 "parsing/parser.mly" ( _1 ) -# 1548 "parsing/parser.ml" +# 1586 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1567,9 +1605,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3545 "parsing/parser.mly" +# 3630 "parsing/parser.mly" ( Lident _1 ) -# 1573 "parsing/parser.ml" +# 1611 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1606,9 +1644,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 3275 "parsing/parser.mly" +# 3359 "parsing/parser.mly" ( _2 ) -# 1612 "parsing/parser.ml" +# 1650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1671,11 +1709,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 1679 "parsing/parser.ml" +# 1717 "parsing/parser.ml" in let _3 = @@ -1683,24 +1721,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 1689 "parsing/parser.ml" +# 1727 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 1695 "parsing/parser.ml" +# 1733 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3277 "parsing/parser.mly" +# 3361 "parsing/parser.mly" ( wrap_typ_attrs ~loc:_sloc (reloc_typ ~loc:_sloc _4) _3 ) -# 1704 "parsing/parser.ml" +# 1742 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1731,24 +1769,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3280 "parsing/parser.mly" +# 3364 "parsing/parser.mly" ( Ptyp_var _2 ) -# 1737 "parsing/parser.ml" +# 1775 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1746 "parsing/parser.ml" +# 1784 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 1752 "parsing/parser.ml" +# 1790 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1772,23 +1810,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3282 "parsing/parser.mly" +# 3366 "parsing/parser.mly" ( Ptyp_any ) -# 1778 "parsing/parser.ml" +# 1816 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1786 "parsing/parser.ml" +# 1824 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 1792 "parsing/parser.ml" +# 1830 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1817,35 +1855,35 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1823 "parsing/parser.ml" +# 1861 "parsing/parser.ml" in let tys = -# 3327 "parsing/parser.mly" +# 3411 "parsing/parser.mly" ( [] ) -# 1829 "parsing/parser.ml" +# 1867 "parsing/parser.ml" in -# 3285 "parsing/parser.mly" +# 3369 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 1834 "parsing/parser.ml" +# 1872 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1843 "parsing/parser.ml" +# 1881 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 1849 "parsing/parser.ml" +# 1887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1881,20 +1919,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1887 "parsing/parser.ml" +# 1925 "parsing/parser.ml" in let tys = -# 3329 "parsing/parser.mly" +# 3413 "parsing/parser.mly" ( [ty] ) -# 1893 "parsing/parser.ml" +# 1931 "parsing/parser.ml" in -# 3285 "parsing/parser.mly" +# 3369 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 1898 "parsing/parser.ml" +# 1936 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -1902,15 +1940,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 1908 "parsing/parser.ml" +# 1946 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 1914 "parsing/parser.ml" +# 1952 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -1961,9 +1999,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 1967 "parsing/parser.ml" +# 2005 "parsing/parser.ml" in let tys = @@ -1971,24 +2009,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 1975 "parsing/parser.ml" +# 2013 "parsing/parser.ml" in -# 979 "parsing/parser.mly" +# 1045 "parsing/parser.mly" ( xs ) -# 1980 "parsing/parser.ml" +# 2018 "parsing/parser.ml" in -# 3331 "parsing/parser.mly" +# 3415 "parsing/parser.mly" ( tys ) -# 1986 "parsing/parser.ml" +# 2024 "parsing/parser.ml" in -# 3285 "parsing/parser.mly" +# 3369 "parsing/parser.mly" ( Ptyp_constr(tid, tys) ) -# 1992 "parsing/parser.ml" +# 2030 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -1996,15 +2034,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2002 "parsing/parser.ml" +# 2040 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2008 "parsing/parser.ml" +# 2046 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2042,24 +2080,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3287 "parsing/parser.mly" +# 3371 "parsing/parser.mly" ( let (f, c) = _2 in Ptyp_object (f, c) ) -# 2048 "parsing/parser.ml" +# 2086 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2057 "parsing/parser.ml" +# 2095 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2063 "parsing/parser.ml" +# 2101 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2090,24 +2128,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3289 "parsing/parser.mly" +# 3373 "parsing/parser.mly" ( Ptyp_object ([], Closed) ) -# 2096 "parsing/parser.ml" +# 2134 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2105 "parsing/parser.ml" +# 2143 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2111 "parsing/parser.ml" +# 2149 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2143,20 +2181,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2149 "parsing/parser.ml" +# 2187 "parsing/parser.ml" in let tys = -# 3327 "parsing/parser.mly" +# 3411 "parsing/parser.mly" ( [] ) -# 2155 "parsing/parser.ml" +# 2193 "parsing/parser.ml" in -# 3293 "parsing/parser.mly" +# 3377 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2160 "parsing/parser.ml" +# 2198 "parsing/parser.ml" in let _startpos__1_ = _startpos__2_ in @@ -2164,15 +2202,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2170 "parsing/parser.ml" +# 2208 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2176 "parsing/parser.ml" +# 2214 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2215,20 +2253,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2221 "parsing/parser.ml" +# 2259 "parsing/parser.ml" in let tys = -# 3329 "parsing/parser.mly" +# 3413 "parsing/parser.mly" ( [ty] ) -# 2227 "parsing/parser.ml" +# 2265 "parsing/parser.ml" in -# 3293 "parsing/parser.mly" +# 3377 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2232 "parsing/parser.ml" +# 2270 "parsing/parser.ml" in let _startpos__1_ = _startpos_ty_ in @@ -2236,15 +2274,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2242 "parsing/parser.ml" +# 2280 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2248 "parsing/parser.ml" +# 2286 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2302,9 +2340,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 2308 "parsing/parser.ml" +# 2346 "parsing/parser.ml" in let tys = @@ -2312,24 +2350,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2316 "parsing/parser.ml" +# 2354 "parsing/parser.ml" in -# 979 "parsing/parser.mly" +# 1045 "parsing/parser.mly" ( xs ) -# 2321 "parsing/parser.ml" +# 2359 "parsing/parser.ml" in -# 3331 "parsing/parser.mly" +# 3415 "parsing/parser.mly" ( tys ) -# 2327 "parsing/parser.ml" +# 2365 "parsing/parser.ml" in -# 3293 "parsing/parser.mly" +# 3377 "parsing/parser.mly" ( Ptyp_class(cid, tys) ) -# 2333 "parsing/parser.ml" +# 2371 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -2337,15 +2375,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2343 "parsing/parser.ml" +# 2381 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2349 "parsing/parser.ml" +# 2387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2383,24 +2421,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3296 "parsing/parser.mly" +# 3380 "parsing/parser.mly" ( Ptyp_variant([_2], Closed, None) ) -# 2389 "parsing/parser.ml" +# 2427 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2398 "parsing/parser.ml" +# 2436 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2404 "parsing/parser.ml" +# 2442 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2450,24 +2488,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2454 "parsing/parser.ml" +# 2492 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 2459 "parsing/parser.ml" +# 2497 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( _1 ) -# 2465 "parsing/parser.ml" +# 2503 "parsing/parser.ml" in -# 3298 "parsing/parser.mly" +# 3382 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, None) ) -# 2471 "parsing/parser.ml" +# 2509 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2475,15 +2513,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2481 "parsing/parser.ml" +# 2519 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2487 "parsing/parser.ml" +# 2525 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2540,24 +2578,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2544 "parsing/parser.ml" +# 2582 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 2549 "parsing/parser.ml" +# 2587 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( _1 ) -# 2555 "parsing/parser.ml" +# 2593 "parsing/parser.ml" in -# 3300 "parsing/parser.mly" +# 3384 "parsing/parser.mly" ( Ptyp_variant(_2 :: _4, Closed, None) ) -# 2561 "parsing/parser.ml" +# 2599 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -2565,15 +2603,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2571 "parsing/parser.ml" +# 2609 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2577 "parsing/parser.ml" +# 2615 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2623,24 +2661,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2627 "parsing/parser.ml" +# 2665 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 2632 "parsing/parser.ml" +# 2670 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( _1 ) -# 2638 "parsing/parser.ml" +# 2676 "parsing/parser.ml" in -# 3302 "parsing/parser.mly" +# 3386 "parsing/parser.mly" ( Ptyp_variant(_3, Open, None) ) -# 2644 "parsing/parser.ml" +# 2682 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2648,15 +2686,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2654 "parsing/parser.ml" +# 2692 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2660 "parsing/parser.ml" +# 2698 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2687,24 +2725,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3304 "parsing/parser.mly" +# 3388 "parsing/parser.mly" ( Ptyp_variant([], Open, None) ) -# 2693 "parsing/parser.ml" +# 2731 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2702 "parsing/parser.ml" +# 2740 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2708 "parsing/parser.ml" +# 2746 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2754,24 +2792,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2758 "parsing/parser.ml" +# 2796 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 2763 "parsing/parser.ml" +# 2801 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( _1 ) -# 2769 "parsing/parser.ml" +# 2807 "parsing/parser.ml" in -# 3306 "parsing/parser.mly" +# 3390 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, Some []) ) -# 2775 "parsing/parser.ml" +# 2813 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -2779,15 +2817,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2785 "parsing/parser.ml" +# 2823 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2791 "parsing/parser.ml" +# 2829 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2852,18 +2890,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2856 "parsing/parser.ml" +# 2894 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 2861 "parsing/parser.ml" +# 2899 "parsing/parser.ml" in -# 3369 "parsing/parser.mly" +# 3453 "parsing/parser.mly" ( _1 ) -# 2867 "parsing/parser.ml" +# 2905 "parsing/parser.ml" in let _3 = @@ -2871,24 +2909,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 2875 "parsing/parser.ml" +# 2913 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 2880 "parsing/parser.ml" +# 2918 "parsing/parser.ml" in -# 3341 "parsing/parser.mly" +# 3425 "parsing/parser.mly" ( _1 ) -# 2886 "parsing/parser.ml" +# 2924 "parsing/parser.ml" in -# 3308 "parsing/parser.mly" +# 3392 "parsing/parser.mly" ( Ptyp_variant(_3, Closed, Some _5) ) -# 2892 "parsing/parser.ml" +# 2930 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -2896,15 +2934,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2902 "parsing/parser.ml" +# 2940 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2908 "parsing/parser.ml" +# 2946 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2928,23 +2966,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 3310 "parsing/parser.mly" +# 3394 "parsing/parser.mly" ( Ptyp_extension _1 ) -# 2934 "parsing/parser.ml" +# 2972 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 2942 "parsing/parser.ml" +# 2980 "parsing/parser.ml" in -# 3312 "parsing/parser.mly" +# 3396 "parsing/parser.mly" ( _1 ) -# 2948 "parsing/parser.ml" +# 2986 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -2968,23 +3006,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (string Asttypes.loc) = let _1 = let _1 = -# 3724 "parsing/parser.mly" +# 3812 "parsing/parser.mly" ( _1 ) -# 2974 "parsing/parser.ml" +# 3012 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 847 "parsing/parser.mly" +# 913 "parsing/parser.mly" ( mkloc _1 (make_loc _sloc) ) -# 2982 "parsing/parser.ml" +# 3020 "parsing/parser.ml" in -# 3726 "parsing/parser.mly" +# 3814 "parsing/parser.mly" ( _1 ) -# 2988 "parsing/parser.ml" +# 3026 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3022,24 +3060,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (string Asttypes.loc) = let _1 = let _1 = -# 3725 "parsing/parser.mly" +# 3813 "parsing/parser.mly" ( _1 ^ "." ^ _3.txt ) -# 3028 "parsing/parser.ml" +# 3066 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 847 "parsing/parser.mly" +# 913 "parsing/parser.mly" ( mkloc _1 (make_loc _sloc) ) -# 3037 "parsing/parser.ml" +# 3075 "parsing/parser.ml" in -# 3726 "parsing/parser.mly" +# 3814 "parsing/parser.mly" ( _1 ) -# 3043 "parsing/parser.ml" +# 3081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3086,9 +3124,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3730 "parsing/parser.mly" +# 3818 "parsing/parser.mly" ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 3092 "parsing/parser.ml" +# 3130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3111,9 +3149,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = -# 1768 "parsing/parser.mly" +# 1858 "parsing/parser.mly" ( _1 ) -# 3117 "parsing/parser.ml" +# 3155 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3152,18 +3190,18 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3158 "parsing/parser.ml" +# 3196 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1770 "parsing/parser.mly" +# 1860 "parsing/parser.mly" ( wrap_class_attrs ~loc:_sloc _3 _2 ) -# 3167 "parsing/parser.ml" +# 3205 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3203,9 +3241,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1772 "parsing/parser.mly" +# 1862 "parsing/parser.mly" ( class_of_let_bindings ~loc:_sloc _1 _3 ) -# 3209 "parsing/parser.ml" +# 3247 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3268,34 +3306,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3274 "parsing/parser.ml" +# 3312 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3283 "parsing/parser.ml" +# 3321 "parsing/parser.ml" in let _3 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 3289 "parsing/parser.ml" +# 3327 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1774 "parsing/parser.mly" +# 1864 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3299 "parsing/parser.ml" +# 3337 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3365,37 +3403,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 3371 "parsing/parser.ml" +# 3409 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3380 "parsing/parser.ml" +# 3418 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 3388 "parsing/parser.ml" +# 3426 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1774 "parsing/parser.mly" +# 1864 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkclass ~loc:_sloc ~attrs:_4 (Pcl_open(od, _7)) ) -# 3399 "parsing/parser.ml" +# 3437 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3425,9 +3463,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1778 "parsing/parser.mly" +# 1868 "parsing/parser.mly" ( Cl.attr _1 _2 ) -# 3431 "parsing/parser.ml" +# 3469 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3462,18 +3500,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 3466 "parsing/parser.ml" +# 3504 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 3471 "parsing/parser.ml" +# 3509 "parsing/parser.ml" in -# 1781 "parsing/parser.mly" +# 1871 "parsing/parser.mly" ( Pcl_apply(_1, _2) ) -# 3477 "parsing/parser.ml" +# 3515 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -3481,15 +3519,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3487 "parsing/parser.ml" +# 3525 "parsing/parser.ml" in -# 1784 "parsing/parser.mly" +# 1874 "parsing/parser.mly" ( _1 ) -# 3493 "parsing/parser.ml" +# 3531 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3513,23 +3551,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1783 "parsing/parser.mly" +# 1873 "parsing/parser.mly" ( Pcl_extension _1 ) -# 3519 "parsing/parser.ml" +# 3557 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 3527 "parsing/parser.ml" +# 3565 "parsing/parser.ml" in -# 1784 "parsing/parser.mly" +# 1874 "parsing/parser.mly" ( _1 ) -# 3533 "parsing/parser.ml" +# 3571 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3582,33 +3620,33 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3588 "parsing/parser.ml" +# 3626 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3597 "parsing/parser.ml" +# 3635 "parsing/parser.ml" in let _2 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 3603 "parsing/parser.ml" +# 3641 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1833 "parsing/parser.mly" +# 1923 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3612 "parsing/parser.ml" +# 3650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3668,36 +3706,36 @@ module Tables = struct let _v : (Parsetree.class_field) = let _6 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3674 "parsing/parser.ml" +# 3712 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _3 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3683 "parsing/parser.ml" +# 3721 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 3691 "parsing/parser.ml" +# 3729 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1833 "parsing/parser.mly" +# 1923 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_inherit (_2, _4, self)) ~attrs:(_3@_6) ~docs ) -# 3701 "parsing/parser.ml" +# 3739 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3738,9 +3776,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3744 "parsing/parser.ml" +# 3782 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3748,11 +3786,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1836 "parsing/parser.mly" +# 1926 "parsing/parser.mly" ( let v, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_val v) ~attrs:(attrs@_3) ~docs ) -# 3756 "parsing/parser.ml" +# 3794 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3793,9 +3831,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _3 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3799 "parsing/parser.ml" +# 3837 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -3803,11 +3841,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1840 "parsing/parser.mly" +# 1930 "parsing/parser.mly" ( let meth, attrs = _2 in let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_method meth) ~attrs:(attrs@_3) ~docs ) -# 3811 "parsing/parser.ml" +# 3849 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3853,28 +3891,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3859 "parsing/parser.ml" +# 3897 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3868 "parsing/parser.ml" +# 3906 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1844 "parsing/parser.mly" +# 1934 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 3878 "parsing/parser.ml" +# 3916 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3920,28 +3958,28 @@ module Tables = struct let _v : (Parsetree.class_field) = let _4 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3926 "parsing/parser.ml" +# 3964 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 3935 "parsing/parser.ml" +# 3973 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1847 "parsing/parser.mly" +# 1937 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_initializer _3) ~attrs:(_2@_4) ~docs ) -# 3945 "parsing/parser.ml" +# 3983 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -3973,9 +4011,9 @@ module Tables = struct let _v : (Parsetree.class_field) = let _2 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 3979 "parsing/parser.ml" +# 4017 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -3983,10 +4021,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1850 "parsing/parser.mly" +# 1940 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkcf ~loc:_sloc (Pcf_extension _1) ~attrs:_2 ~docs ) -# 3990 "parsing/parser.ml" +# 4028 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4010,23 +4048,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_field) = let _1 = let _1 = -# 1853 "parsing/parser.mly" +# 1943 "parsing/parser.mly" ( Pcf_attribute _1 ) -# 4016 "parsing/parser.ml" +# 4054 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 868 "parsing/parser.mly" +# 934 "parsing/parser.mly" ( mkcf ~loc:_sloc _1 ) -# 4024 "parsing/parser.ml" +# 4062 "parsing/parser.ml" in -# 1854 "parsing/parser.mly" +# 1944 "parsing/parser.mly" ( _1 ) -# 4030 "parsing/parser.ml" +# 4068 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4056,9 +4094,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = -# 1748 "parsing/parser.mly" +# 1838 "parsing/parser.mly" ( _2 ) -# 4062 "parsing/parser.ml" +# 4100 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4103,24 +4141,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1751 "parsing/parser.mly" +# 1841 "parsing/parser.mly" ( Pcl_constraint(_4, _2) ) -# 4109 "parsing/parser.ml" +# 4147 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4118 "parsing/parser.ml" +# 4156 "parsing/parser.ml" in -# 1754 "parsing/parser.mly" +# 1844 "parsing/parser.mly" ( _1 ) -# 4124 "parsing/parser.ml" +# 4162 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4151,24 +4189,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1753 "parsing/parser.mly" +# 1843 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, _2) ) -# 4157 "parsing/parser.ml" +# 4195 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4166 "parsing/parser.ml" +# 4204 "parsing/parser.ml" in -# 1754 "parsing/parser.mly" +# 1844 "parsing/parser.mly" ( _1 ) -# 4172 "parsing/parser.ml" +# 4210 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4206,24 +4244,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1809 "parsing/parser.mly" +# 1899 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4212 "parsing/parser.ml" +# 4250 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4221 "parsing/parser.ml" +# 4259 "parsing/parser.ml" in -# 1810 "parsing/parser.mly" +# 1900 "parsing/parser.mly" ( _1 ) -# 4227 "parsing/parser.ml" +# 4265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4254,24 +4292,24 @@ module Tables = struct let _endpos = _endpos_e_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1809 "parsing/parser.mly" +# 1899 "parsing/parser.mly" ( let (l,o,p) = _1 in Pcl_fun(l, o, p, e) ) -# 4260 "parsing/parser.ml" +# 4298 "parsing/parser.ml" in let _endpos__1_ = _endpos_e_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 4269 "parsing/parser.ml" +# 4307 "parsing/parser.ml" in -# 1810 "parsing/parser.mly" +# 1900 "parsing/parser.mly" ( _1 ) -# 4275 "parsing/parser.ml" +# 4313 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4294,9 +4332,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3535 "parsing/parser.mly" +# 3619 "parsing/parser.mly" ( _1 ) -# 4300 "parsing/parser.ml" +# 4338 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4336,9 +4374,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1818 "parsing/parser.mly" +# 1908 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 4342 "parsing/parser.ml" +# 4380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4390,24 +4428,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 1820 "parsing/parser.mly" +# 1910 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 4396 "parsing/parser.ml" +# 4434 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 4405 "parsing/parser.ml" +# 4443 "parsing/parser.ml" in -# 1821 "parsing/parser.mly" +# 1911 "parsing/parser.mly" ( _1 ) -# 4411 "parsing/parser.ml" +# 4449 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4426,9 +4464,9 @@ module Tables = struct let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 1823 "parsing/parser.mly" +# 1913 "parsing/parser.mly" ( ghpat ~loc:_sloc Ppat_any ) -# 4432 "parsing/parser.ml" +# 4470 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4465,9 +4503,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type) = -# 1948 "parsing/parser.mly" +# 2038 "parsing/parser.mly" ( _2 ) -# 4471 "parsing/parser.ml" +# 4509 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4484,24 +4522,24 @@ module Tables = struct let _endpos = _startpos in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 1949 "parsing/parser.mly" +# 2039 "parsing/parser.mly" ( Ptyp_any ) -# 4490 "parsing/parser.ml" +# 4528 "parsing/parser.ml" in let _endpos__1_ = _endpos__0_ in let _endpos = _endpos__1_ in let _symbolstartpos = _endpos in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 4499 "parsing/parser.ml" +# 4537 "parsing/parser.ml" in -# 1950 "parsing/parser.mly" +# 2040 "parsing/parser.mly" ( _1 ) -# 4505 "parsing/parser.ml" +# 4543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4547,28 +4585,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 4553 "parsing/parser.ml" +# 4591 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 4562 "parsing/parser.ml" +# 4600 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1958 "parsing/parser.mly" +# 2048 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_inherit _3) ~attrs:(_2@_4) ~docs ) -# 4572 "parsing/parser.ml" +# 4610 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4626,9 +4664,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _3 : unit = Obj.magic _3 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 4632 "parsing/parser.ml" +# 4670 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let flags : (Asttypes.mutable_flag * Asttypes.virtual_flag) = Obj.magic flags in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4639,9 +4677,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 4645 "parsing/parser.ml" +# 4683 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined3_ in @@ -4649,44 +4687,44 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let label = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 4655 "parsing/parser.ml" +# 4693 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4663 "parsing/parser.ml" +# 4701 "parsing/parser.ml" in -# 1983 "parsing/parser.mly" +# 2073 "parsing/parser.mly" ( let mut, virt = flags in label, mut, virt, ty ) -# 4672 "parsing/parser.ml" +# 4710 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 4680 "parsing/parser.ml" +# 4718 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1961 "parsing/parser.mly" +# 2051 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_val _3) ~attrs:(_2@_4) ~docs ) -# 4690 "parsing/parser.ml" +# 4728 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4744,9 +4782,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 4750 "parsing/parser.ml" +# 4788 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag * Asttypes.virtual_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -4757,53 +4795,53 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _7 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 4763 "parsing/parser.ml" +# 4801 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _6 = let _1 = _1_inlined3 in -# 3180 "parsing/parser.mly" +# 3264 "parsing/parser.mly" ( _1 ) -# 4772 "parsing/parser.ml" +# 4810 "parsing/parser.ml" in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 4780 "parsing/parser.ml" +# 4818 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4788 "parsing/parser.ml" +# 4826 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 4796 "parsing/parser.ml" +# 4834 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1965 "parsing/parser.mly" +# 2055 "parsing/parser.mly" ( let (p, v) = _3 in let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_method (_4, p, v, _6)) ~attrs:(_2@_7) ~docs ) -# 4807 "parsing/parser.ml" +# 4845 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4849,28 +4887,28 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _4 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 4855 "parsing/parser.ml" +# 4893 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 4864 "parsing/parser.ml" +# 4902 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1969 "parsing/parser.mly" +# 2059 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_constraint _3) ~attrs:(_2@_4) ~docs ) -# 4874 "parsing/parser.ml" +# 4912 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4902,9 +4940,9 @@ module Tables = struct let _v : (Parsetree.class_type_field) = let _2 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 4908 "parsing/parser.ml" +# 4946 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -4912,10 +4950,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1972 "parsing/parser.mly" +# 2062 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mkctf ~loc:_sloc (Pctf_extension _1) ~attrs:_2 ~docs ) -# 4919 "parsing/parser.ml" +# 4957 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4939,23 +4977,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type_field) = let _1 = let _1 = -# 1975 "parsing/parser.mly" +# 2065 "parsing/parser.mly" ( Pctf_attribute _1 ) -# 4945 "parsing/parser.ml" +# 4983 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 866 "parsing/parser.mly" +# 932 "parsing/parser.mly" ( mkctf ~loc:_sloc _1 ) -# 4953 "parsing/parser.ml" +# 4991 "parsing/parser.ml" in -# 1976 "parsing/parser.mly" +# 2066 "parsing/parser.mly" ( _1 ) -# 4959 "parsing/parser.ml" +# 4997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -4984,42 +5022,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 4990 "parsing/parser.ml" +# 5028 "parsing/parser.ml" in let tys = let tys = -# 1934 "parsing/parser.mly" +# 2024 "parsing/parser.mly" ( [] ) -# 4997 "parsing/parser.ml" +# 5035 "parsing/parser.ml" in -# 1940 "parsing/parser.mly" +# 2030 "parsing/parser.mly" ( tys ) -# 5002 "parsing/parser.ml" +# 5040 "parsing/parser.ml" in -# 1917 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5008 "parsing/parser.ml" +# 5046 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5017 "parsing/parser.ml" +# 5055 "parsing/parser.ml" in -# 1920 "parsing/parser.mly" +# 2010 "parsing/parser.mly" ( _1 ) -# 5023 "parsing/parser.ml" +# 5061 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5070,9 +5108,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5076 "parsing/parser.ml" +# 5114 "parsing/parser.ml" in let tys = @@ -5081,30 +5119,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5085 "parsing/parser.ml" +# 5123 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 5090 "parsing/parser.ml" +# 5128 "parsing/parser.ml" in -# 1936 "parsing/parser.mly" +# 2026 "parsing/parser.mly" ( params ) -# 5096 "parsing/parser.ml" +# 5134 "parsing/parser.ml" in -# 1940 "parsing/parser.mly" +# 2030 "parsing/parser.mly" ( tys ) -# 5102 "parsing/parser.ml" +# 5140 "parsing/parser.ml" in -# 1917 "parsing/parser.mly" +# 2007 "parsing/parser.mly" ( Pcty_constr (cid, tys) ) -# 5108 "parsing/parser.ml" +# 5146 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5112,15 +5150,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5118 "parsing/parser.ml" +# 5156 "parsing/parser.ml" in -# 1920 "parsing/parser.mly" +# 2010 "parsing/parser.mly" ( _1 ) -# 5124 "parsing/parser.ml" +# 5162 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5144,23 +5182,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = let _1 = let _1 = -# 1919 "parsing/parser.mly" +# 2009 "parsing/parser.mly" ( Pcty_extension _1 ) -# 5150 "parsing/parser.ml" +# 5188 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 5158 "parsing/parser.ml" +# 5196 "parsing/parser.ml" in -# 1920 "parsing/parser.mly" +# 2010 "parsing/parser.mly" ( _1 ) -# 5164 "parsing/parser.ml" +# 5202 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5217,44 +5255,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5221 "parsing/parser.ml" +# 5259 "parsing/parser.ml" in -# 1954 "parsing/parser.mly" +# 2044 "parsing/parser.mly" ( _1 ) -# 5226 "parsing/parser.ml" +# 5264 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 812 "parsing/parser.mly" +# 878 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5235 "parsing/parser.ml" +# 5273 "parsing/parser.ml" in -# 1944 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5241 "parsing/parser.ml" +# 5279 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 5249 "parsing/parser.ml" +# 5287 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1922 "parsing/parser.mly" +# 2012 "parsing/parser.mly" ( mkcty ~loc:_sloc ~attrs:_2 (Pcty_signature _3) ) -# 5258 "parsing/parser.ml" +# 5296 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5311,43 +5349,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5315 "parsing/parser.ml" +# 5353 "parsing/parser.ml" in -# 1954 "parsing/parser.mly" +# 2044 "parsing/parser.mly" ( _1 ) -# 5320 "parsing/parser.ml" +# 5358 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 812 "parsing/parser.mly" +# 878 "parsing/parser.mly" ( extra_csig _startpos _endpos _1 ) -# 5329 "parsing/parser.ml" +# 5367 "parsing/parser.ml" in -# 1944 "parsing/parser.mly" +# 2034 "parsing/parser.mly" ( Csig.mk _1 _2 ) -# 5335 "parsing/parser.ml" +# 5373 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 5343 "parsing/parser.ml" +# 5381 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1924 "parsing/parser.mly" +# 2014 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5351 "parsing/parser.ml" +# 5389 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5377,9 +5415,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.class_type) = -# 1926 "parsing/parser.mly" +# 2016 "parsing/parser.mly" ( Cty.attr _1 _2 ) -# 5383 "parsing/parser.ml" +# 5421 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5442,34 +5480,34 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5448 "parsing/parser.ml" +# 5486 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in let _4 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 5457 "parsing/parser.ml" +# 5495 "parsing/parser.ml" in let _3 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 5463 "parsing/parser.ml" +# 5501 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1928 "parsing/parser.mly" +# 2018 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5473 "parsing/parser.ml" +# 5511 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5539,37 +5577,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5545 "parsing/parser.ml" +# 5583 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 5554 "parsing/parser.ml" +# 5592 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 5562 "parsing/parser.ml" +# 5600 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1928 "parsing/parser.mly" +# 2018 "parsing/parser.mly" ( let loc = (_startpos__2_, _endpos__5_) in let od = Opn.mk ~override:_3 ~loc:(make_loc loc) _5 in mkcty ~loc:_sloc ~attrs:_4 (Pcty_open(od, _7)) ) -# 5573 "parsing/parser.ml" +# 5611 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5606,9 +5644,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.class_expr) = -# 1788 "parsing/parser.mly" +# 1878 "parsing/parser.mly" ( _2 ) -# 5612 "parsing/parser.ml" +# 5650 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5647,9 +5685,9 @@ module Tables = struct let _v : (Parsetree.class_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1790 "parsing/parser.mly" +# 1880 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 5653 "parsing/parser.ml" +# 5691 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5678,42 +5716,42 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5684 "parsing/parser.ml" +# 5722 "parsing/parser.ml" in let tys = let tys = -# 1934 "parsing/parser.mly" +# 2024 "parsing/parser.mly" ( [] ) -# 5691 "parsing/parser.ml" +# 5729 "parsing/parser.ml" in -# 1940 "parsing/parser.mly" +# 2030 "parsing/parser.mly" ( tys ) -# 5696 "parsing/parser.ml" +# 5734 "parsing/parser.ml" in -# 1793 "parsing/parser.mly" +# 1883 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5702 "parsing/parser.ml" +# 5740 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5711 "parsing/parser.ml" +# 5749 "parsing/parser.ml" in -# 1800 "parsing/parser.mly" +# 1890 "parsing/parser.mly" ( _1 ) -# 5717 "parsing/parser.ml" +# 5755 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5764,9 +5802,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 5770 "parsing/parser.ml" +# 5808 "parsing/parser.ml" in let tys = @@ -5775,30 +5813,30 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 5779 "parsing/parser.ml" +# 5817 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 5784 "parsing/parser.ml" +# 5822 "parsing/parser.ml" in -# 1936 "parsing/parser.mly" +# 2026 "parsing/parser.mly" ( params ) -# 5790 "parsing/parser.ml" +# 5828 "parsing/parser.ml" in -# 1940 "parsing/parser.mly" +# 2030 "parsing/parser.mly" ( tys ) -# 5796 "parsing/parser.ml" +# 5834 "parsing/parser.ml" in -# 1793 "parsing/parser.mly" +# 1883 "parsing/parser.mly" ( Pcl_constr(cid, tys) ) -# 5802 "parsing/parser.ml" +# 5840 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -5806,15 +5844,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5812 "parsing/parser.ml" +# 5850 "parsing/parser.ml" in -# 1800 "parsing/parser.mly" +# 1890 "parsing/parser.mly" ( _1 ) -# 5818 "parsing/parser.ml" +# 5856 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5873,43 +5911,43 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 5877 "parsing/parser.ml" +# 5915 "parsing/parser.ml" in -# 1827 "parsing/parser.mly" +# 1917 "parsing/parser.mly" ( _1 ) -# 5882 "parsing/parser.ml" +# 5920 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 811 "parsing/parser.mly" +# 877 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 5891 "parsing/parser.ml" +# 5929 "parsing/parser.ml" in -# 1814 "parsing/parser.mly" +# 1904 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 5897 "parsing/parser.ml" +# 5935 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 5905 "parsing/parser.ml" +# 5943 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1795 "parsing/parser.mly" +# 1885 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 5913 "parsing/parser.ml" +# 5951 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -5917,15 +5955,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5923 "parsing/parser.ml" +# 5961 "parsing/parser.ml" in -# 1800 "parsing/parser.mly" +# 1890 "parsing/parser.mly" ( _1 ) -# 5929 "parsing/parser.ml" +# 5967 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -5977,24 +6015,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.class_expr) = let _1 = let _1 = -# 1797 "parsing/parser.mly" +# 1887 "parsing/parser.mly" ( Pcl_constraint(_2, _4) ) -# 5983 "parsing/parser.ml" +# 6021 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 5992 "parsing/parser.ml" +# 6030 "parsing/parser.ml" in -# 1800 "parsing/parser.mly" +# 1890 "parsing/parser.mly" ( _1 ) -# 5998 "parsing/parser.ml" +# 6036 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6049,9 +6087,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1799 "parsing/parser.mly" +# 1889 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 6055 "parsing/parser.ml" +# 6093 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -6059,15 +6097,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 870 "parsing/parser.mly" +# 936 "parsing/parser.mly" ( mkclass ~loc:_sloc _1 ) -# 6065 "parsing/parser.ml" +# 6103 "parsing/parser.ml" in -# 1800 "parsing/parser.mly" +# 1890 "parsing/parser.mly" ( _1 ) -# 6071 "parsing/parser.ml" +# 6109 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6124,44 +6162,44 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 6128 "parsing/parser.ml" +# 6166 "parsing/parser.ml" in -# 1827 "parsing/parser.mly" +# 1917 "parsing/parser.mly" ( _1 ) -# 6133 "parsing/parser.ml" +# 6171 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 811 "parsing/parser.mly" +# 877 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 6142 "parsing/parser.ml" +# 6180 "parsing/parser.ml" in -# 1814 "parsing/parser.mly" +# 1904 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 6148 "parsing/parser.ml" +# 6186 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 6156 "parsing/parser.ml" +# 6194 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1802 "parsing/parser.mly" +# 1892 "parsing/parser.mly" ( mkclass ~loc:_sloc ~attrs:_2 (Pcl_structure _3) ) -# 6165 "parsing/parser.ml" +# 6203 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6184,9 +6222,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.class_type) = -# 1905 "parsing/parser.mly" +# 1995 "parsing/parser.mly" ( _1 ) -# 6190 "parsing/parser.ml" +# 6228 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6232,14 +6270,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3243 "parsing/parser.mly" +# 3327 "parsing/parser.mly" ( Optional label ) -# 6238 "parsing/parser.ml" +# 6276 "parsing/parser.ml" in -# 1911 "parsing/parser.mly" +# 2001 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6243 "parsing/parser.ml" +# 6281 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6247,15 +6285,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6253 "parsing/parser.ml" +# 6291 "parsing/parser.ml" in -# 1912 "parsing/parser.mly" +# 2002 "parsing/parser.mly" ( _1 ) -# 6259 "parsing/parser.ml" +# 6297 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6302,9 +6340,9 @@ module Tables = struct let domain : (Parsetree.core_type) = Obj.magic domain in let _2 : unit = Obj.magic _2 in let label : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 6308 "parsing/parser.ml" +# 6346 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -6312,14 +6350,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3245 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( Labelled label ) -# 6318 "parsing/parser.ml" +# 6356 "parsing/parser.ml" in -# 1911 "parsing/parser.mly" +# 2001 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6323 "parsing/parser.ml" +# 6361 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -6327,15 +6365,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6333 "parsing/parser.ml" +# 6371 "parsing/parser.ml" in -# 1912 "parsing/parser.mly" +# 2002 "parsing/parser.mly" ( _1 ) -# 6339 "parsing/parser.ml" +# 6377 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6374,14 +6412,14 @@ module Tables = struct let _v : (Parsetree.class_type) = let _1 = let _1 = let label = -# 3247 "parsing/parser.mly" +# 3331 "parsing/parser.mly" ( Nolabel ) -# 6380 "parsing/parser.ml" +# 6418 "parsing/parser.ml" in -# 1911 "parsing/parser.mly" +# 2001 "parsing/parser.mly" ( Pcty_arrow(label, domain, codomain) ) -# 6385 "parsing/parser.ml" +# 6423 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_domain_) in @@ -6389,15 +6427,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 864 "parsing/parser.mly" +# 930 "parsing/parser.mly" ( mkcty ~loc:_sloc _1 ) -# 6395 "parsing/parser.ml" +# 6433 "parsing/parser.ml" in -# 1912 "parsing/parser.mly" +# 2002 "parsing/parser.mly" ( _1 ) -# 6401 "parsing/parser.ml" +# 6439 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6480,9 +6518,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _8 : unit = Obj.magic _8 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 6486 "parsing/parser.ml" +# 6524 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -6498,9 +6536,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 6504 "parsing/parser.ml" +# 6542 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -6510,24 +6548,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 6516 "parsing/parser.ml" +# 6554 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 6524 "parsing/parser.ml" +# 6562 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2050 "parsing/parser.mly" +# 2140 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -6535,19 +6573,19 @@ module Tables = struct ext, Ci.mk id csig ~virt ~params ~attrs ~loc ~docs ) -# 6539 "parsing/parser.ml" +# 6577 "parsing/parser.ml" in -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 6545 "parsing/parser.ml" +# 6583 "parsing/parser.ml" in -# 2038 "parsing/parser.mly" +# 2128 "parsing/parser.mly" ( _1 ) -# 6551 "parsing/parser.ml" +# 6589 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6570,9 +6608,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3532 "parsing/parser.mly" +# 3616 "parsing/parser.mly" ( _1 ) -# 6576 "parsing/parser.ml" +# 6614 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6591,17 +6629,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 637 "parsing/parser.mly" +# 691 "parsing/parser.mly" (string * char option) -# 6597 "parsing/parser.ml" +# 6635 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3415 "parsing/parser.mly" +# 3499 "parsing/parser.mly" ( let (n, m) = _1 in Pconst_integer (n, m) ) -# 6605 "parsing/parser.ml" +# 6643 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6620,17 +6658,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 596 "parsing/parser.mly" +# 650 "parsing/parser.mly" (char) -# 6626 "parsing/parser.ml" +# 6664 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3416 "parsing/parser.mly" +# 3500 "parsing/parser.mly" ( Pconst_char _1 ) -# 6634 "parsing/parser.ml" +# 6672 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6649,17 +6687,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 689 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * Location.t * string option) -# 6655 "parsing/parser.ml" +# 6693 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3417 "parsing/parser.mly" +# 3501 "parsing/parser.mly" ( let (s, strloc, d) = _1 in Pconst_string (s, strloc, d) ) -# 6663 "parsing/parser.ml" +# 6701 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6678,17 +6716,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 616 "parsing/parser.mly" +# 670 "parsing/parser.mly" (string * char option) -# 6684 "parsing/parser.ml" +# 6722 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3418 "parsing/parser.mly" +# 3502 "parsing/parser.mly" ( let (f, m) = _1 in Pconst_float (f, m) ) -# 6692 "parsing/parser.ml" +# 6730 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6718,9 +6756,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3489 "parsing/parser.mly" +# 3573 "parsing/parser.mly" ( "[]" ) -# 6724 "parsing/parser.ml" +# 6762 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6750,9 +6788,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3490 "parsing/parser.mly" +# 3574 "parsing/parser.mly" ( "()" ) -# 6756 "parsing/parser.ml" +# 6794 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6775,9 +6813,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3491 "parsing/parser.mly" +# 3575 "parsing/parser.mly" ( "false" ) -# 6781 "parsing/parser.ml" +# 6819 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6800,9 +6838,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3492 "parsing/parser.mly" +# 3576 "parsing/parser.mly" ( "true" ) -# 6806 "parsing/parser.ml" +# 6844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6821,17 +6859,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 6827 "parsing/parser.ml" +# 6865 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3495 "parsing/parser.mly" +# 3579 "parsing/parser.mly" ( _1 ) -# 6835 "parsing/parser.ml" +# 6873 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6868,14 +6906,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _1 = -# 3486 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( "::" ) -# 6874 "parsing/parser.ml" +# 6912 "parsing/parser.ml" in -# 3496 "parsing/parser.mly" +# 3580 "parsing/parser.mly" ( _1 ) -# 6879 "parsing/parser.ml" +# 6917 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6898,9 +6936,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3497 "parsing/parser.mly" +# 3581 "parsing/parser.mly" ( _1 ) -# 6904 "parsing/parser.ml" +# 6942 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6923,9 +6961,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3500 "parsing/parser.mly" +# 3584 "parsing/parser.mly" ( _1 ) -# 6929 "parsing/parser.ml" +# 6967 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -6978,15 +7016,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let (_2, _1) = (_2_inlined1, _1_inlined1) in -# 3486 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( "::" ) -# 6984 "parsing/parser.ml" +# 7022 "parsing/parser.ml" in -# 3501 "parsing/parser.mly" +# 3585 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 6990 "parsing/parser.ml" +# 7028 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7023,14 +7061,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = -# 3486 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( "::" ) -# 7029 "parsing/parser.ml" +# 7067 "parsing/parser.ml" in -# 3502 "parsing/parser.mly" +# 3586 "parsing/parser.mly" ( Lident _1 ) -# 7034 "parsing/parser.ml" +# 7072 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7053,9 +7091,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3503 "parsing/parser.mly" +# 3587 "parsing/parser.mly" ( Lident _1 ) -# 7059 "parsing/parser.ml" +# 7097 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7092,9 +7130,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.core_type * Parsetree.core_type) = -# 1994 "parsing/parser.mly" +# 2084 "parsing/parser.mly" ( _1, _3 ) -# 7098 "parsing/parser.ml" +# 7136 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7119,26 +7157,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 7125 "parsing/parser.ml" +# 7163 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7130 "parsing/parser.ml" +# 7168 "parsing/parser.ml" in -# 955 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( xs ) -# 7136 "parsing/parser.ml" +# 7174 "parsing/parser.ml" in -# 3050 "parsing/parser.mly" +# 3130 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7142 "parsing/parser.ml" +# 7180 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7177,26 +7215,26 @@ module Tables = struct let _v : (Parsetree.constructor_arguments) = let tys = let xs = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 7183 "parsing/parser.ml" +# 7221 "parsing/parser.ml" in # 253 "" ( List.rev xs ) -# 7188 "parsing/parser.ml" +# 7226 "parsing/parser.ml" in -# 955 "parsing/parser.mly" +# 1021 "parsing/parser.mly" ( xs ) -# 7194 "parsing/parser.ml" +# 7232 "parsing/parser.ml" in -# 3050 "parsing/parser.mly" +# 3130 "parsing/parser.mly" ( Pcstr_tuple tys ) -# 7200 "parsing/parser.ml" +# 7238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7233,9 +7271,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.constructor_arguments) = -# 3052 "parsing/parser.mly" +# 3132 "parsing/parser.mly" ( Pcstr_record _2 ) -# 7239 "parsing/parser.ml" +# 7277 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7258,9 +7296,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constructor_declaration list) = -# 2971 "parsing/parser.mly" +# 3051 "parsing/parser.mly" ( [] ) -# 7264 "parsing/parser.ml" +# 7302 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7283,14 +7321,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.constructor_declaration list) = let cs = -# 1040 "parsing/parser.mly" +# 1106 "parsing/parser.mly" ( List.rev xs ) -# 7289 "parsing/parser.ml" +# 7327 "parsing/parser.ml" in -# 2973 "parsing/parser.mly" +# 3053 "parsing/parser.mly" ( cs ) -# 7294 "parsing/parser.ml" +# 7332 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7313,14 +7351,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 7319 "parsing/parser.ml" +# 7357 "parsing/parser.ml" in -# 3195 "parsing/parser.mly" +# 3279 "parsing/parser.mly" ( _1 ) -# 7324 "parsing/parser.ml" +# 7362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7350,9 +7388,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type) = -# 3197 "parsing/parser.mly" +# 3281 "parsing/parser.mly" ( Typ.attr _1 _2 ) -# 7356 "parsing/parser.ml" +# 7394 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7375,9 +7413,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.direction_flag) = -# 3594 "parsing/parser.mly" +# 3682 "parsing/parser.mly" ( Upto ) -# 7381 "parsing/parser.ml" +# 7419 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7400,9 +7438,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.direction_flag) = -# 3595 "parsing/parser.mly" +# 3683 "parsing/parser.mly" ( Downto ) -# 7406 "parsing/parser.ml" +# 7444 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7425,9 +7463,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2141 "parsing/parser.mly" +# 2251 "parsing/parser.mly" ( _1 ) -# 7431 "parsing/parser.ml" +# 7469 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7505,9 +7543,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 7511 "parsing/parser.ml" +# 7549 "parsing/parser.ml" in let _3 = @@ -7515,21 +7553,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7521 "parsing/parser.ml" +# 7559 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 7527 "parsing/parser.ml" +# 7565 "parsing/parser.ml" in -# 2189 "parsing/parser.mly" +# 2284 "parsing/parser.mly" ( Pexp_letmodule(_4, _5, _7), _3 ) -# 7533 "parsing/parser.ml" +# 7571 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -7537,10 +7575,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 7544 "parsing/parser.ml" +# 7582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7624,9 +7662,9 @@ module Tables = struct let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7630 "parsing/parser.ml" +# 7668 "parsing/parser.ml" in let _endpos__3_ = _endpos__1_inlined1_ in @@ -7635,19 +7673,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 7641 "parsing/parser.ml" +# 7679 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3035 "parsing/parser.mly" +# 3115 "parsing/parser.mly" ( let args, res = _2 in Te.decl _1 ~args ?res ~attrs:_3 ~loc:(make_loc _sloc) ) -# 7651 "parsing/parser.ml" +# 7689 "parsing/parser.ml" in let _3 = @@ -7655,21 +7693,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7661 "parsing/parser.ml" +# 7699 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 7667 "parsing/parser.ml" +# 7705 "parsing/parser.ml" in -# 2191 "parsing/parser.mly" +# 2286 "parsing/parser.mly" ( Pexp_letexception(_4, _6), _3 ) -# 7673 "parsing/parser.ml" +# 7711 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -7677,10 +7715,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 7684 "parsing/parser.ml" +# 7722 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7750,28 +7788,28 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7756 "parsing/parser.ml" +# 7794 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 7762 "parsing/parser.ml" +# 7800 "parsing/parser.ml" in let _3 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 7768 "parsing/parser.ml" +# 7806 "parsing/parser.ml" in -# 2193 "parsing/parser.mly" +# 2288 "parsing/parser.mly" ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in let od = Opn.mk _5 ~override:_3 ~loc:open_loc in Pexp_open(od, _7), _4 ) -# 7775 "parsing/parser.ml" +# 7813 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -7779,10 +7817,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 7786 "parsing/parser.ml" +# 7824 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7859,31 +7897,31 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7865 "parsing/parser.ml" +# 7903 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 7871 "parsing/parser.ml" +# 7909 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 7879 "parsing/parser.ml" +# 7917 "parsing/parser.ml" in -# 2193 "parsing/parser.mly" +# 2288 "parsing/parser.mly" ( let open_loc = make_loc (_startpos__2_, _endpos__5_) in let od = Opn.mk _5 ~override:_3 ~loc:open_loc in Pexp_open(od, _7), _4 ) -# 7887 "parsing/parser.ml" +# 7925 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -7891,10 +7929,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 7898 "parsing/parser.ml" +# 7936 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -7943,18 +7981,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 7947 "parsing/parser.ml" +# 7985 "parsing/parser.ml" in -# 1012 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( xs ) -# 7952 "parsing/parser.ml" +# 7990 "parsing/parser.ml" in -# 2521 "parsing/parser.mly" +# 2598 "parsing/parser.mly" ( xs ) -# 7958 "parsing/parser.ml" +# 7996 "parsing/parser.ml" in let _2 = @@ -7962,21 +8000,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 7968 "parsing/parser.ml" +# 8006 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 7974 "parsing/parser.ml" +# 8012 "parsing/parser.ml" in -# 2197 "parsing/parser.mly" +# 2292 "parsing/parser.mly" ( Pexp_function _3, _2 ) -# 7980 "parsing/parser.ml" +# 8018 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -7984,10 +8022,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 7991 "parsing/parser.ml" +# 8029 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8043,22 +8081,22 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8049 "parsing/parser.ml" +# 8087 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8055 "parsing/parser.ml" +# 8093 "parsing/parser.ml" in -# 2199 "parsing/parser.mly" +# 2294 "parsing/parser.mly" ( let (l,o,p) = _3 in Pexp_fun(l, o, p, _4), _2 ) -# 8062 "parsing/parser.ml" +# 8100 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -8066,10 +8104,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8073 "parsing/parser.ml" +# 8111 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8142,33 +8180,33 @@ module Tables = struct let _endpos = _endpos__7_ in let _v : (Parsetree.expression) = let _1 = let _5 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 8148 "parsing/parser.ml" +# 8186 "parsing/parser.ml" in let _2 = let (_1_inlined1, _1) = (_1_inlined2, _1_inlined1) in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8157 "parsing/parser.ml" +# 8195 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8163 "parsing/parser.ml" +# 8201 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2202 "parsing/parser.mly" +# 2297 "parsing/parser.mly" ( (mk_newtypes ~loc:_sloc _5 _7).pexp_desc, _2 ) -# 8172 "parsing/parser.ml" +# 8210 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -8176,10 +8214,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8183 "parsing/parser.ml" +# 8221 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8242,18 +8280,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 8246 "parsing/parser.ml" +# 8284 "parsing/parser.ml" in -# 1012 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( xs ) -# 8251 "parsing/parser.ml" +# 8289 "parsing/parser.ml" in -# 2521 "parsing/parser.mly" +# 2598 "parsing/parser.mly" ( xs ) -# 8257 "parsing/parser.ml" +# 8295 "parsing/parser.ml" in let _2 = @@ -8261,21 +8299,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8267 "parsing/parser.ml" +# 8305 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8273 "parsing/parser.ml" +# 8311 "parsing/parser.ml" in -# 2204 "parsing/parser.mly" +# 2299 "parsing/parser.mly" ( Pexp_match(_3, _5), _2 ) -# 8279 "parsing/parser.ml" +# 8317 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -8283,10 +8321,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8290 "parsing/parser.ml" +# 8328 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8349,18 +8387,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 8353 "parsing/parser.ml" +# 8391 "parsing/parser.ml" in -# 1012 "parsing/parser.mly" +# 1078 "parsing/parser.mly" ( xs ) -# 8358 "parsing/parser.ml" +# 8396 "parsing/parser.ml" in -# 2521 "parsing/parser.mly" +# 2598 "parsing/parser.mly" ( xs ) -# 8364 "parsing/parser.ml" +# 8402 "parsing/parser.ml" in let _2 = @@ -8368,21 +8406,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8374 "parsing/parser.ml" +# 8412 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8380 "parsing/parser.ml" +# 8418 "parsing/parser.ml" in -# 2206 "parsing/parser.mly" +# 2301 "parsing/parser.mly" ( Pexp_try(_3, _5), _2 ) -# 8386 "parsing/parser.ml" +# 8424 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -8390,10 +8428,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8397 "parsing/parser.ml" +# 8435 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8456,21 +8494,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8462 "parsing/parser.ml" +# 8500 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8468 "parsing/parser.ml" +# 8506 "parsing/parser.ml" in -# 2208 "parsing/parser.mly" +# 2303 "parsing/parser.mly" ( syntax_error() ) -# 8474 "parsing/parser.ml" +# 8512 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -8478,10 +8516,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8485 "parsing/parser.ml" +# 8523 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8558,21 +8596,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8564 "parsing/parser.ml" +# 8602 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8570 "parsing/parser.ml" +# 8608 "parsing/parser.ml" in -# 2210 "parsing/parser.mly" +# 2305 "parsing/parser.mly" ( Pexp_ifthenelse(_3, _5, Some _7), _2 ) -# 8576 "parsing/parser.ml" +# 8614 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -8580,10 +8618,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8587 "parsing/parser.ml" +# 8625 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8646,21 +8684,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8652 "parsing/parser.ml" +# 8690 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8658 "parsing/parser.ml" +# 8696 "parsing/parser.ml" in -# 2212 "parsing/parser.mly" +# 2307 "parsing/parser.mly" ( Pexp_ifthenelse(_3, _5, None), _2 ) -# 8664 "parsing/parser.ml" +# 8702 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -8668,10 +8706,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8675 "parsing/parser.ml" +# 8713 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8741,21 +8779,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8747 "parsing/parser.ml" +# 8785 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8753 "parsing/parser.ml" +# 8791 "parsing/parser.ml" in -# 2214 "parsing/parser.mly" +# 2309 "parsing/parser.mly" ( Pexp_while(_3, _5), _2 ) -# 8759 "parsing/parser.ml" +# 8797 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -8763,10 +8801,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8770 "parsing/parser.ml" +# 8808 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8864,21 +8902,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8870 "parsing/parser.ml" +# 8908 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8876 "parsing/parser.ml" +# 8914 "parsing/parser.ml" in -# 2217 "parsing/parser.mly" +# 2312 "parsing/parser.mly" ( Pexp_for(_3, _5, _7, _6, _9), _2 ) -# 8882 "parsing/parser.ml" +# 8920 "parsing/parser.ml" in let _endpos__1_ = _endpos__10_ in @@ -8886,10 +8924,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8893 "parsing/parser.ml" +# 8931 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -8938,21 +8976,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 8944 "parsing/parser.ml" +# 8982 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 8950 "parsing/parser.ml" +# 8988 "parsing/parser.ml" in -# 2219 "parsing/parser.mly" +# 2314 "parsing/parser.mly" ( Pexp_assert _3, _2 ) -# 8956 "parsing/parser.ml" +# 8994 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -8960,10 +8998,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 8967 "parsing/parser.ml" +# 9005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9012,21 +9050,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 9018 "parsing/parser.ml" +# 9056 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 9024 "parsing/parser.ml" +# 9062 "parsing/parser.ml" in -# 2221 "parsing/parser.mly" +# 2316 "parsing/parser.mly" ( Pexp_lazy _3, _2 ) -# 9030 "parsing/parser.ml" +# 9068 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -9034,10 +9072,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9041 "parsing/parser.ml" +# 9079 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9102,27 +9140,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 9106 "parsing/parser.ml" +# 9144 "parsing/parser.ml" in -# 1827 "parsing/parser.mly" +# 1917 "parsing/parser.mly" ( _1 ) -# 9111 "parsing/parser.ml" +# 9149 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 811 "parsing/parser.mly" +# 877 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 9120 "parsing/parser.ml" +# 9158 "parsing/parser.ml" in -# 1814 "parsing/parser.mly" +# 1904 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 9126 "parsing/parser.ml" +# 9164 "parsing/parser.ml" in let _2 = @@ -9130,21 +9168,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 9136 "parsing/parser.ml" +# 9174 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 9142 "parsing/parser.ml" +# 9180 "parsing/parser.ml" in -# 2223 "parsing/parser.mly" +# 2318 "parsing/parser.mly" ( Pexp_object _3, _2 ) -# 9148 "parsing/parser.ml" +# 9186 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -9152,10 +9190,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9159 "parsing/parser.ml" +# 9197 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9220,27 +9258,27 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 9224 "parsing/parser.ml" +# 9262 "parsing/parser.ml" in -# 1827 "parsing/parser.mly" +# 1917 "parsing/parser.mly" ( _1 ) -# 9229 "parsing/parser.ml" +# 9267 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 811 "parsing/parser.mly" +# 877 "parsing/parser.mly" ( extra_cstr _startpos _endpos _1 ) -# 9238 "parsing/parser.ml" +# 9276 "parsing/parser.ml" in -# 1814 "parsing/parser.mly" +# 1904 "parsing/parser.mly" ( Cstr.mk _1 _2 ) -# 9244 "parsing/parser.ml" +# 9282 "parsing/parser.ml" in let _2 = @@ -9248,23 +9286,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 9254 "parsing/parser.ml" +# 9292 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 9260 "parsing/parser.ml" +# 9298 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2225 "parsing/parser.mly" +# 2320 "parsing/parser.mly" ( unclosed "object" _loc__1_ "end" _loc__4_ ) -# 9268 "parsing/parser.ml" +# 9306 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -9272,10 +9310,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2143 "parsing/parser.mly" +# 2253 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 9279 "parsing/parser.ml" +# 9317 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9310,18 +9348,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 9314 "parsing/parser.ml" +# 9352 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 9319 "parsing/parser.ml" +# 9357 "parsing/parser.ml" in -# 2229 "parsing/parser.mly" +# 2324 "parsing/parser.mly" ( Pexp_apply(_1, _2) ) -# 9325 "parsing/parser.ml" +# 9363 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -9329,15 +9367,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9335 "parsing/parser.ml" +# 9373 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9341 "parsing/parser.ml" +# 9379 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9366,24 +9404,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 9370 "parsing/parser.ml" +# 9408 "parsing/parser.ml" in -# 979 "parsing/parser.mly" +# 1045 "parsing/parser.mly" ( xs ) -# 9375 "parsing/parser.ml" +# 9413 "parsing/parser.ml" in -# 2548 "parsing/parser.mly" +# 2625 "parsing/parser.mly" ( es ) -# 9381 "parsing/parser.ml" +# 9419 "parsing/parser.ml" in -# 2231 "parsing/parser.mly" +# 2326 "parsing/parser.mly" ( Pexp_tuple(_1) ) -# 9387 "parsing/parser.ml" +# 9425 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in @@ -9391,15 +9429,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9397 "parsing/parser.ml" +# 9435 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9403 "parsing/parser.ml" +# 9441 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9435,15 +9473,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 9441 "parsing/parser.ml" +# 9479 "parsing/parser.ml" in -# 2233 "parsing/parser.mly" +# 2328 "parsing/parser.mly" ( Pexp_construct(_1, Some _2) ) -# 9447 "parsing/parser.ml" +# 9485 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -9451,15 +9489,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9457 "parsing/parser.ml" +# 9495 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9463 "parsing/parser.ml" +# 9501 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9490,24 +9528,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2235 "parsing/parser.mly" +# 2330 "parsing/parser.mly" ( Pexp_variant(_1, Some _2) ) -# 9496 "parsing/parser.ml" +# 9534 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9505 "parsing/parser.ml" +# 9543 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9511 "parsing/parser.ml" +# 9549 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9539,9 +9577,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 627 "parsing/parser.mly" +# 681 "parsing/parser.mly" (string) -# 9545 "parsing/parser.ml" +# 9583 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -9551,24 +9589,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3459 "parsing/parser.mly" +# 3543 "parsing/parser.mly" ( op ) -# 9557 "parsing/parser.ml" +# 9595 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9566 "parsing/parser.ml" +# 9604 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9572 "parsing/parser.ml" +# 9610 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9576,15 +9614,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9582 "parsing/parser.ml" +# 9620 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9588 "parsing/parser.ml" +# 9626 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9616,9 +9654,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 628 "parsing/parser.mly" +# 682 "parsing/parser.mly" (string) -# 9622 "parsing/parser.ml" +# 9660 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -9628,24 +9666,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3460 "parsing/parser.mly" +# 3544 "parsing/parser.mly" ( op ) -# 9634 "parsing/parser.ml" +# 9672 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9643 "parsing/parser.ml" +# 9681 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9649 "parsing/parser.ml" +# 9687 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9653,15 +9691,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9659 "parsing/parser.ml" +# 9697 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9665 "parsing/parser.ml" +# 9703 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9693,9 +9731,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 629 "parsing/parser.mly" +# 683 "parsing/parser.mly" (string) -# 9699 "parsing/parser.ml" +# 9737 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -9705,24 +9743,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3461 "parsing/parser.mly" +# 3545 "parsing/parser.mly" ( op ) -# 9711 "parsing/parser.ml" +# 9749 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9720 "parsing/parser.ml" +# 9758 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9726 "parsing/parser.ml" +# 9764 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9730,15 +9768,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9736 "parsing/parser.ml" +# 9774 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9742 "parsing/parser.ml" +# 9780 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9770,9 +9808,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 630 "parsing/parser.mly" +# 684 "parsing/parser.mly" (string) -# 9776 "parsing/parser.ml" +# 9814 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -9782,24 +9820,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3462 "parsing/parser.mly" +# 3546 "parsing/parser.mly" ( op ) -# 9788 "parsing/parser.ml" +# 9826 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9797 "parsing/parser.ml" +# 9835 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9803 "parsing/parser.ml" +# 9841 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9807,15 +9845,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9813 "parsing/parser.ml" +# 9851 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9819 "parsing/parser.ml" +# 9857 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9847,9 +9885,9 @@ module Tables = struct } = _menhir_stack in let e2 : (Parsetree.expression) = Obj.magic e2 in let op : ( -# 631 "parsing/parser.mly" +# 685 "parsing/parser.mly" (string) -# 9853 "parsing/parser.ml" +# 9891 "parsing/parser.ml" ) = Obj.magic op in let e1 : (Parsetree.expression) = Obj.magic e1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -9859,24 +9897,24 @@ module Tables = struct let _1 = let op = let _1 = -# 3463 "parsing/parser.mly" +# 3547 "parsing/parser.mly" ( op ) -# 9865 "parsing/parser.ml" +# 9903 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_op_, _startpos_op_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9874 "parsing/parser.ml" +# 9912 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9880 "parsing/parser.ml" +# 9918 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9884,15 +9922,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9890 "parsing/parser.ml" +# 9928 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9896 "parsing/parser.ml" +# 9934 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -9932,23 +9970,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3464 "parsing/parser.mly" +# 3548 "parsing/parser.mly" ("+") -# 9938 "parsing/parser.ml" +# 9976 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 9946 "parsing/parser.ml" +# 9984 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 9952 "parsing/parser.ml" +# 9990 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -9956,15 +9994,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 9962 "parsing/parser.ml" +# 10000 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 9968 "parsing/parser.ml" +# 10006 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10004,23 +10042,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3465 "parsing/parser.mly" +# 3549 "parsing/parser.mly" ("+.") -# 10010 "parsing/parser.ml" +# 10048 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10018 "parsing/parser.ml" +# 10056 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10024 "parsing/parser.ml" +# 10062 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10028,15 +10066,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10034 "parsing/parser.ml" +# 10072 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10040 "parsing/parser.ml" +# 10078 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10076,23 +10114,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3466 "parsing/parser.mly" +# 3550 "parsing/parser.mly" ("+=") -# 10082 "parsing/parser.ml" +# 10120 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10090 "parsing/parser.ml" +# 10128 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10096 "parsing/parser.ml" +# 10134 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10100,15 +10138,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10106 "parsing/parser.ml" +# 10144 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10112 "parsing/parser.ml" +# 10150 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10148,23 +10186,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3467 "parsing/parser.mly" +# 3551 "parsing/parser.mly" ("-") -# 10154 "parsing/parser.ml" +# 10192 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10162 "parsing/parser.ml" +# 10200 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10168 "parsing/parser.ml" +# 10206 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10172,15 +10210,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10178 "parsing/parser.ml" +# 10216 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10184 "parsing/parser.ml" +# 10222 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10220,23 +10258,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3468 "parsing/parser.mly" +# 3552 "parsing/parser.mly" ("-.") -# 10226 "parsing/parser.ml" +# 10264 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10234 "parsing/parser.ml" +# 10272 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10240 "parsing/parser.ml" +# 10278 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10244,15 +10282,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10250 "parsing/parser.ml" +# 10288 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10256 "parsing/parser.ml" +# 10294 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10292,23 +10330,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3469 "parsing/parser.mly" +# 3553 "parsing/parser.mly" ("*") -# 10298 "parsing/parser.ml" +# 10336 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10306 "parsing/parser.ml" +# 10344 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10312 "parsing/parser.ml" +# 10350 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10316,15 +10354,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10322 "parsing/parser.ml" +# 10360 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10328 "parsing/parser.ml" +# 10366 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10364,23 +10402,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3470 "parsing/parser.mly" +# 3554 "parsing/parser.mly" ("%") -# 10370 "parsing/parser.ml" +# 10408 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10378 "parsing/parser.ml" +# 10416 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10384 "parsing/parser.ml" +# 10422 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10388,15 +10426,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10394 "parsing/parser.ml" +# 10432 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10400 "parsing/parser.ml" +# 10438 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10436,23 +10474,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3471 "parsing/parser.mly" +# 3555 "parsing/parser.mly" ("=") -# 10442 "parsing/parser.ml" +# 10480 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10450 "parsing/parser.ml" +# 10488 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10456 "parsing/parser.ml" +# 10494 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10460,15 +10498,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10466 "parsing/parser.ml" +# 10504 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10472 "parsing/parser.ml" +# 10510 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10508,23 +10546,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3472 "parsing/parser.mly" +# 3556 "parsing/parser.mly" ("<") -# 10514 "parsing/parser.ml" +# 10552 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10522 "parsing/parser.ml" +# 10560 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10528 "parsing/parser.ml" +# 10566 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10532,15 +10570,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10538 "parsing/parser.ml" +# 10576 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10544 "parsing/parser.ml" +# 10582 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10580,23 +10618,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3473 "parsing/parser.mly" +# 3557 "parsing/parser.mly" (">") -# 10586 "parsing/parser.ml" +# 10624 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10594 "parsing/parser.ml" +# 10632 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10600 "parsing/parser.ml" +# 10638 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10604,15 +10642,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10610 "parsing/parser.ml" +# 10648 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10616 "parsing/parser.ml" +# 10654 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10652,23 +10690,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3474 "parsing/parser.mly" +# 3558 "parsing/parser.mly" ("or") -# 10658 "parsing/parser.ml" +# 10696 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10666 "parsing/parser.ml" +# 10704 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10672 "parsing/parser.ml" +# 10710 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10676,15 +10714,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10682 "parsing/parser.ml" +# 10720 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10688 "parsing/parser.ml" +# 10726 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10724,23 +10762,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3475 "parsing/parser.mly" +# 3559 "parsing/parser.mly" ("||") -# 10730 "parsing/parser.ml" +# 10768 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10738 "parsing/parser.ml" +# 10776 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10744 "parsing/parser.ml" +# 10782 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10748,15 +10786,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10754 "parsing/parser.ml" +# 10792 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10760 "parsing/parser.ml" +# 10798 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10796,23 +10834,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3476 "parsing/parser.mly" +# 3560 "parsing/parser.mly" ("&") -# 10802 "parsing/parser.ml" +# 10840 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10810 "parsing/parser.ml" +# 10848 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10816 "parsing/parser.ml" +# 10854 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10820,15 +10858,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10826 "parsing/parser.ml" +# 10864 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10832 "parsing/parser.ml" +# 10870 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10868,23 +10906,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3477 "parsing/parser.mly" +# 3561 "parsing/parser.mly" ("&&") -# 10874 "parsing/parser.ml" +# 10912 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10882 "parsing/parser.ml" +# 10920 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10888 "parsing/parser.ml" +# 10926 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10892,15 +10930,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10898 "parsing/parser.ml" +# 10936 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10904 "parsing/parser.ml" +# 10942 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -10940,23 +10978,23 @@ module Tables = struct let _1 = let op = let _1 = -# 3478 "parsing/parser.mly" +# 3562 "parsing/parser.mly" (":=") -# 10946 "parsing/parser.ml" +# 10984 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 10954 "parsing/parser.ml" +# 10992 "parsing/parser.ml" in -# 2237 "parsing/parser.mly" +# 2332 "parsing/parser.mly" ( mkinfix e1 op e2 ) -# 10960 "parsing/parser.ml" +# 10998 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_e2_, _startpos_e1_) in @@ -10964,15 +11002,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 10970 "parsing/parser.ml" +# 11008 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 10976 "parsing/parser.ml" +# 11014 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11005,9 +11043,9 @@ module Tables = struct let _1 = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2239 "parsing/parser.mly" +# 2334 "parsing/parser.mly" ( mkuminus ~oploc:_loc__1_ _1 _2 ) -# 11011 "parsing/parser.ml" +# 11049 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -11015,15 +11053,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11021 "parsing/parser.ml" +# 11059 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 11027 "parsing/parser.ml" +# 11065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11056,9 +11094,9 @@ module Tables = struct let _1 = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2241 "parsing/parser.mly" +# 2336 "parsing/parser.mly" ( mkuplus ~oploc:_loc__1_ _1 _2 ) -# 11062 "parsing/parser.ml" +# 11100 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -11066,15 +11104,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 11072 "parsing/parser.ml" +# 11110 "parsing/parser.ml" in -# 2146 "parsing/parser.mly" +# 2256 "parsing/parser.mly" ( _1 ) -# 11078 "parsing/parser.ml" +# 11116 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11114,9 +11152,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2148 "parsing/parser.mly" +# 2258 "parsing/parser.mly" ( expr_of_let_bindings ~loc:_sloc _1 _3 ) -# 11120 "parsing/parser.ml" +# 11158 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11156,9 +11194,9 @@ module Tables = struct let _3 : unit = Obj.magic _3 in let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in let _1 : ( -# 633 "parsing/parser.mly" +# 687 "parsing/parser.mly" (string) -# 11162 "parsing/parser.ml" +# 11200 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -11168,9 +11206,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 11174 "parsing/parser.ml" +# 11212 "parsing/parser.ml" in let _startpos_pbop_op_ = _startpos__1_ in @@ -11178,13 +11216,13 @@ module Tables = struct let _symbolstartpos = _startpos_pbop_op_ in let _sloc = (_symbolstartpos, _endpos) in -# 2150 "parsing/parser.mly" +# 2260 "parsing/parser.mly" ( let (pbop_pat, pbop_exp, rev_ands) = bindings in let ands = List.rev rev_ands in let pbop_loc = make_loc _sloc in let let_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in mkexp ~loc:_sloc (Pexp_letop{ let_; ands; body}) ) -# 11188 "parsing/parser.ml" +# 11226 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11225,9 +11263,9 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2156 "parsing/parser.mly" +# 2266 "parsing/parser.mly" ( mkexp_cons ~loc:_sloc _loc__2_ (ghexp ~loc:_sloc (Pexp_tuple[_1;_3])) ) -# 11231 "parsing/parser.ml" +# 11269 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11260,35 +11298,35 @@ module Tables = struct let _3 : (Parsetree.expression) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 11266 "parsing/parser.ml" +# 11304 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 11275 "parsing/parser.ml" +# 11313 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 11283 "parsing/parser.ml" +# 11321 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2158 "parsing/parser.mly" +# 2268 "parsing/parser.mly" ( mkexp ~loc:_sloc (Pexp_setinstvar(_1, _3)) ) -# 11292 "parsing/parser.ml" +# 11330 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11344,18 +11382,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 11350 "parsing/parser.ml" +# 11388 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2160 "parsing/parser.mly" +# 2270 "parsing/parser.mly" ( mkexp ~loc:_sloc (Pexp_setfield(_1, _3, _5)) ) -# 11359 "parsing/parser.ml" +# 11397 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11368,14 +11406,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11383,9 +11421,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -11393,14 +11431,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -11409,23 +11447,36 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let i : (Parsetree.expression) = Obj.magic i in let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__7_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2271 "parsing/parser.mly" + (Some v) +# 11465 "parsing/parser.ml" + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 11470 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2162 "parsing/parser.mly" - ( array_set ~loc:_sloc _1 _4 _7 ) -# 11429 "parsing/parser.ml" +# 2272 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 11480 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11438,14 +11489,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11453,9 +11504,175 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2271 "parsing/parser.mly" + (Some v) +# 11548 "parsing/parser.ml" + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 11553 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2272 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 11563 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in + let _5 : unit = Obj.magic _5 in + let i : (Parsetree.expression) = Obj.magic i in + let _3 : unit = Obj.magic _3 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2271 "parsing/parser.mly" + (Some v) +# 11631 "parsing/parser.ml" + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 11636 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 2272 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 11646 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -11468,9 +11685,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -11479,23 +11696,57 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2 : ( +# 686 "parsing/parser.mly" + (string) +# 11708 "parsing/parser.ml" + ) = Obj.magic _2 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__7_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2273 "parsing/parser.mly" + (Some v) +# 11718 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" + ( es ) +# 11723 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 11729 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 11734 "parsing/parser.ml" + + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 11740 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2164 "parsing/parser.mly" - ( string_set ~loc:_sloc _1 _4 _7 ) -# 11499 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 11750 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11508,14 +11759,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11523,9 +11774,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -11537,11 +11788,23 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -11549,23 +11812,70 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2 : ( +# 686 "parsing/parser.mly" + (string) +# 11824 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__7_ in + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1 = _1_inlined1 in + +# 2273 "parsing/parser.mly" + (Some v) +# 11838 "parsing/parser.ml" + + in + let i = +# 2665 "parsing/parser.mly" + ( es ) +# 11844 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 11852 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 11857 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 11863 "parsing/parser.ml" + + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 11869 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2166 "parsing/parser.mly" - ( bigarray_set ~loc:_sloc _1 _4 _7 ) -# 11569 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 11879 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11578,14 +11888,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11608,9 +11918,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -11619,32 +11929,57 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in let _5 : unit = Obj.magic _5 in let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 11631 "parsing/parser.ml" +# 11941 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2273 "parsing/parser.mly" + (Some v) +# 11951 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 11640 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in +# 11956 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 11962 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 11967 "parsing/parser.ml" + + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 11973 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2168 "parsing/parser.mly" - ( dotop_set ~loc:_sloc lident bracket _2 _1 _4 _7 ) -# 11648 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 11983 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11657,14 +11992,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11686,11 +12021,23 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -11698,32 +12045,70 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _5 : unit = Obj.magic _5 in let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 11710 "parsing/parser.ml" +# 12057 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1 = _1_inlined1 in + +# 2273 "parsing/parser.mly" + (Some v) +# 12071 "parsing/parser.ml" + + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 11719 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in +# 12077 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 12085 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 12090 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 12096 "parsing/parser.ml" + + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 12102 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2170 "parsing/parser.mly" - ( dotop_set ~loc:_sloc lident paren _2 _1 _4 _7 ) -# 11727 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 12112 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11736,14 +12121,14 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _6; - MenhirLib.EngineTypes.startp = _startpos__6_; - MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _5; @@ -11766,9 +12151,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -11777,125 +12162,57 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : (Parsetree.expression) = Obj.magic _7 in - let _6 : unit = Obj.magic _6 in + let v : (Parsetree.expression) = Obj.magic v in + let _1 : unit = Obj.magic _1 in let _5 : unit = Obj.magic _5 in let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 11789 "parsing/parser.ml" +# 12174 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" - ( es ) -# 11798 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2172 "parsing/parser.mly" - ( dotop_set ~loc:_sloc lident brace _2 _1 _4 _7 ) -# 11806 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - } = _menhir_stack in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" - (string) -# 11880 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__9_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2273 "parsing/parser.mly" + (Some v) +# 12184 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 11891 "parsing/parser.ml" - in - let _endpos = _endpos__9_ in +# 12189 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 12195 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 12200 "parsing/parser.ml" + + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 12206 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2175 "parsing/parser.mly" - ( dotop_set ~loc:_sloc (ldot _3) bracket _4 _1 _6 _9 ) -# 11899 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 12216 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -11908,19 +12225,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; + MenhirLib.EngineTypes.semv = v; + MenhirLib.EngineTypes.startp = _startpos_v_; + MenhirLib.EngineTypes.endp = _endpos_v_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -11928,29 +12245,29 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -11961,127 +12278,70 @@ module Tables = struct }; }; } = _menhir_stack in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in - let es : (Parsetree.expression list) = Obj.magic es in + let v : (Parsetree.expression) = Obj.magic v in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" - (string) -# 11973 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__9_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" - ( es ) -# 11984 "parsing/parser.ml" - in - let _endpos = _endpos__9_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in - -# 2178 "parsing/parser.mly" - ( dotop_set ~loc:_sloc (ldot _3) paren _4 _1 _6 _9 ) -# 11992 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _9; - MenhirLib.EngineTypes.startp = _startpos__9_; - MenhirLib.EngineTypes.endp = _endpos__9_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _8; - MenhirLib.EngineTypes.startp = _startpos__8_; - MenhirLib.EngineTypes.endp = _endpos__8_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - }; - }; - }; - }; - } = _menhir_stack in - let _9 : (Parsetree.expression) = Obj.magic _9 in - let _8 : unit = Obj.magic _8 in - let _7 : unit = Obj.magic _7 in let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 12066 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in +# 12290 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__9_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _startpos = _startpos_array_ in + let _endpos = _endpos_v_ in + let _v : (Parsetree.expression) = let _1 = + let r = + let _1 = _1_inlined1 in + +# 2273 "parsing/parser.mly" + (Some v) +# 12304 "parsing/parser.ml" + + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 12077 "parsing/parser.ml" - in - let _endpos = _endpos__9_ in +# 12310 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 12318 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 12323 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 12329 "parsing/parser.ml" + + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 12335 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos_v_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2181 "parsing/parser.mly" - ( dotop_set ~loc:_sloc (ldot _3) brace _4 _1 _6 _9 ) -# 12085 "parsing/parser.ml" +# 2274 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 12345 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12111,9 +12371,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2183 "parsing/parser.mly" +# 2276 "parsing/parser.mly" ( Exp.attr _1 _2 ) -# 12117 "parsing/parser.ml" +# 12377 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12137,9 +12397,9 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2185 "parsing/parser.mly" +# 2279 "parsing/parser.mly" ( not_expecting _loc__1_ "wildcard \"_\"" ) -# 12143 "parsing/parser.ml" +# 12403 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12155,9 +12415,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (string Asttypes.loc option) = -# 3750 "parsing/parser.mly" +# 3838 "parsing/parser.mly" ( None ) -# 12161 "parsing/parser.ml" +# 12421 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12187,9 +12447,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string Asttypes.loc option) = -# 3751 "parsing/parser.mly" +# 3839 "parsing/parser.mly" ( Some _2 ) -# 12193 "parsing/parser.ml" +# 12453 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12233,9 +12493,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.extension) = -# 3761 "parsing/parser.mly" +# 3851 "parsing/parser.mly" ( (_2, _3) ) -# 12239 "parsing/parser.ml" +# 12499 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12254,9 +12514,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 691 "parsing/parser.mly" - (string * Location.t * string * Location.t * string option) -# 12260 "parsing/parser.ml" +# 745 "parsing/parser.mly" + (string * Location.t * string * Location.t * string option) +# 12520 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -12265,9 +12525,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3763 "parsing/parser.mly" +# 3853 "parsing/parser.mly" ( mk_quotedext ~loc:_sloc _1 ) -# 12271 "parsing/parser.ml" +# 12531 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12320,9 +12580,9 @@ module Tables = struct let _v : (Parsetree.extension_constructor) = let attrs = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 12326 "parsing/parser.ml" +# 12586 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined3_ in @@ -12332,9 +12592,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12338 "parsing/parser.ml" +# 12598 "parsing/parser.ml" in let cid = @@ -12343,19 +12603,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12349 "parsing/parser.ml" +# 12609 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3119 "parsing/parser.mly" +# 3199 "parsing/parser.mly" ( let info = symbol_info _endpos in Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12359 "parsing/parser.ml" +# 12619 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12401,9 +12661,9 @@ module Tables = struct let _v : (Parsetree.extension_constructor) = let attrs = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 12407 "parsing/parser.ml" +# 12667 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined2_ in @@ -12413,9 +12673,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12419 "parsing/parser.ml" +# 12679 "parsing/parser.ml" in let cid = @@ -12423,25 +12683,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 12429 "parsing/parser.ml" +# 12689 "parsing/parser.ml" in let _startpos_cid_ = _startpos__1_ in let _1 = -# 3570 "parsing/parser.mly" +# 3656 "parsing/parser.mly" ( () ) -# 12436 "parsing/parser.ml" +# 12696 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 3119 "parsing/parser.mly" +# 3199 "parsing/parser.mly" ( let info = symbol_info _endpos in Te.rebind cid lid ~attrs ~loc:(make_loc _sloc) ~info ) -# 12445 "parsing/parser.ml" +# 12705 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12488,10 +12748,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3738 "parsing/parser.mly" +# 3826 "parsing/parser.mly" ( mark_symbol_docs _sloc; Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 12495 "parsing/parser.ml" +# 12755 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12507,14 +12767,14 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let params = -# 1934 "parsing/parser.mly" +# 2024 "parsing/parser.mly" ( [] ) -# 12513 "parsing/parser.ml" +# 12773 "parsing/parser.ml" in -# 1759 "parsing/parser.mly" +# 1849 "parsing/parser.mly" ( params ) -# 12518 "parsing/parser.ml" +# 12778 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12555,24 +12815,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 12559 "parsing/parser.ml" +# 12819 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 12564 "parsing/parser.ml" +# 12824 "parsing/parser.ml" in -# 1936 "parsing/parser.mly" +# 2026 "parsing/parser.mly" ( params ) -# 12570 "parsing/parser.ml" +# 12830 "parsing/parser.ml" in -# 1759 "parsing/parser.mly" +# 1849 "parsing/parser.mly" ( params ) -# 12576 "parsing/parser.ml" +# 12836 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12595,9 +12855,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2507 "parsing/parser.mly" +# 2584 "parsing/parser.mly" ( _1 ) -# 12601 "parsing/parser.ml" +# 12861 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12637,9 +12897,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2509 "parsing/parser.mly" +# 2586 "parsing/parser.mly" ( mkexp_constraint ~loc:_sloc _3 _1 ) -# 12643 "parsing/parser.ml" +# 12903 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12669,9 +12929,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2533 "parsing/parser.mly" +# 2610 "parsing/parser.mly" ( _2 ) -# 12675 "parsing/parser.ml" +# 12935 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12716,24 +12976,24 @@ module Tables = struct let _endpos = _endpos__4_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2535 "parsing/parser.mly" +# 2612 "parsing/parser.mly" ( Pexp_constraint (_4, _2) ) -# 12722 "parsing/parser.ml" +# 12982 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 12731 "parsing/parser.ml" +# 12991 "parsing/parser.ml" in -# 2536 "parsing/parser.mly" +# 2613 "parsing/parser.mly" ( _1 ) -# 12737 "parsing/parser.ml" +# 12997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12766,12 +13026,12 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2539 "parsing/parser.mly" +# 2616 "parsing/parser.mly" ( let (l,o,p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 12775 "parsing/parser.ml" +# 13035 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12822,17 +13082,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _3 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 12828 "parsing/parser.ml" +# 13088 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2544 "parsing/parser.mly" +# 2621 "parsing/parser.mly" ( mk_newtypes ~loc:_sloc _3 _5 ) -# 12836 "parsing/parser.ml" +# 13096 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12855,9 +13115,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3231 "parsing/parser.mly" +# 3315 "parsing/parser.mly" ( ty ) -# 12861 "parsing/parser.ml" +# 13121 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12903,19 +13163,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 815 "parsing/parser.mly" +# 881 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 12909 "parsing/parser.ml" +# 13169 "parsing/parser.ml" in let label = -# 3243 "parsing/parser.mly" +# 3327 "parsing/parser.mly" ( Optional label ) -# 12914 "parsing/parser.ml" +# 13174 "parsing/parser.ml" in -# 3237 "parsing/parser.mly" +# 3321 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 12919 "parsing/parser.ml" +# 13179 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -12923,15 +13183,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 12929 "parsing/parser.ml" +# 13189 "parsing/parser.ml" in -# 3239 "parsing/parser.mly" +# 3323 "parsing/parser.mly" ( _1 ) -# 12935 "parsing/parser.ml" +# 13195 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -12978,9 +13238,9 @@ module Tables = struct let _1 : (Parsetree.core_type) = Obj.magic _1 in let _2 : unit = Obj.magic _2 in let label : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 12984 "parsing/parser.ml" +# 13244 "parsing/parser.ml" ) = Obj.magic label in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_label_ in @@ -12988,19 +13248,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 815 "parsing/parser.mly" +# 881 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 12994 "parsing/parser.ml" +# 13254 "parsing/parser.ml" in let label = -# 3245 "parsing/parser.mly" +# 3329 "parsing/parser.mly" ( Labelled label ) -# 12999 "parsing/parser.ml" +# 13259 "parsing/parser.ml" in -# 3237 "parsing/parser.mly" +# 3321 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 13004 "parsing/parser.ml" +# 13264 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_codomain_, _startpos_label_) in @@ -13008,15 +13268,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 13014 "parsing/parser.ml" +# 13274 "parsing/parser.ml" in -# 3239 "parsing/parser.mly" +# 3323 "parsing/parser.mly" ( _1 ) -# 13020 "parsing/parser.ml" +# 13280 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13055,19 +13315,19 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let domain = -# 815 "parsing/parser.mly" +# 881 "parsing/parser.mly" ( extra_rhs_core_type _1 ~pos:_endpos__1_ ) -# 13061 "parsing/parser.ml" +# 13321 "parsing/parser.ml" in let label = -# 3247 "parsing/parser.mly" +# 3331 "parsing/parser.mly" ( Nolabel ) -# 13066 "parsing/parser.ml" +# 13326 "parsing/parser.ml" in -# 3237 "parsing/parser.mly" +# 3321 "parsing/parser.mly" ( Ptyp_arrow(label, domain, codomain) ) -# 13071 "parsing/parser.ml" +# 13331 "parsing/parser.ml" in let _endpos__1_ = _endpos_codomain_ in @@ -13075,15 +13335,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 13081 "parsing/parser.ml" +# 13341 "parsing/parser.ml" in -# 3239 "parsing/parser.mly" +# 3323 "parsing/parser.mly" ( _1 ) -# 13087 "parsing/parser.ml" +# 13347 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13114,9 +13374,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Lexing.position * Parsetree.functor_parameter) = let _startpos = _startpos__1_ in -# 1190 "parsing/parser.mly" +# 1261 "parsing/parser.mly" ( _startpos, Unit ) -# 13120 "parsing/parser.ml" +# 13380 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13172,16 +13432,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13178 "parsing/parser.ml" +# 13438 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 1193 "parsing/parser.mly" +# 1264 "parsing/parser.mly" ( _startpos, Named (x, mty) ) -# 13185 "parsing/parser.ml" +# 13445 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13197,9 +13457,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3039 "parsing/parser.mly" +# 3119 "parsing/parser.mly" ( (Pcstr_tuple [],None) ) -# 13203 "parsing/parser.ml" +# 13463 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13229,9 +13489,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3040 "parsing/parser.mly" +# 3120 "parsing/parser.mly" ( (_2,None) ) -# 13235 "parsing/parser.ml" +# 13495 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13275,9 +13535,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3042 "parsing/parser.mly" +# 3122 "parsing/parser.mly" ( (_2,Some _4) ) -# 13281 "parsing/parser.ml" +# 13541 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13307,9 +13567,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constructor_arguments * Parsetree.core_type option) = -# 3044 "parsing/parser.mly" +# 3124 "parsing/parser.mly" ( (Pcstr_tuple [],Some _2) ) -# 13313 "parsing/parser.ml" +# 13573 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13357,9 +13617,9 @@ module Tables = struct Docstrings.info) = let attrs = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 13363 "parsing/parser.ml" +# 13623 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined2_ in @@ -13369,23 +13629,23 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13375 "parsing/parser.ml" +# 13635 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2987 "parsing/parser.mly" +# 3067 "parsing/parser.mly" ( let args, res = args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, args, res, attrs, loc, info ) -# 13389 "parsing/parser.ml" +# 13649 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13426,9 +13686,9 @@ module Tables = struct Docstrings.info) = let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 13432 "parsing/parser.ml" +# 13692 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined1_ in @@ -13437,29 +13697,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13443 "parsing/parser.ml" +# 13703 "parsing/parser.ml" in let _startpos_cid_ = _startpos__1_ in let _1 = -# 3570 "parsing/parser.mly" +# 3656 "parsing/parser.mly" ( () ) -# 13450 "parsing/parser.ml" +# 13710 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos_cid_ in let _sloc = (_symbolstartpos, _endpos) in -# 2987 "parsing/parser.mly" +# 3067 "parsing/parser.mly" ( let args, res = args_res in let info = symbol_info _endpos in let loc = make_loc _sloc in cid, args, res, attrs, loc, info ) -# 13463 "parsing/parser.ml" +# 13723 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13530,9 +13790,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 13536 "parsing/parser.ml" +# 13796 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -13545,9 +13805,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 13551 "parsing/parser.ml" +# 13811 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -13556,26 +13816,26 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13560 "parsing/parser.ml" +# 13820 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 13565 "parsing/parser.ml" +# 13825 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 13571 "parsing/parser.ml" +# 13831 "parsing/parser.ml" in let kind_priv_manifest = let _1 = _1_inlined3 in -# 2927 "parsing/parser.mly" +# 3007 "parsing/parser.mly" ( _2 ) -# 13579 "parsing/parser.ml" +# 13839 "parsing/parser.ml" in let id = @@ -13584,29 +13844,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13590 "parsing/parser.ml" +# 13850 "parsing/parser.ml" in let flag = -# 3590 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( Recursive ) -# 13596 "parsing/parser.ml" +# 13856 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 13603 "parsing/parser.ml" +# 13863 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2864 "parsing/parser.mly" +# 2944 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -13615,7 +13875,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 13619 "parsing/parser.ml" +# 13879 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13692,9 +13952,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined4 : unit = Obj.magic _1_inlined4 in let _1_inlined3 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 13698 "parsing/parser.ml" +# 13958 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -13708,9 +13968,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined5 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 13714 "parsing/parser.ml" +# 13974 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined5_ in @@ -13719,26 +13979,26 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13723 "parsing/parser.ml" +# 13983 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 13728 "parsing/parser.ml" +# 13988 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 13734 "parsing/parser.ml" +# 13994 "parsing/parser.ml" in let kind_priv_manifest = let _1 = _1_inlined4 in -# 2927 "parsing/parser.mly" +# 3007 "parsing/parser.mly" ( _2 ) -# 13742 "parsing/parser.ml" +# 14002 "parsing/parser.ml" in let id = @@ -13747,9 +14007,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13753 "parsing/parser.ml" +# 14013 "parsing/parser.ml" in let flag = @@ -13758,24 +14018,24 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3591 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 13764 "parsing/parser.ml" +# 14024 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 13772 "parsing/parser.ml" +# 14032 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2864 "parsing/parser.mly" +# 2944 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -13784,7 +14044,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 13788 "parsing/parser.ml" +# 14048 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13848,9 +14108,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 13854 "parsing/parser.ml" +# 14114 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -13863,9 +14123,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 13869 "parsing/parser.ml" +# 14129 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -13874,18 +14134,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 13878 "parsing/parser.ml" +# 14138 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 13883 "parsing/parser.ml" +# 14143 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 13889 "parsing/parser.ml" +# 14149 "parsing/parser.ml" in let id = @@ -13894,29 +14154,29 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 13900 "parsing/parser.ml" +# 14160 "parsing/parser.ml" in let flag = -# 3586 "parsing/parser.mly" +# 3672 "parsing/parser.mly" ( Recursive ) -# 13906 "parsing/parser.ml" +# 14166 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 13913 "parsing/parser.ml" +# 14173 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2864 "parsing/parser.mly" +# 2944 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -13925,7 +14185,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 13929 "parsing/parser.ml" +# 14189 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -13995,9 +14255,9 @@ module Tables = struct let xs : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined3 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14001 "parsing/parser.ml" +# 14261 "parsing/parser.ml" ) = Obj.magic _1_inlined3 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined2 : unit = Obj.magic _1_inlined2 in @@ -14011,9 +14271,9 @@ module Tables = struct Parsetree.type_declaration) = let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 14017 "parsing/parser.ml" +# 14277 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -14022,18 +14282,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 14026 "parsing/parser.ml" +# 14286 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 14031 "parsing/parser.ml" +# 14291 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 14037 "parsing/parser.ml" +# 14297 "parsing/parser.ml" in let id = @@ -14042,32 +14302,32 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14048 "parsing/parser.ml" +# 14308 "parsing/parser.ml" in let flag = let _1 = _1_inlined2 in -# 3587 "parsing/parser.mly" +# 3673 "parsing/parser.mly" ( Nonrecursive ) -# 14056 "parsing/parser.ml" +# 14316 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 14064 "parsing/parser.ml" +# 14324 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2864 "parsing/parser.mly" +# 2944 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -14076,7 +14336,7 @@ module Tables = struct (flag, ext), Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ) -# 14080 "parsing/parser.ml" +# 14340 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14095,17 +14355,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 14101 "parsing/parser.ml" +# 14361 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3431 "parsing/parser.mly" +# 3515 "parsing/parser.mly" ( _1 ) -# 14109 "parsing/parser.ml" +# 14369 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14124,17 +14384,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14130 "parsing/parser.ml" +# 14390 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3432 "parsing/parser.mly" +# 3516 "parsing/parser.mly" ( _1 ) -# 14138 "parsing/parser.ml" +# 14398 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14163,14 +14423,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 781 "parsing/parser.mly" - (Parsetree.structure) -# 14170 "parsing/parser.ml" - ) = -# 1072 "parsing/parser.mly" + let _v : (Parsetree.structure) = +# 1138 "parsing/parser.mly" ( _1 ) -# 14174 "parsing/parser.ml" +# 14430 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14186,9 +14442,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (string) = -# 3481 "parsing/parser.mly" +# 3565 "parsing/parser.mly" ( "" ) -# 14192 "parsing/parser.ml" +# 14448 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14218,9 +14474,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (string) = -# 3482 "parsing/parser.mly" +# 3566 "parsing/parser.mly" ( ";.." ) -# 14224 "parsing/parser.ml" +# 14480 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14249,14 +14505,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 783 "parsing/parser.mly" - (Parsetree.signature) -# 14256 "parsing/parser.ml" - ) = -# 1078 "parsing/parser.mly" + let _v : (Parsetree.signature) = +# 1145 "parsing/parser.mly" ( _1 ) -# 14260 "parsing/parser.ml" +# 14512 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14300,9 +14552,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.extension) = -# 3766 "parsing/parser.mly" +# 3856 "parsing/parser.mly" ( (_2, _3) ) -# 14306 "parsing/parser.ml" +# 14558 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14321,9 +14573,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 693 "parsing/parser.mly" - (string * Location.t * string * Location.t * string option) -# 14327 "parsing/parser.ml" +# 747 "parsing/parser.mly" + (string * Location.t * string * Location.t * string option) +# 14579 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14332,9 +14584,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3768 "parsing/parser.mly" +# 3858 "parsing/parser.mly" ( mk_quotedext ~loc:_sloc _1 ) -# 14338 "parsing/parser.ml" +# 14590 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14380,9 +14632,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14386 "parsing/parser.ml" +# 14638 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14391,34 +14643,34 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _5 = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 14397 "parsing/parser.ml" +# 14649 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3184 "parsing/parser.mly" +# 3268 "parsing/parser.mly" ( _1 ) -# 14406 "parsing/parser.ml" +# 14658 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 14414 "parsing/parser.ml" +# 14666 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14422 "parsing/parser.ml" +# 14674 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -14429,10 +14681,10 @@ module Tables = struct _startpos__2_ in let _sloc = (_symbolstartpos, _endpos) in -# 3061 "parsing/parser.mly" +# 3141 "parsing/parser.mly" ( let info = symbol_info _endpos in Type.field _2 _4 ~mut:_1 ~attrs:_5 ~loc:(make_loc _sloc) ~info ) -# 14436 "parsing/parser.ml" +# 14688 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14492,9 +14744,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _3 : unit = Obj.magic _3 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14498 "parsing/parser.ml" +# 14750 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Asttypes.mutable_flag) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14503,43 +14755,43 @@ module Tables = struct let _v : (Parsetree.label_declaration) = let _7 = let _1 = _1_inlined4 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 14509 "parsing/parser.ml" +# 14761 "parsing/parser.ml" in let _endpos__7_ = _endpos__1_inlined4_ in let _5 = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 14518 "parsing/parser.ml" +# 14770 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3184 "parsing/parser.mly" +# 3268 "parsing/parser.mly" ( _1 ) -# 14527 "parsing/parser.ml" +# 14779 "parsing/parser.ml" in let _2 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 14535 "parsing/parser.ml" +# 14787 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14543 "parsing/parser.ml" +# 14795 "parsing/parser.ml" in let _startpos__2_ = _startpos__1_inlined1_ in @@ -14550,14 +14802,14 @@ module Tables = struct _startpos__2_ in let _sloc = (_symbolstartpos, _endpos) in -# 3066 "parsing/parser.mly" +# 3146 "parsing/parser.mly" ( let info = match rhs_info _endpos__5_ with | Some _ as info_before_semi -> info_before_semi | None -> symbol_info _endpos in Type.field _2 _4 ~mut:_1 ~attrs:(_5 @ _7) ~loc:(make_loc _sloc) ~info ) -# 14561 "parsing/parser.ml" +# 14813 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14580,9 +14832,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3055 "parsing/parser.mly" +# 3135 "parsing/parser.mly" ( [_1] ) -# 14586 "parsing/parser.ml" +# 14838 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14605,9 +14857,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.label_declaration list) = -# 3056 "parsing/parser.mly" +# 3136 "parsing/parser.mly" ( [_1] ) -# 14611 "parsing/parser.ml" +# 14863 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14637,9 +14889,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.label_declaration list) = -# 3057 "parsing/parser.mly" +# 3137 "parsing/parser.mly" ( _1 :: _2 ) -# 14643 "parsing/parser.ml" +# 14895 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14658,9 +14910,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14664 "parsing/parser.ml" +# 14916 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14671,24 +14923,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14677 "parsing/parser.ml" +# 14929 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "parsing/parser.mly" +# 2219 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 14686 "parsing/parser.ml" +# 14938 "parsing/parser.ml" in -# 2121 "parsing/parser.mly" +# 2211 "parsing/parser.mly" ( x ) -# 14692 "parsing/parser.ml" +# 14944 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14721,9 +14973,9 @@ module Tables = struct let cty : (Parsetree.core_type) = Obj.magic cty in let _2 : unit = Obj.magic _2 in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14727 "parsing/parser.ml" +# 14979 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -14734,18 +14986,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 14740 "parsing/parser.ml" +# 14992 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "parsing/parser.mly" +# 2219 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 14749 "parsing/parser.ml" +# 15001 "parsing/parser.ml" in let _startpos_x_ = _startpos__1_ in @@ -14753,11 +15005,11 @@ module Tables = struct let _symbolstartpos = _startpos_x_ in let _sloc = (_symbolstartpos, _endpos) in -# 2123 "parsing/parser.mly" +# 2213 "parsing/parser.mly" ( let lab, pat = x in lab, mkpat ~loc:_sloc (Ppat_constraint (pat, cty)) ) -# 14761 "parsing/parser.ml" +# 15013 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14780,9 +15032,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3513 "parsing/parser.mly" +# 3597 "parsing/parser.mly" ( _1 ) -# 14786 "parsing/parser.ml" +# 15038 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14805,9 +15057,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2402 "parsing/parser.mly" +# 2464 "parsing/parser.mly" ( (Nolabel, _1) ) -# 14811 "parsing/parser.ml" +# 15063 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14833,17 +15085,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 638 "parsing/parser.mly" +# 692 "parsing/parser.mly" (string) -# 14839 "parsing/parser.ml" +# 15091 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2404 "parsing/parser.mly" +# 2466 "parsing/parser.mly" ( (Labelled _1, _2) ) -# 14847 "parsing/parser.ml" +# 15099 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14868,9 +15120,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14874 "parsing/parser.ml" +# 15126 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14878,10 +15130,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2406 "parsing/parser.mly" +# 2468 "parsing/parser.mly" ( let loc = _loc_label_ in (Labelled label, mkexpvar ~loc label) ) -# 14885 "parsing/parser.ml" +# 15137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14906,9 +15158,9 @@ module Tables = struct }; } = _menhir_stack in let label : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 14912 "parsing/parser.ml" +# 15164 "parsing/parser.ml" ) = Obj.magic label in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -14916,10 +15168,10 @@ module Tables = struct let _endpos = _endpos_label_ in let _v : (Asttypes.arg_label * Parsetree.expression) = let _loc_label_ = (_startpos_label_, _endpos_label_) in -# 2409 "parsing/parser.mly" +# 2471 "parsing/parser.mly" ( let loc = _loc_label_ in (Optional label, mkexpvar ~loc label) ) -# 14923 "parsing/parser.ml" +# 15175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -14945,17 +15197,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 668 "parsing/parser.mly" +# 722 "parsing/parser.mly" (string) -# 14951 "parsing/parser.ml" +# 15203 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression) = -# 2412 "parsing/parser.mly" +# 2474 "parsing/parser.mly" ( (Optional _1, _2) ) -# 14959 "parsing/parser.ml" +# 15211 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15008,15 +15260,15 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = let _1 = _1_inlined1 in -# 2117 "parsing/parser.mly" +# 2207 "parsing/parser.mly" ( _1 ) -# 15014 "parsing/parser.ml" +# 15266 "parsing/parser.ml" in -# 2091 "parsing/parser.mly" +# 2181 "parsing/parser.mly" ( (Optional (fst _3), _4, snd _3) ) -# 15020 "parsing/parser.ml" +# 15272 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15041,9 +15293,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 15047 "parsing/parser.ml" +# 15299 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15056,24 +15308,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15062 "parsing/parser.ml" +# 15314 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "parsing/parser.mly" +# 2219 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15071 "parsing/parser.ml" +# 15323 "parsing/parser.ml" in -# 2093 "parsing/parser.mly" +# 2183 "parsing/parser.mly" ( (Optional (fst _2), None, snd _2) ) -# 15077 "parsing/parser.ml" +# 15329 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15120,9 +15372,9 @@ module Tables = struct let _3 : (Parsetree.pattern) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 668 "parsing/parser.mly" +# 722 "parsing/parser.mly" (string) -# 15126 "parsing/parser.ml" +# 15378 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -15130,15 +15382,15 @@ module Tables = struct let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = let _4 = let _1 = _1_inlined1 in -# 2117 "parsing/parser.mly" +# 2207 "parsing/parser.mly" ( _1 ) -# 15136 "parsing/parser.ml" +# 15388 "parsing/parser.ml" in -# 2095 "parsing/parser.mly" +# 2185 "parsing/parser.mly" ( (Optional _1, _4, _3) ) -# 15142 "parsing/parser.ml" +# 15394 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15164,17 +15416,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 668 "parsing/parser.mly" +# 722 "parsing/parser.mly" (string) -# 15170 "parsing/parser.ml" +# 15422 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2097 "parsing/parser.mly" +# 2187 "parsing/parser.mly" ( (Optional _1, None, _2) ) -# 15178 "parsing/parser.ml" +# 15430 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15218,9 +15470,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2099 "parsing/parser.mly" +# 2189 "parsing/parser.mly" ( (Labelled (fst _3), None, snd _3) ) -# 15224 "parsing/parser.ml" +# 15476 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15245,9 +15497,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 15251 "parsing/parser.ml" +# 15503 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -15260,24 +15512,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 15266 "parsing/parser.ml" +# 15518 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2129 "parsing/parser.mly" +# 2219 "parsing/parser.mly" ( (_1.Location.txt, mkpat ~loc:_sloc (Ppat_var _1)) ) -# 15275 "parsing/parser.ml" +# 15527 "parsing/parser.ml" in -# 2101 "parsing/parser.mly" +# 2191 "parsing/parser.mly" ( (Labelled (fst _2), None, snd _2) ) -# 15281 "parsing/parser.ml" +# 15533 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15303,17 +15555,17 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.pattern) = Obj.magic _2 in let _1 : ( -# 638 "parsing/parser.mly" +# 692 "parsing/parser.mly" (string) -# 15309 "parsing/parser.ml" +# 15561 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2103 "parsing/parser.mly" +# 2193 "parsing/parser.mly" ( (Labelled _1, None, _2) ) -# 15317 "parsing/parser.ml" +# 15569 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15336,9 +15588,62 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.arg_label * Parsetree.expression option * Parsetree.pattern) = -# 2105 "parsing/parser.mly" +# 2195 "parsing/parser.mly" ( (Nolabel, None, _1) ) -# 15342 "parsing/parser.ml" +# 15594 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Parsetree.pattern * Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern * Parsetree.expression * bool) = +# 2521 "parsing/parser.mly" + ( let p,e = _1 in (p,e,false) ) +# 15619 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Asttypes.label) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern * Parsetree.expression * bool) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 2524 "parsing/parser.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1, true) ) +# 15647 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15372,15 +15677,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2419 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15378 "parsing/parser.ml" +# 15683 "parsing/parser.ml" in -# 2423 "parsing/parser.mly" +# 2485 "parsing/parser.mly" ( (_1, _2) ) -# 15384 "parsing/parser.ml" +# 15689 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15428,16 +15733,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2419 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15434 "parsing/parser.ml" +# 15739 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2425 "parsing/parser.mly" +# 2487 "parsing/parser.mly" ( let v = _1 in (* PR#7344 *) let t = match _2 with @@ -15450,7 +15755,7 @@ module Tables = struct let patloc = (_startpos__1_, _endpos__2_) in (ghpat ~loc:patloc (Ppat_constraint(v, typ)), mkexp_constraint ~loc:_sloc _4 _2) ) -# 15454 "parsing/parser.ml" +# 15759 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15519,18 +15824,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 15523 "parsing/parser.ml" +# 15828 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 15528 "parsing/parser.ml" +# 15833 "parsing/parser.ml" in -# 3166 "parsing/parser.mly" +# 3250 "parsing/parser.mly" ( _1 ) -# 15534 "parsing/parser.ml" +# 15839 "parsing/parser.ml" in let _startpos__3_ = _startpos_xs_ in @@ -15539,19 +15844,19 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2419 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15545 "parsing/parser.ml" +# 15850 "parsing/parser.ml" in -# 2441 "parsing/parser.mly" +# 2503 "parsing/parser.mly" ( let typloc = (_startpos__3_, _endpos__5_) in let patloc = (_startpos__1_, _endpos__5_) in (ghpat ~loc:patloc (Ppat_constraint(_1, ghtyp ~loc:typloc (Ptyp_poly(_3,_5)))), _7) ) -# 15555 "parsing/parser.ml" +# 15860 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15623,30 +15928,30 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__8_ in let _v : (Parsetree.pattern * Parsetree.expression) = let _4 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 15629 "parsing/parser.ml" +# 15934 "parsing/parser.ml" in let _1 = let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2419 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 15638 "parsing/parser.ml" +# 15943 "parsing/parser.ml" in let _endpos = _endpos__8_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2447 "parsing/parser.mly" +# 2509 "parsing/parser.mly" ( let exp, poly = wrap_type_annotation ~loc:_sloc _4 _6 _8 in let loc = (_startpos__1_, _endpos__6_) in (ghpat ~loc (Ppat_constraint(_1, poly)), exp) ) -# 15650 "parsing/parser.ml" +# 15955 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15683,9 +15988,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2452 "parsing/parser.mly" +# 2514 "parsing/parser.mly" ( (_1, _3) ) -# 15689 "parsing/parser.ml" +# 15994 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15736,10 +16041,10 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2454 "parsing/parser.mly" +# 2516 "parsing/parser.mly" ( let loc = (_startpos__1_, _endpos__3_) in (ghpat ~loc (Ppat_constraint(_1, _3)), _5) ) -# 15743 "parsing/parser.ml" +# 16048 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15788,7 +16093,7 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let ext : (string Asttypes.loc option) = Obj.magic ext in @@ -15800,36 +16105,36 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 15806 "parsing/parser.ml" +# 16111 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 15815 "parsing/parser.ml" +# 16120 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2470 "parsing/parser.mly" +# 2544 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in - mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs) + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 15827 "parsing/parser.ml" +# 16132 "parsing/parser.ml" in -# 2460 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 15833 "parsing/parser.ml" +# 16138 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15859,9 +16164,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2461 "parsing/parser.mly" +# 2535 "parsing/parser.mly" ( addlb _1 _2 ) -# 15865 "parsing/parser.ml" +# 16170 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -15904,7 +16209,7 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -15915,41 +16220,41 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 15921 "parsing/parser.ml" +# 16226 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 15930 "parsing/parser.ml" +# 16235 "parsing/parser.ml" in let ext = -# 3754 "parsing/parser.mly" +# 3842 "parsing/parser.mly" ( None ) -# 15936 "parsing/parser.ml" +# 16241 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2470 "parsing/parser.mly" +# 2544 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in - mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs) + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 15947 "parsing/parser.ml" +# 16252 "parsing/parser.ml" in -# 2460 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 15953 "parsing/parser.ml" +# 16258 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16004,7 +16309,7 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in - let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in + let body : (Parsetree.pattern * Parsetree.expression * bool) = Obj.magic body in let rec_flag : (Asttypes.rec_flag) = Obj.magic rec_flag in let _1_inlined2 : (Parsetree.attributes) = Obj.magic _1_inlined2 in let _2 : (string Asttypes.loc) = Obj.magic _2 in @@ -16017,18 +16322,18 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 16023 "parsing/parser.ml" +# 16328 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 16032 "parsing/parser.ml" +# 16337 "parsing/parser.ml" in let ext = @@ -16037,27 +16342,27 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3755 "parsing/parser.mly" +# 3844 "parsing/parser.mly" ( not_expecting _loc "extension" ) -# 16043 "parsing/parser.ml" +# 16348 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2470 "parsing/parser.mly" +# 2544 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in - mklbs ~loc:_sloc ext rec_flag (mklb ~loc:_sloc true body attrs) + mklbs ext rec_flag (mklb ~loc:_sloc true body attrs) ) -# 16055 "parsing/parser.ml" +# 16360 "parsing/parser.ml" in -# 2460 "parsing/parser.mly" +# 2534 "parsing/parser.mly" ( _1 ) -# 16061 "parsing/parser.ml" +# 16366 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16087,9 +16392,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (let_bindings) = -# 2461 "parsing/parser.mly" +# 2535 "parsing/parser.mly" ( addlb _1 _2 ) -# 16093 "parsing/parser.ml" +# 16398 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16112,9 +16417,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2133 "parsing/parser.mly" +# 2223 "parsing/parser.mly" ( _1 ) -# 16118 "parsing/parser.ml" +# 16423 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16152,24 +16457,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2135 "parsing/parser.mly" +# 2225 "parsing/parser.mly" ( Ppat_constraint(_1, _3) ) -# 16158 "parsing/parser.ml" +# 16463 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 16167 "parsing/parser.ml" +# 16472 "parsing/parser.ml" in -# 2136 "parsing/parser.mly" +# 2226 "parsing/parser.mly" ( _1 ) -# 16173 "parsing/parser.ml" +# 16478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16203,15 +16508,43 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2419 "parsing/parser.mly" +# 2481 "parsing/parser.mly" ( mkpatvar ~loc:_sloc _1 ) -# 16209 "parsing/parser.ml" +# 16514 "parsing/parser.ml" in -# 2487 "parsing/parser.mly" +# 2561 "parsing/parser.mly" ( (pat, exp) ) -# 16215 "parsing/parser.ml" +# 16520 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Asttypes.label) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.pattern * Parsetree.expression) = let _endpos = _endpos__1_ in + let _startpos = _startpos__1_ in + let _loc = (_startpos, _endpos) in + +# 2564 "parsing/parser.mly" + ( (mkpatvar ~loc:_loc _1, mkexpvar ~loc:_loc _1) ) +# 16548 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16262,10 +16595,10 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2489 "parsing/parser.mly" +# 2566 "parsing/parser.mly" ( let loc = (_startpos_pat_, _endpos_typ_) in (ghpat ~loc (Ppat_constraint(pat, typ)), exp) ) -# 16269 "parsing/parser.ml" +# 16602 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16302,9 +16635,9 @@ module Tables = struct let _startpos = _startpos_pat_ in let _endpos = _endpos_exp_ in let _v : (Parsetree.pattern * Parsetree.expression) = -# 2492 "parsing/parser.mly" +# 2569 "parsing/parser.mly" ( (pat, exp) ) -# 16308 "parsing/parser.ml" +# 16641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16327,10 +16660,10 @@ module Tables = struct let _startpos = _startpos_body_ in let _endpos = _endpos_body_ in let _v : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = -# 2496 "parsing/parser.mly" +# 2573 "parsing/parser.mly" ( let let_pat, let_exp = body in let_pat, let_exp, [] ) -# 16334 "parsing/parser.ml" +# 16667 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16362,9 +16695,9 @@ module Tables = struct } = _menhir_stack in let body : (Parsetree.pattern * Parsetree.expression) = Obj.magic body in let _1 : ( -# 634 "parsing/parser.mly" +# 688 "parsing/parser.mly" (string) -# 16368 "parsing/parser.ml" +# 16701 "parsing/parser.ml" ) = Obj.magic _1 in let bindings : (Parsetree.pattern * Parsetree.expression * Parsetree.binding_op list) = Obj.magic bindings in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -16375,22 +16708,22 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16381 "parsing/parser.ml" +# 16714 "parsing/parser.ml" in let _endpos = _endpos_body_ in let _symbolstartpos = _startpos_bindings_ in let _sloc = (_symbolstartpos, _endpos) in -# 2499 "parsing/parser.mly" +# 2576 "parsing/parser.mly" ( let let_pat, let_exp, rev_ands = bindings in let pbop_pat, pbop_exp = body in let pbop_loc = make_loc _sloc in let and_ = {pbop_op; pbop_pat; pbop_exp; pbop_loc} in let_pat, let_exp, and_ :: rev_ands ) -# 16394 "parsing/parser.ml" +# 16727 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16408,7 +16741,7 @@ module Tables = struct let _v : (Parsetree.class_declaration list) = # 211 "" ( [] ) -# 16412 "parsing/parser.ml" +# 16745 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16472,9 +16805,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 16478 "parsing/parser.ml" +# 16811 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -16487,9 +16820,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 16493 "parsing/parser.ml" +# 16826 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16499,24 +16832,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16505 "parsing/parser.ml" +# 16838 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 16513 "parsing/parser.ml" +# 16846 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1737 "parsing/parser.mly" +# 1827 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -16524,13 +16857,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id body ~virt ~params ~attrs ~loc ~text ~docs ) -# 16528 "parsing/parser.ml" +# 16861 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16534 "parsing/parser.ml" +# 16867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16548,7 +16881,7 @@ module Tables = struct let _v : (Parsetree.class_description list) = # 211 "" ( [] ) -# 16552 "parsing/parser.ml" +# 16885 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16619,9 +16952,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 16625 "parsing/parser.ml" +# 16958 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -16634,9 +16967,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 16640 "parsing/parser.ml" +# 16973 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16646,24 +16979,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16652 "parsing/parser.ml" +# 16985 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 16660 "parsing/parser.ml" +# 16993 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2028 "parsing/parser.mly" +# 2118 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -16671,13 +17004,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id cty ~virt ~params ~attrs ~loc ~text ~docs ) -# 16675 "parsing/parser.ml" +# 17008 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16681 "parsing/parser.ml" +# 17014 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16695,7 +17028,7 @@ module Tables = struct let _v : (Parsetree.class_type_declaration list) = # 211 "" ( [] ) -# 16699 "parsing/parser.ml" +# 17032 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16766,9 +17099,9 @@ module Tables = struct let csig : (Parsetree.class_type) = Obj.magic csig in let _6 : unit = Obj.magic _6 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 16772 "parsing/parser.ml" +# 17105 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -16781,9 +17114,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 16787 "parsing/parser.ml" +# 17120 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16793,24 +17126,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16799 "parsing/parser.ml" +# 17132 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 16807 "parsing/parser.ml" +# 17140 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2067 "parsing/parser.mly" +# 2157 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -16818,13 +17151,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Ci.mk id csig ~virt ~params ~attrs ~loc ~text ~docs ) -# 16822 "parsing/parser.ml" +# 17155 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16828 "parsing/parser.ml" +# 17161 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16842,7 +17175,7 @@ module Tables = struct let _v : (Parsetree.module_binding list) = # 211 "" ( [] ) -# 16846 "parsing/parser.ml" +# 17179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16903,9 +17236,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 16909 "parsing/parser.ml" +# 17242 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -16915,24 +17248,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 16921 "parsing/parser.ml" +# 17254 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 16929 "parsing/parser.ml" +# 17262 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1418 "parsing/parser.mly" +# 1489 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -16940,13 +17273,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Mb.mk name body ~attrs ~loc ~text ~docs ) -# 16944 "parsing/parser.ml" +# 17277 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 16950 "parsing/parser.ml" +# 17283 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -16964,7 +17297,7 @@ module Tables = struct let _v : (Parsetree.module_declaration list) = # 211 "" ( [] ) -# 16968 "parsing/parser.ml" +# 17301 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17032,9 +17365,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 17038 "parsing/parser.ml" +# 17371 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17044,24 +17377,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17050 "parsing/parser.ml" +# 17383 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 17058 "parsing/parser.ml" +# 17391 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1695 "parsing/parser.mly" +# 1768 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let docs = symbol_docs _sloc in @@ -17069,13 +17402,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Md.mk name mty ~attrs ~loc ~text ~docs ) -# 17073 "parsing/parser.ml" +# 17406 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17079 "parsing/parser.ml" +# 17412 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17093,7 +17426,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 17097 "parsing/parser.ml" +# 17430 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17125,7 +17458,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 17129 "parsing/parser.ml" +# 17462 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17143,7 +17476,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 17147 "parsing/parser.ml" +# 17480 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17208,9 +17541,9 @@ module Tables = struct let xs_inlined1 : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = Obj.magic xs_inlined1 in let kind_priv_manifest : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic kind_priv_manifest in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 17214 "parsing/parser.ml" +# 17547 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -17223,9 +17556,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 17229 "parsing/parser.ml" +# 17562 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -17234,18 +17567,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17238 "parsing/parser.ml" +# 17571 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 17243 "parsing/parser.ml" +# 17576 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 17249 "parsing/parser.ml" +# 17582 "parsing/parser.ml" in let id = @@ -17254,24 +17587,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17260 "parsing/parser.ml" +# 17593 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 17268 "parsing/parser.ml" +# 17601 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2881 "parsing/parser.mly" +# 2961 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -17280,13 +17613,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 17284 "parsing/parser.ml" +# 17617 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17290 "parsing/parser.ml" +# 17623 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17304,7 +17637,7 @@ module Tables = struct let _v : (Parsetree.type_declaration list) = # 211 "" ( [] ) -# 17308 "parsing/parser.ml" +# 17641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17376,9 +17709,9 @@ module Tables = struct let _2 : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = Obj.magic _2 in let _1_inlined3 : unit = Obj.magic _1_inlined3 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 17382 "parsing/parser.ml" +# 17715 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -17391,9 +17724,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 17397 "parsing/parser.ml" +# 17730 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -17402,26 +17735,26 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 17406 "parsing/parser.ml" +# 17739 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 17411 "parsing/parser.ml" +# 17744 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 17417 "parsing/parser.ml" +# 17750 "parsing/parser.ml" in let kind_priv_manifest = let _1 = _1_inlined3 in -# 2927 "parsing/parser.mly" +# 3007 "parsing/parser.mly" ( _2 ) -# 17425 "parsing/parser.ml" +# 17758 "parsing/parser.ml" in let id = @@ -17430,24 +17763,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 17436 "parsing/parser.ml" +# 17769 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 17444 "parsing/parser.ml" +# 17777 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2881 "parsing/parser.mly" +# 2961 "parsing/parser.mly" ( let (kind, priv, manifest) = kind_priv_manifest in let docs = symbol_docs _sloc in @@ -17456,13 +17789,13 @@ module Tables = struct let text = symbol_text _symbolstartpos in Type.mk id ~params ~cstrs ~kind ~priv ?manifest ~attrs ~loc ~docs ~text ) -# 17460 "parsing/parser.ml" +# 17793 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17466 "parsing/parser.ml" +# 17799 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17480,7 +17813,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 211 "" ( [] ) -# 17484 "parsing/parser.ml" +# 17817 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17512,7 +17845,7 @@ module Tables = struct let _v : (Parsetree.attributes) = # 213 "" ( x :: xs ) -# 17516 "parsing/parser.ml" +# 17849 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17530,7 +17863,7 @@ module Tables = struct let _v : (Parsetree.signature_item list list) = # 211 "" ( [] ) -# 17534 "parsing/parser.ml" +# 17867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17563,21 +17896,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 827 "parsing/parser.mly" +# 893 "parsing/parser.mly" ( text_sig _startpos ) -# 17569 "parsing/parser.ml" +# 17902 "parsing/parser.ml" in -# 1556 "parsing/parser.mly" +# 1627 "parsing/parser.mly" ( _1 ) -# 17575 "parsing/parser.ml" +# 17908 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17581 "parsing/parser.ml" +# 17914 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17610,21 +17943,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 825 "parsing/parser.mly" +# 891 "parsing/parser.mly" ( text_sig _startpos @ [_1] ) -# 17616 "parsing/parser.ml" +# 17949 "parsing/parser.ml" in -# 1556 "parsing/parser.mly" +# 1627 "parsing/parser.mly" ( _1 ) -# 17622 "parsing/parser.ml" +# 17955 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17628 "parsing/parser.ml" +# 17961 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17642,7 +17975,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 17646 "parsing/parser.ml" +# 17979 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17675,40 +18008,40 @@ module Tables = struct let _1 = let ys = let items = -# 887 "parsing/parser.mly" +# 953 "parsing/parser.mly" ( [] ) -# 17681 "parsing/parser.ml" +# 18014 "parsing/parser.ml" in -# 1301 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( items ) -# 17686 "parsing/parser.ml" +# 18019 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 823 "parsing/parser.mly" +# 889 "parsing/parser.mly" ( text_str _startpos ) -# 17694 "parsing/parser.ml" +# 18027 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 17700 "parsing/parser.ml" +# 18033 "parsing/parser.ml" in -# 1317 "parsing/parser.mly" +# 1388 "parsing/parser.mly" ( _1 ) -# 17706 "parsing/parser.ml" +# 18039 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17712 "parsing/parser.ml" +# 18045 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17760,70 +18093,70 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 17766 "parsing/parser.ml" +# 18099 "parsing/parser.ml" in -# 1308 "parsing/parser.mly" +# 1379 "parsing/parser.mly" ( mkstrexp e attrs ) -# 17771 "parsing/parser.ml" +# 18104 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 821 "parsing/parser.mly" +# 887 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 17779 "parsing/parser.ml" +# 18112 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 840 "parsing/parser.mly" +# 906 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 17789 "parsing/parser.ml" +# 18122 "parsing/parser.ml" in -# 889 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( x ) -# 17795 "parsing/parser.ml" +# 18128 "parsing/parser.ml" in -# 1301 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( items ) -# 17801 "parsing/parser.ml" +# 18134 "parsing/parser.ml" in let xs = let _startpos = _startpos__1_ in -# 823 "parsing/parser.mly" +# 889 "parsing/parser.mly" ( text_str _startpos ) -# 17809 "parsing/parser.ml" +# 18142 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 17815 "parsing/parser.ml" +# 18148 "parsing/parser.ml" in -# 1317 "parsing/parser.mly" +# 1388 "parsing/parser.mly" ( _1 ) -# 17821 "parsing/parser.ml" +# 18154 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17827 "parsing/parser.ml" +# 18160 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17856,21 +18189,21 @@ module Tables = struct let _1 = let _startpos = _startpos__1_ in -# 821 "parsing/parser.mly" +# 887 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 17862 "parsing/parser.ml" +# 18195 "parsing/parser.ml" in -# 1317 "parsing/parser.mly" +# 1388 "parsing/parser.mly" ( _1 ) -# 17868 "parsing/parser.ml" +# 18201 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17874 "parsing/parser.ml" +# 18207 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17888,7 +18221,7 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = # 211 "" ( [] ) -# 17892 "parsing/parser.ml" +# 18225 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17920,15 +18253,15 @@ module Tables = struct let _v : (Parsetree.class_type_field list list) = let x = let _startpos = _startpos__1_ in -# 835 "parsing/parser.mly" +# 901 "parsing/parser.mly" ( text_csig _startpos @ [_1] ) -# 17926 "parsing/parser.ml" +# 18259 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17932 "parsing/parser.ml" +# 18265 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17946,7 +18279,7 @@ module Tables = struct let _v : (Parsetree.class_field list list) = # 211 "" ( [] ) -# 17950 "parsing/parser.ml" +# 18283 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -17978,15 +18311,15 @@ module Tables = struct let _v : (Parsetree.class_field list list) = let x = let _startpos = _startpos__1_ in -# 833 "parsing/parser.mly" +# 899 "parsing/parser.mly" ( text_cstr _startpos @ [_1] ) -# 17984 "parsing/parser.ml" +# 18317 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 17990 "parsing/parser.ml" +# 18323 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18004,7 +18337,7 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = # 211 "" ( [] ) -# 18008 "parsing/parser.ml" +# 18341 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18036,15 +18369,15 @@ module Tables = struct let _v : (Parsetree.structure_item list list) = let x = let _startpos = _startpos__1_ in -# 821 "parsing/parser.mly" +# 887 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 18042 "parsing/parser.ml" +# 18375 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18048 "parsing/parser.ml" +# 18381 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18062,7 +18395,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = # 211 "" ( [] ) -# 18066 "parsing/parser.ml" +# 18399 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18095,32 +18428,32 @@ module Tables = struct let _1 = let x = let _1 = -# 887 "parsing/parser.mly" +# 953 "parsing/parser.mly" ( [] ) -# 18101 "parsing/parser.ml" +# 18434 "parsing/parser.ml" in -# 1117 "parsing/parser.mly" +# 1185 "parsing/parser.mly" ( _1 ) -# 18106 "parsing/parser.ml" +# 18439 "parsing/parser.ml" in # 183 "" ( x ) -# 18112 "parsing/parser.ml" +# 18445 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1197 "parsing/parser.mly" ( _1 ) -# 18118 "parsing/parser.ml" +# 18451 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18124 "parsing/parser.ml" +# 18457 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18172,58 +18505,58 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 18178 "parsing/parser.ml" +# 18511 "parsing/parser.ml" in -# 1308 "parsing/parser.mly" +# 1379 "parsing/parser.mly" ( mkstrexp e attrs ) -# 18183 "parsing/parser.ml" +# 18516 "parsing/parser.ml" in -# 831 "parsing/parser.mly" +# 897 "parsing/parser.mly" ( Ptop_def [_1] ) -# 18189 "parsing/parser.ml" +# 18522 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 829 "parsing/parser.mly" +# 895 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18197 "parsing/parser.ml" +# 18530 "parsing/parser.ml" in -# 889 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( x ) -# 18203 "parsing/parser.ml" +# 18536 "parsing/parser.ml" in -# 1117 "parsing/parser.mly" +# 1185 "parsing/parser.mly" ( _1 ) -# 18209 "parsing/parser.ml" +# 18542 "parsing/parser.ml" in # 183 "" ( x ) -# 18215 "parsing/parser.ml" +# 18548 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1197 "parsing/parser.mly" ( _1 ) -# 18221 "parsing/parser.ml" +# 18554 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18227 "parsing/parser.ml" +# 18560 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18255,27 +18588,27 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase list list) = let x = let _1 = let _1 = -# 831 "parsing/parser.mly" +# 897 "parsing/parser.mly" ( Ptop_def [_1] ) -# 18261 "parsing/parser.ml" +# 18594 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 829 "parsing/parser.mly" +# 895 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18267 "parsing/parser.ml" +# 18600 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1197 "parsing/parser.mly" ( _1 ) -# 18273 "parsing/parser.ml" +# 18606 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18279 "parsing/parser.ml" +# 18612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18310,29 +18643,29 @@ module Tables = struct let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 840 "parsing/parser.mly" +# 906 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 18317 "parsing/parser.ml" +# 18650 "parsing/parser.ml" in let _startpos = _startpos__1_ in -# 829 "parsing/parser.mly" +# 895 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 18324 "parsing/parser.ml" +# 18657 "parsing/parser.ml" in -# 1129 "parsing/parser.mly" +# 1197 "parsing/parser.mly" ( _1 ) -# 18330 "parsing/parser.ml" +# 18663 "parsing/parser.ml" in # 213 "" ( x :: xs ) -# 18336 "parsing/parser.ml" +# 18669 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18371,7 +18704,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 124 "" ( None ) -# 18375 "parsing/parser.ml" +# 18708 "parsing/parser.ml" in let x = let label = @@ -18379,9 +18712,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18385 "parsing/parser.ml" +# 18718 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18389,7 +18722,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2767 "parsing/parser.mly" +# 2847 "parsing/parser.mly" ( let label, pat = match opat with | None -> @@ -18403,13 +18736,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:_sloc pat octy ) -# 18407 "parsing/parser.ml" +# 18740 "parsing/parser.ml" in -# 1056 "parsing/parser.mly" +# 1122 "parsing/parser.mly" ( [x], None ) -# 18413 "parsing/parser.ml" +# 18746 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18455,7 +18788,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.pattern) list * unit option) = let _2 = # 126 "" ( Some x ) -# 18459 "parsing/parser.ml" +# 18792 "parsing/parser.ml" in let x = let label = @@ -18463,9 +18796,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18469 "parsing/parser.ml" +# 18802 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18473,7 +18806,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2767 "parsing/parser.mly" +# 2847 "parsing/parser.mly" ( let label, pat = match opat with | None -> @@ -18487,13 +18820,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:_sloc pat octy ) -# 18491 "parsing/parser.ml" +# 18824 "parsing/parser.ml" in -# 1056 "parsing/parser.mly" +# 1122 "parsing/parser.mly" ( [x], None ) -# 18497 "parsing/parser.ml" +# 18830 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18556,9 +18889,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18562 "parsing/parser.ml" +# 18895 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18566,7 +18899,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2767 "parsing/parser.mly" +# 2847 "parsing/parser.mly" ( let label, pat = match opat with | None -> @@ -18580,13 +18913,13 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:_sloc pat octy ) -# 18584 "parsing/parser.ml" +# 18917 "parsing/parser.ml" in -# 1058 "parsing/parser.mly" +# 1124 "parsing/parser.mly" ( [x], Some y ) -# 18590 "parsing/parser.ml" +# 18923 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18642,9 +18975,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18648 "parsing/parser.ml" +# 18981 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -18652,7 +18985,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2767 "parsing/parser.mly" +# 2847 "parsing/parser.mly" ( let label, pat = match opat with | None -> @@ -18666,14 +18999,14 @@ module Tables = struct in label, mkpat_opt_constraint ~loc:_sloc pat octy ) -# 18670 "parsing/parser.ml" +# 19003 "parsing/parser.ml" in -# 1062 "parsing/parser.mly" +# 1128 "parsing/parser.mly" ( let xs, y = tail in x :: xs, y ) -# 18677 "parsing/parser.ml" +# 19010 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18710,9 +19043,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.case) = -# 2525 "parsing/parser.mly" +# 2602 "parsing/parser.mly" ( Exp.case _1 _3 ) -# 18716 "parsing/parser.ml" +# 19049 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18763,9 +19096,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.case) = -# 2527 "parsing/parser.mly" +# 2604 "parsing/parser.mly" ( Exp.case _1 ~guard:_3 _5 ) -# 18769 "parsing/parser.ml" +# 19102 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18803,9 +19136,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.case) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2529 "parsing/parser.mly" +# 2606 "parsing/parser.mly" ( Exp.case _1 (Exp.unreachable ~loc:(make_loc _loc__3_) ()) ) -# 18809 "parsing/parser.ml" +# 19142 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18866,9 +19199,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 18872 "parsing/parser.ml" +# 19205 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -18877,49 +19210,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 18883 "parsing/parser.ml" +# 19216 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 18892 "parsing/parser.ml" +# 19225 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3184 "parsing/parser.mly" +# 3268 "parsing/parser.mly" ( _1 ) -# 18901 "parsing/parser.ml" +# 19234 "parsing/parser.ml" in let _1 = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 18908 "parsing/parser.ml" +# 19241 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 18916 "parsing/parser.ml" +# 19249 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3394 "parsing/parser.mly" +# 3478 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -18927,13 +19260,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 18931 "parsing/parser.ml" +# 19264 "parsing/parser.ml" in -# 3375 "parsing/parser.mly" +# 3459 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 18937 "parsing/parser.ml" +# 19270 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -18974,15 +19307,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3405 "parsing/parser.mly" +# 3489 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 18980 "parsing/parser.ml" +# 19313 "parsing/parser.ml" in -# 3375 "parsing/parser.mly" +# 3459 "parsing/parser.mly" ( let (f, c) = tail in (head :: f, c) ) -# 18986 "parsing/parser.ml" +# 19319 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19036,9 +19369,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19042 "parsing/parser.ml" +# 19375 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -19047,49 +19380,49 @@ module Tables = struct let _6 = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19053 "parsing/parser.ml" +# 19386 "parsing/parser.ml" in let _endpos__6_ = _endpos__1_inlined3_ in let _4 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19062 "parsing/parser.ml" +# 19395 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3184 "parsing/parser.mly" +# 3268 "parsing/parser.mly" ( _1 ) -# 19071 "parsing/parser.ml" +# 19404 "parsing/parser.ml" in let _1 = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19078 "parsing/parser.ml" +# 19411 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19086 "parsing/parser.ml" +# 19419 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3394 "parsing/parser.mly" +# 3478 "parsing/parser.mly" ( let info = match rhs_info _endpos__4_ with | Some _ as info_before_semi -> info_before_semi @@ -19097,13 +19430,13 @@ module Tables = struct in let attrs = add_info_attrs info (_4 @ _6) in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 19101 "parsing/parser.ml" +# 19434 "parsing/parser.ml" in -# 3378 "parsing/parser.mly" +# 3462 "parsing/parser.mly" ( [head], Closed ) -# 19107 "parsing/parser.ml" +# 19440 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19137,15 +19470,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3405 "parsing/parser.mly" +# 3489 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 19143 "parsing/parser.ml" +# 19476 "parsing/parser.ml" in -# 3378 "parsing/parser.mly" +# 3462 "parsing/parser.mly" ( [head], Closed ) -# 19149 "parsing/parser.ml" +# 19482 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19185,9 +19518,9 @@ module Tables = struct let _1_inlined1 : (Parsetree.core_type) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19191 "parsing/parser.ml" +# 19524 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -19196,50 +19529,50 @@ module Tables = struct let _4 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19202 "parsing/parser.ml" +# 19535 "parsing/parser.ml" in let _endpos__4_ = _endpos__1_inlined2_ in let _3 = let _1 = _1_inlined1 in -# 3184 "parsing/parser.mly" +# 3268 "parsing/parser.mly" ( _1 ) -# 19211 "parsing/parser.ml" +# 19544 "parsing/parser.ml" in let _1 = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19218 "parsing/parser.ml" +# 19551 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19226 "parsing/parser.ml" +# 19559 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3387 "parsing/parser.mly" +# 3471 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _4 in Of.tag ~loc:(make_loc _sloc) ~attrs _1 _3 ) -# 19237 "parsing/parser.ml" +# 19570 "parsing/parser.ml" in -# 3381 "parsing/parser.mly" +# 3465 "parsing/parser.mly" ( [head], Closed ) -# 19243 "parsing/parser.ml" +# 19576 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19266,15 +19599,15 @@ module Tables = struct let _symbolstartpos = _startpos_ty_ in let _sloc = (_symbolstartpos, _endpos) in -# 3405 "parsing/parser.mly" +# 3489 "parsing/parser.mly" ( Of.inherit_ ~loc:(make_loc _sloc) ty ) -# 19272 "parsing/parser.ml" +# 19605 "parsing/parser.ml" in -# 3381 "parsing/parser.mly" +# 3465 "parsing/parser.mly" ( [head], Closed ) -# 19278 "parsing/parser.ml" +# 19611 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19297,9 +19630,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.object_field list * Asttypes.closed_flag) = -# 3383 "parsing/parser.mly" +# 3467 "parsing/parser.mly" ( [], Open ) -# 19303 "parsing/parser.ml" +# 19636 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19344,9 +19677,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19350 "parsing/parser.ml" +# 19683 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let private_ : (Asttypes.private_flag) = Obj.magic private_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19358,41 +19691,41 @@ module Tables = struct Parsetree.attributes) = let ty = let _1 = _1_inlined2 in -# 3180 "parsing/parser.mly" +# 3264 "parsing/parser.mly" ( _1 ) -# 19364 "parsing/parser.ml" +# 19697 "parsing/parser.ml" in let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19372 "parsing/parser.ml" +# 19705 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19380 "parsing/parser.ml" +# 19713 "parsing/parser.ml" in let attrs = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19386 "parsing/parser.ml" +# 19719 "parsing/parser.ml" in let _1 = -# 3646 "parsing/parser.mly" +# 3734 "parsing/parser.mly" ( Fresh ) -# 19391 "parsing/parser.ml" +# 19724 "parsing/parser.ml" in -# 1875 "parsing/parser.mly" +# 1965 "parsing/parser.mly" ( (label, private_, Cfk_virtual ty), attrs ) -# 19396 "parsing/parser.ml" +# 19729 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19430,9 +19763,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19436 "parsing/parser.ml" +# 19769 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19444,36 +19777,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19450 "parsing/parser.ml" +# 19783 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19458 "parsing/parser.ml" +# 19791 "parsing/parser.ml" in let _2 = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19464 "parsing/parser.ml" +# 19797 "parsing/parser.ml" in let _1 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 19469 "parsing/parser.ml" +# 19802 "parsing/parser.ml" in -# 1877 "parsing/parser.mly" +# 1967 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 19477 "parsing/parser.ml" +# 19810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19517,9 +19850,9 @@ module Tables = struct } = _menhir_stack in let _5 : (Parsetree.expression) = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19523 "parsing/parser.ml" +# 19856 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -19532,39 +19865,39 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19538 "parsing/parser.ml" +# 19871 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19546 "parsing/parser.ml" +# 19879 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19554 "parsing/parser.ml" +# 19887 "parsing/parser.ml" in let _1 = -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 19560 "parsing/parser.ml" +# 19893 "parsing/parser.ml" in -# 1877 "parsing/parser.mly" +# 1967 "parsing/parser.mly" ( let e = _5 in let loc = Location.(e.pexp_loc.loc_start, e.pexp_loc.loc_end) in (_4, _3, Cfk_concrete (_1, ghexp ~loc (Pexp_poly (e, None)))), _2 ) -# 19568 "parsing/parser.ml" +# 19901 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19623,9 +19956,9 @@ module Tables = struct let _1_inlined2 : (Parsetree.core_type) = Obj.magic _1_inlined2 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19629 "parsing/parser.ml" +# 19962 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19637,45 +19970,45 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined2 in -# 3180 "parsing/parser.mly" +# 3264 "parsing/parser.mly" ( _1 ) -# 19643 "parsing/parser.ml" +# 19976 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined2_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19652 "parsing/parser.ml" +# 19985 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19660 "parsing/parser.ml" +# 19993 "parsing/parser.ml" in let _2 = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19666 "parsing/parser.ml" +# 19999 "parsing/parser.ml" in let _1 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 19671 "parsing/parser.ml" +# 20004 "parsing/parser.ml" in -# 1883 "parsing/parser.mly" +# 1973 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 19679 "parsing/parser.ml" +# 20012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19740,9 +20073,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.core_type) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19746 "parsing/parser.ml" +# 20079 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -19755,48 +20088,48 @@ module Tables = struct Parsetree.attributes) = let _6 = let _1 = _1_inlined3 in -# 3180 "parsing/parser.mly" +# 3264 "parsing/parser.mly" ( _1 ) -# 19761 "parsing/parser.ml" +# 20094 "parsing/parser.ml" in let _startpos__6_ = _startpos__1_inlined3_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19770 "parsing/parser.ml" +# 20103 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19778 "parsing/parser.ml" +# 20111 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19786 "parsing/parser.ml" +# 20119 "parsing/parser.ml" in let _1 = -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 19792 "parsing/parser.ml" +# 20125 "parsing/parser.ml" in -# 1883 "parsing/parser.mly" +# 1973 "parsing/parser.mly" ( let poly_exp = let loc = (_startpos__6_, _endpos__8_) in ghexp ~loc (Pexp_poly(_8, Some _6)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 19800 "parsing/parser.ml" +# 20133 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -19876,9 +20209,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 19882 "parsing/parser.ml" +# 20215 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -19888,38 +20221,38 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 19894 "parsing/parser.ml" +# 20227 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 19902 "parsing/parser.ml" +# 20235 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 19910 "parsing/parser.ml" +# 20243 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 19917 "parsing/parser.ml" +# 20250 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 19923 "parsing/parser.ml" +# 20256 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__11_ in @@ -19935,7 +20268,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1889 "parsing/parser.mly" +# 1979 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -19946,7 +20279,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 19950 "parsing/parser.ml" +# 20283 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20032,9 +20365,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 20038 "parsing/parser.ml" +# 20371 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.private_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -20045,41 +20378,41 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Asttypes.private_flag * Parsetree.class_field_kind) * Parsetree.attributes) = let _7 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 20051 "parsing/parser.ml" +# 20384 "parsing/parser.ml" in let _startpos__7_ = _startpos_xs_ in let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 20059 "parsing/parser.ml" +# 20392 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 20067 "parsing/parser.ml" +# 20400 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 20076 "parsing/parser.ml" +# 20409 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 20083 "parsing/parser.ml" +# 20416 "parsing/parser.ml" in let _endpos = _endpos__11_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -20094,7 +20427,7 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1889 "parsing/parser.mly" +# 1979 "parsing/parser.mly" ( let poly_exp_loc = (_startpos__7_, _endpos__11_) in let poly_exp = let exp, poly = @@ -20105,7 +20438,7 @@ module Tables = struct ghexp ~loc:poly_exp_loc (Pexp_poly(exp, Some poly)) in (_4, _3, Cfk_concrete (_1, poly_exp)), _2 ) -# 20109 "parsing/parser.ml" +# 20442 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20124,17 +20457,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 20130 "parsing/parser.ml" +# 20463 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20138 "parsing/parser.ml" +# 20471 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20165,9 +20498,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 20171 "parsing/parser.ml" +# 20504 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20175,9 +20508,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20181 "parsing/parser.ml" +# 20514 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20196,17 +20529,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 20202 "parsing/parser.ml" +# 20535 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20210 "parsing/parser.ml" +# 20543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20237,9 +20570,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 20243 "parsing/parser.ml" +# 20576 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20247,9 +20580,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20253 "parsing/parser.ml" +# 20586 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20272,14 +20605,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20278 "parsing/parser.ml" +# 20611 "parsing/parser.ml" in -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20283 "parsing/parser.ml" +# 20616 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20317,20 +20650,20 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _1 = let _1 = -# 3486 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( "::" ) -# 20323 "parsing/parser.ml" +# 20656 "parsing/parser.ml" in -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20328 "parsing/parser.ml" +# 20661 "parsing/parser.ml" in -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20334 "parsing/parser.ml" +# 20667 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20353,14 +20686,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = let _1 = -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20359 "parsing/parser.ml" +# 20692 "parsing/parser.ml" in -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20364 "parsing/parser.ml" +# 20697 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20399,15 +20732,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20405 "parsing/parser.ml" +# 20738 "parsing/parser.ml" in -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20411 "parsing/parser.ml" +# 20744 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20460,20 +20793,20 @@ module Tables = struct let _v : (Longident.t) = let _3 = let (_2, _1) = (_2_inlined1, _1_inlined1) in let _1 = -# 3486 "parsing/parser.mly" +# 3570 "parsing/parser.mly" ( "::" ) -# 20466 "parsing/parser.ml" +# 20799 "parsing/parser.ml" in -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20471 "parsing/parser.ml" +# 20804 "parsing/parser.ml" in -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20477 "parsing/parser.ml" +# 20810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20512,15 +20845,15 @@ module Tables = struct let _v : (Longident.t) = let _3 = let _1 = _1_inlined1 in -# 3543 "parsing/parser.mly" +# 3628 "parsing/parser.mly" ( _1 ) -# 20518 "parsing/parser.ml" +# 20851 "parsing/parser.ml" in -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20524 "parsing/parser.ml" +# 20857 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20543,9 +20876,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20549 "parsing/parser.ml" +# 20882 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20582,9 +20915,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20588 "parsing/parser.ml" +# 20921 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20603,17 +20936,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 20609 "parsing/parser.ml" +# 20942 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20617 "parsing/parser.ml" +# 20950 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20644,9 +20977,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 20650 "parsing/parser.ml" +# 20983 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20654,9 +20987,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20660 "parsing/parser.ml" +# 20993 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20675,17 +21008,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 20681 "parsing/parser.ml" +# 21014 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20689 "parsing/parser.ml" +# 21022 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20716,9 +21049,9 @@ module Tables = struct }; } = _menhir_stack in let _3 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 20722 "parsing/parser.ml" +# 21055 "parsing/parser.ml" ) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : (Longident.t) = Obj.magic _1 in @@ -20726,9 +21059,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20732 "parsing/parser.ml" +# 21065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20751,9 +21084,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3506 "parsing/parser.mly" +# 3590 "parsing/parser.mly" ( Lident _1 ) -# 20757 "parsing/parser.ml" +# 21090 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20790,9 +21123,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Longident.t) = -# 3507 "parsing/parser.mly" +# 3591 "parsing/parser.mly" ( Ldot(_1,_3) ) -# 20796 "parsing/parser.ml" +# 21129 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20815,9 +21148,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3522 "parsing/parser.mly" +# 3606 "parsing/parser.mly" ( _1 ) -# 20821 "parsing/parser.ml" +# 21154 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20864,9 +21197,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3524 "parsing/parser.mly" +# 3608 "parsing/parser.mly" ( lapply ~loc:_sloc _1 _3 ) -# 20870 "parsing/parser.ml" +# 21203 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20904,9 +21237,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Longident.t) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3526 "parsing/parser.mly" +# 3610 "parsing/parser.mly" ( expecting _loc__3_ "module path" ) -# 20910 "parsing/parser.ml" +# 21243 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20929,9 +21262,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3519 "parsing/parser.mly" +# 3603 "parsing/parser.mly" ( _1 ) -# 20935 "parsing/parser.ml" +# 21268 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -20961,9 +21294,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1377 "parsing/parser.mly" +# 1448 "parsing/parser.mly" ( me ) -# 20967 "parsing/parser.ml" +# 21300 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21008,24 +21341,24 @@ module Tables = struct let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1380 "parsing/parser.mly" +# 1451 "parsing/parser.mly" ( Pmod_constraint(me, mty) ) -# 21014 "parsing/parser.ml" +# 21347 "parsing/parser.ml" in let _endpos__1_ = _endpos_me_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21023 "parsing/parser.ml" +# 21356 "parsing/parser.ml" in -# 1384 "parsing/parser.mly" +# 1455 "parsing/parser.mly" ( _1 ) -# 21029 "parsing/parser.ml" +# 21362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21056,25 +21389,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1382 "parsing/parser.mly" +# 1453 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmod_functor(arg, body) ) -# 21063 "parsing/parser.ml" +# 21396 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21072 "parsing/parser.ml" +# 21405 "parsing/parser.ml" in -# 1384 "parsing/parser.mly" +# 1455 "parsing/parser.mly" ( _1 ) -# 21078 "parsing/parser.ml" +# 21411 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21104,9 +21437,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_mty_ in let _v : (Parsetree.module_type) = -# 1621 "parsing/parser.mly" +# 1694 "parsing/parser.mly" ( mty ) -# 21110 "parsing/parser.ml" +# 21443 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21137,25 +21470,25 @@ module Tables = struct let _endpos = _endpos_body_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1624 "parsing/parser.mly" +# 1697 "parsing/parser.mly" ( let (_, arg) = arg_and_pos in Pmty_functor(arg, body) ) -# 21144 "parsing/parser.ml" +# 21477 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_body_, _startpos_arg_and_pos_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 862 "parsing/parser.mly" +# 928 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 21153 "parsing/parser.ml" +# 21486 "parsing/parser.ml" in -# 1627 "parsing/parser.mly" +# 1700 "parsing/parser.mly" ( _1 ) -# 21159 "parsing/parser.ml" +# 21492 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21201,18 +21534,18 @@ module Tables = struct let _v : (Parsetree.module_expr) = let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21207 "parsing/parser.ml" +# 21540 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1216 "parsing/parser.mly" +# 1287 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_structure s) ) -# 21216 "parsing/parser.ml" +# 21549 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21258,17 +21591,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21264 "parsing/parser.ml" +# 21597 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1218 "parsing/parser.mly" +# 1289 "parsing/parser.mly" ( unclosed "struct" _loc__1_ "end" _loc__4_ ) -# 21272 "parsing/parser.ml" +# 21605 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21321,30 +21654,30 @@ module Tables = struct let _v : (Parsetree.module_expr) = let args = let _1 = _1_inlined2 in -# 1182 "parsing/parser.mly" +# 1253 "parsing/parser.mly" ( _1 ) -# 21327 "parsing/parser.ml" +# 21660 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21335 "parsing/parser.ml" +# 21668 "parsing/parser.ml" in let _endpos = _endpos_me_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1220 "parsing/parser.mly" +# 1291 "parsing/parser.mly" ( wrap_mod_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmod ~loc:(startpos, _endpos) (Pmod_functor (arg, acc)) ) me args ) ) -# 21348 "parsing/parser.ml" +# 21681 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21367,9 +21700,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_me_ in let _v : (Parsetree.module_expr) = -# 1226 "parsing/parser.mly" +# 1297 "parsing/parser.mly" ( me ) -# 21373 "parsing/parser.ml" +# 21706 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21399,9 +21732,9 @@ module Tables = struct let _startpos = _startpos_me_ in let _endpos = _endpos_attr_ in let _v : (Parsetree.module_expr) = -# 1228 "parsing/parser.mly" +# 1299 "parsing/parser.mly" ( Mod.attr me attr ) -# 21405 "parsing/parser.ml" +# 21738 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21430,30 +21763,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21436 "parsing/parser.ml" +# 21769 "parsing/parser.ml" in -# 1232 "parsing/parser.mly" +# 1303 "parsing/parser.mly" ( Pmod_ident x ) -# 21442 "parsing/parser.ml" +# 21775 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21451 "parsing/parser.ml" +# 21784 "parsing/parser.ml" in -# 1244 "parsing/parser.mly" +# 1315 "parsing/parser.mly" ( _1 ) -# 21457 "parsing/parser.ml" +# 21790 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21484,24 +21817,24 @@ module Tables = struct let _endpos = _endpos_me2_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1235 "parsing/parser.mly" +# 1306 "parsing/parser.mly" ( Pmod_apply(me1, me2) ) -# 21490 "parsing/parser.ml" +# 21823 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_me2_, _startpos_me1_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21499 "parsing/parser.ml" +# 21832 "parsing/parser.ml" in -# 1244 "parsing/parser.mly" +# 1315 "parsing/parser.mly" ( _1 ) -# 21505 "parsing/parser.ml" +# 21838 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21543,10 +21876,10 @@ module Tables = struct let _symbolstartpos = _startpos_me1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1238 "parsing/parser.mly" +# 1309 "parsing/parser.mly" ( (* TODO review mkmod location *) Pmod_apply(me1, mkmod ~loc:_sloc (Pmod_structure [])) ) -# 21550 "parsing/parser.ml" +# 21883 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_me1_) in @@ -21554,15 +21887,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21560 "parsing/parser.ml" +# 21893 "parsing/parser.ml" in -# 1244 "parsing/parser.mly" +# 1315 "parsing/parser.mly" ( _1 ) -# 21566 "parsing/parser.ml" +# 21899 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21586,24 +21919,24 @@ module Tables = struct let _endpos = _endpos_ex_ in let _v : (Parsetree.module_expr) = let _1 = let _1 = -# 1242 "parsing/parser.mly" +# 1313 "parsing/parser.mly" ( Pmod_extension ex ) -# 21592 "parsing/parser.ml" +# 21925 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_ex_, _startpos_ex_) in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 860 "parsing/parser.mly" +# 926 "parsing/parser.mly" ( mkmod ~loc:_sloc _1 ) -# 21601 "parsing/parser.ml" +# 21934 "parsing/parser.ml" in -# 1244 "parsing/parser.mly" +# 1315 "parsing/parser.mly" ( _1 ) -# 21607 "parsing/parser.ml" +# 21940 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21622,17 +21955,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let x : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 21628 "parsing/parser.ml" +# 21961 "parsing/parser.ml" ) = Obj.magic x in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (string option) = -# 1199 "parsing/parser.mly" +# 1270 "parsing/parser.mly" ( Some x ) -# 21636 "parsing/parser.ml" +# 21969 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21655,9 +21988,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string option) = -# 1202 "parsing/parser.mly" +# 1273 "parsing/parser.mly" ( None ) -# 21661 "parsing/parser.ml" +# 21994 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21715,9 +22048,9 @@ module Tables = struct let _1_inlined3 : (Longident.t) = Obj.magic _1_inlined3 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 21721 "parsing/parser.ml" +# 22054 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let ext : (string Asttypes.loc option) = Obj.magic ext in @@ -21728,9 +22061,9 @@ module Tables = struct let _v : (Parsetree.module_substitution * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 21734 "parsing/parser.ml" +# 22067 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -21740,9 +22073,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21746 "parsing/parser.ml" +# 22079 "parsing/parser.ml" in let uid = @@ -21751,31 +22084,31 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21757 "parsing/parser.ml" +# 22090 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21765 "parsing/parser.ml" +# 22098 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1657 "parsing/parser.mly" +# 1730 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Ms.mk uid body ~attrs ~loc ~docs, ext ) -# 21779 "parsing/parser.ml" +# 22112 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21826,9 +22159,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 21832 "parsing/parser.ml" +# 22165 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in let _2 : (string Asttypes.loc option) = Obj.magic _2 in @@ -21842,24 +22175,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 21848 "parsing/parser.ml" +# 22181 "parsing/parser.ml" in let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21856 "parsing/parser.ml" +# 22189 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in -# 1664 "parsing/parser.mly" +# 1737 "parsing/parser.mly" ( expecting _loc__6_ "module path" ) -# 21863 "parsing/parser.ml" +# 22196 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21905,18 +22238,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21911 "parsing/parser.ml" +# 22244 "parsing/parser.ml" in let _endpos = _endpos__4_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1509 "parsing/parser.mly" +# 1580 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs (Pmty_signature s) ) -# 21920 "parsing/parser.ml" +# 22253 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -21962,17 +22295,17 @@ module Tables = struct let _v : (Parsetree.module_type) = let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 21968 "parsing/parser.ml" +# 22301 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1511 "parsing/parser.mly" +# 1582 "parsing/parser.mly" ( unclosed "sig" _loc__1_ "end" _loc__4_ ) -# 21976 "parsing/parser.ml" +# 22309 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22025,30 +22358,30 @@ module Tables = struct let _v : (Parsetree.module_type) = let args = let _1 = _1_inlined2 in -# 1182 "parsing/parser.mly" +# 1253 "parsing/parser.mly" ( _1 ) -# 22031 "parsing/parser.ml" +# 22364 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 22039 "parsing/parser.ml" +# 22372 "parsing/parser.ml" in let _endpos = _endpos_mty_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1515 "parsing/parser.mly" +# 1586 "parsing/parser.mly" ( wrap_mty_attrs ~loc:_sloc attrs ( List.fold_left (fun acc (startpos, arg) -> mkmty ~loc:(startpos, _endpos) (Pmty_functor (arg, acc)) ) mty args ) ) -# 22052 "parsing/parser.ml" +# 22385 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22101,18 +22434,18 @@ module Tables = struct let _v : (Parsetree.module_type) = let _4 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 22107 "parsing/parser.ml" +# 22440 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1521 "parsing/parser.mly" +# 1592 "parsing/parser.mly" ( mkmty ~loc:_sloc ~attrs:_4 (Pmty_typeof _5) ) -# 22116 "parsing/parser.ml" +# 22449 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22149,9 +22482,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = -# 1523 "parsing/parser.mly" +# 1594 "parsing/parser.mly" ( _2 ) -# 22155 "parsing/parser.ml" +# 22488 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22190,9 +22523,9 @@ module Tables = struct let _v : (Parsetree.module_type) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1525 "parsing/parser.mly" +# 1596 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 22196 "parsing/parser.ml" +# 22529 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22222,9 +22555,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.module_type) = -# 1527 "parsing/parser.mly" +# 1598 "parsing/parser.mly" ( Mty.attr _1 _2 ) -# 22228 "parsing/parser.ml" +# 22561 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22253,30 +22586,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22259 "parsing/parser.ml" +# 22592 "parsing/parser.ml" in -# 1530 "parsing/parser.mly" +# 1601 "parsing/parser.mly" ( Pmty_ident _1 ) -# 22265 "parsing/parser.ml" +# 22598 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 862 "parsing/parser.mly" +# 928 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22274 "parsing/parser.ml" +# 22607 "parsing/parser.ml" in -# 1541 "parsing/parser.mly" +# 1612 "parsing/parser.mly" ( _1 ) -# 22280 "parsing/parser.ml" +# 22613 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22314,24 +22647,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1533 "parsing/parser.mly" +# 1604 "parsing/parser.mly" ( Pmty_functor(Named (mknoloc None, _1), _3) ) -# 22320 "parsing/parser.ml" +# 22653 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 862 "parsing/parser.mly" +# 928 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22329 "parsing/parser.ml" +# 22662 "parsing/parser.ml" in -# 1541 "parsing/parser.mly" +# 1612 "parsing/parser.mly" ( _1 ) -# 22335 "parsing/parser.ml" +# 22668 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22373,18 +22706,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 22377 "parsing/parser.ml" +# 22710 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 22382 "parsing/parser.ml" +# 22715 "parsing/parser.ml" in -# 1535 "parsing/parser.mly" +# 1606 "parsing/parser.mly" ( Pmty_with(_1, _3) ) -# 22388 "parsing/parser.ml" +# 22721 "parsing/parser.ml" in let _endpos__1_ = _endpos_xs_ in @@ -22392,15 +22725,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 862 "parsing/parser.mly" +# 928 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22398 "parsing/parser.ml" +# 22731 "parsing/parser.ml" in -# 1541 "parsing/parser.mly" +# 1612 "parsing/parser.mly" ( _1 ) -# 22404 "parsing/parser.ml" +# 22737 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22424,23 +22757,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.module_type) = let _1 = let _1 = -# 1539 "parsing/parser.mly" +# 1610 "parsing/parser.mly" ( Pmty_extension _1 ) -# 22430 "parsing/parser.ml" +# 22763 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 862 "parsing/parser.mly" +# 928 "parsing/parser.mly" ( mkmty ~loc:_sloc _1 ) -# 22438 "parsing/parser.ml" +# 22771 "parsing/parser.ml" in -# 1541 "parsing/parser.mly" +# 1612 "parsing/parser.mly" ( _1 ) -# 22444 "parsing/parser.ml" +# 22777 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22507,9 +22840,9 @@ module Tables = struct let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 22513 "parsing/parser.ml" +# 22846 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -22519,31 +22852,141 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22525 "parsing/parser.ml" +# 22858 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 22533 "parsing/parser.ml" +# 22866 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1455 "parsing/parser.mly" +# 1526 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Mtd.mk id ?typ ~attrs ~loc ~docs, ext ) -# 22547 "parsing/parser.ml" +# 22880 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined3; + MenhirLib.EngineTypes.startp = _startpos__1_inlined3_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = typ; + MenhirLib.EngineTypes.startp = _startpos_typ_; + MenhirLib.EngineTypes.endp = _endpos_typ_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _6; + MenhirLib.EngineTypes.startp = _startpos__6_; + MenhirLib.EngineTypes.endp = _endpos__6_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined2; + MenhirLib.EngineTypes.startp = _startpos__1_inlined2_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = ext; + MenhirLib.EngineTypes.startp = _startpos_ext_; + MenhirLib.EngineTypes.endp = _endpos_ext_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + }; + }; + } = _menhir_stack in + let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in + let typ : (Parsetree.module_type) = Obj.magic typ in + let _6 : unit = Obj.magic _6 in + let _1_inlined2 : (Asttypes.label) = Obj.magic _1_inlined2 in + let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in + let ext : (string Asttypes.loc option) = Obj.magic ext in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_inlined3_ in + let _v : (Parsetree.module_type_declaration * string Asttypes.loc option) = let attrs2 = + let _1 = _1_inlined3 in + +# 3831 "parsing/parser.mly" + ( _1 ) +# 22956 "parsing/parser.ml" + + in + let _endpos_attrs2_ = _endpos__1_inlined3_ in + let id = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 883 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 22968 "parsing/parser.ml" + + in + let attrs1 = + let _1 = _1_inlined1 in + +# 3835 "parsing/parser.mly" + ( _1 ) +# 22976 "parsing/parser.ml" + + in + let _endpos = _endpos_attrs2_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 1786 "parsing/parser.mly" + ( + let attrs = attrs1 @ attrs2 in + let loc = make_loc _sloc in + let docs = symbol_docs _sloc in + Mtd.mk id ~typ ~attrs ~loc ~docs, ext + ) +# 22990 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22566,9 +23009,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3529 "parsing/parser.mly" +# 3613 "parsing/parser.mly" ( _1 ) -# 22572 "parsing/parser.ml" +# 23015 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22584,9 +23027,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag) = -# 3606 "parsing/parser.mly" +# 3694 "parsing/parser.mly" ( Immutable ) -# 22590 "parsing/parser.ml" +# 23033 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22609,9 +23052,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3607 "parsing/parser.mly" +# 3695 "parsing/parser.mly" ( Mutable ) -# 22615 "parsing/parser.ml" +# 23058 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22627,9 +23070,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3615 "parsing/parser.mly" +# 3703 "parsing/parser.mly" ( Immutable, Concrete ) -# 22633 "parsing/parser.ml" +# 23076 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22652,9 +23095,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3617 "parsing/parser.mly" +# 3705 "parsing/parser.mly" ( Mutable, Concrete ) -# 22658 "parsing/parser.ml" +# 23101 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22677,9 +23120,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3619 "parsing/parser.mly" +# 3707 "parsing/parser.mly" ( Immutable, Virtual ) -# 22683 "parsing/parser.ml" +# 23126 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22709,9 +23152,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3622 "parsing/parser.mly" +# 3710 "parsing/parser.mly" ( Mutable, Virtual ) -# 22715 "parsing/parser.ml" +# 23158 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22741,9 +23184,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag * Asttypes.virtual_flag) = -# 3622 "parsing/parser.mly" +# 3710 "parsing/parser.mly" ( Mutable, Virtual ) -# 22747 "parsing/parser.ml" +# 23190 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22773,9 +23216,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.label) = -# 3579 "parsing/parser.mly" +# 3665 "parsing/parser.mly" ( _2 ) -# 22779 "parsing/parser.ml" +# 23222 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22794,9 +23237,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 22800 "parsing/parser.ml" +# 23243 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -22806,15 +23249,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22812 "parsing/parser.ml" +# 23255 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 22818 "parsing/parser.ml" +# 23261 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22840,9 +23283,9 @@ module Tables = struct } = _menhir_stack in let xs : (string Asttypes.loc list) = Obj.magic xs in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 22846 "parsing/parser.ml" +# 23289 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -22852,15 +23295,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 22858 "parsing/parser.ml" +# 23301 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 22864 "parsing/parser.ml" +# 23307 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22879,22 +23322,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let s : ( -# 689 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * Location.t * string option) -# 22885 "parsing/parser.ml" +# 23328 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_s_ in let _v : (string list) = let x = -# 3575 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 22893 "parsing/parser.ml" +# 23336 "parsing/parser.ml" in # 221 "" ( [ x ] ) -# 22898 "parsing/parser.ml" +# 23341 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22920,22 +23363,22 @@ module Tables = struct } = _menhir_stack in let xs : (string list) = Obj.magic xs in let s : ( -# 689 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * Location.t * string option) -# 22926 "parsing/parser.ml" +# 23369 "parsing/parser.ml" ) = Obj.magic s in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_s_ in let _endpos = _endpos_xs_ in let _v : (string list) = let x = -# 3575 "parsing/parser.mly" +# 3661 "parsing/parser.mly" ( let body, _, _ = s in body ) -# 22934 "parsing/parser.ml" +# 23377 "parsing/parser.ml" in # 223 "" ( x :: xs ) -# 22939 "parsing/parser.ml" +# 23382 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22958,14 +23401,14 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 22964 "parsing/parser.ml" +# 23407 "parsing/parser.ml" in -# 2901 "parsing/parser.mly" +# 2981 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 22969 "parsing/parser.ml" +# 23412 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -22995,14 +23438,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23001 "parsing/parser.ml" +# 23444 "parsing/parser.ml" in -# 2901 "parsing/parser.mly" +# 2981 "parsing/parser.mly" ( (Ptype_abstract, priv, Some ty) ) -# 23006 "parsing/parser.ml" +# 23449 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23025,26 +23468,26 @@ module Tables = struct let _startpos = _startpos_cs_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23031 "parsing/parser.ml" +# 23474 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23037 "parsing/parser.ml" +# 23480 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23042 "parsing/parser.ml" +# 23485 "parsing/parser.ml" in -# 2905 "parsing/parser.mly" +# 2985 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23048 "parsing/parser.ml" +# 23491 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23074,26 +23517,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23080 "parsing/parser.ml" +# 23523 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23086 "parsing/parser.ml" +# 23529 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23091 "parsing/parser.ml" +# 23534 "parsing/parser.ml" in -# 2905 "parsing/parser.mly" +# 2985 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23097 "parsing/parser.ml" +# 23540 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23130,33 +23573,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23136 "parsing/parser.ml" +# 23579 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23143 "parsing/parser.ml" +# 23586 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23148 "parsing/parser.ml" +# 23591 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23154 "parsing/parser.ml" +# 23597 "parsing/parser.ml" in -# 2905 "parsing/parser.mly" +# 2985 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23160 "parsing/parser.ml" +# 23603 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23200,33 +23643,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_cs_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23206 "parsing/parser.ml" +# 23649 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23213 "parsing/parser.ml" +# 23656 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23218 "parsing/parser.ml" +# 23661 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23224 "parsing/parser.ml" +# 23667 "parsing/parser.ml" in -# 2905 "parsing/parser.mly" +# 2985 "parsing/parser.mly" ( (Ptype_variant cs, priv, oty) ) -# 23230 "parsing/parser.ml" +# 23673 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23249,26 +23692,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23255 "parsing/parser.ml" +# 23698 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23261 "parsing/parser.ml" +# 23704 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23266 "parsing/parser.ml" +# 23709 "parsing/parser.ml" in -# 2909 "parsing/parser.mly" +# 2989 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23272 "parsing/parser.ml" +# 23715 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23298,26 +23741,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23304 "parsing/parser.ml" +# 23747 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23310 "parsing/parser.ml" +# 23753 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23315 "parsing/parser.ml" +# 23758 "parsing/parser.ml" in -# 2909 "parsing/parser.mly" +# 2989 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23321 "parsing/parser.ml" +# 23764 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23354,33 +23797,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23360 "parsing/parser.ml" +# 23803 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23367 "parsing/parser.ml" +# 23810 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23372 "parsing/parser.ml" +# 23815 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23378 "parsing/parser.ml" +# 23821 "parsing/parser.ml" in -# 2909 "parsing/parser.mly" +# 2989 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23384 "parsing/parser.ml" +# 23827 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23424,33 +23867,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__3_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23430 "parsing/parser.ml" +# 23873 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23437 "parsing/parser.ml" +# 23880 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23442 "parsing/parser.ml" +# 23885 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23448 "parsing/parser.ml" +# 23891 "parsing/parser.ml" in -# 2909 "parsing/parser.mly" +# 2989 "parsing/parser.mly" ( (Ptype_open, priv, oty) ) -# 23454 "parsing/parser.ml" +# 23897 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23487,26 +23930,26 @@ module Tables = struct let _startpos = _startpos__3_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23493 "parsing/parser.ml" +# 23936 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23499 "parsing/parser.ml" +# 23942 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23504 "parsing/parser.ml" +# 23947 "parsing/parser.ml" in -# 2913 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23510 "parsing/parser.ml" +# 23953 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23550,26 +23993,26 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23556 "parsing/parser.ml" +# 23999 "parsing/parser.ml" in let oty = let _1 = # 124 "" ( None ) -# 23562 "parsing/parser.ml" +# 24005 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23567 "parsing/parser.ml" +# 24010 "parsing/parser.ml" in -# 2913 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23573 "parsing/parser.ml" +# 24016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23620,33 +24063,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 23626 "parsing/parser.ml" +# 24069 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23633 "parsing/parser.ml" +# 24076 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23638 "parsing/parser.ml" +# 24081 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23644 "parsing/parser.ml" +# 24087 "parsing/parser.ml" in -# 2913 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23650 "parsing/parser.ml" +# 24093 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23704,33 +24147,33 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos__5_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = let priv = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 23710 "parsing/parser.ml" +# 24153 "parsing/parser.ml" in let oty = let _1 = let x = # 191 "" ( x ) -# 23717 "parsing/parser.ml" +# 24160 "parsing/parser.ml" in # 126 "" ( Some x ) -# 23722 "parsing/parser.ml" +# 24165 "parsing/parser.ml" in -# 2917 "parsing/parser.mly" +# 2997 "parsing/parser.mly" ( _1 ) -# 23728 "parsing/parser.ml" +# 24171 "parsing/parser.ml" in -# 2913 "parsing/parser.mly" +# 2993 "parsing/parser.mly" ( (Ptype_record ls, priv, oty) ) -# 23734 "parsing/parser.ml" +# 24177 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23783,37 +24226,37 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 23789 "parsing/parser.ml" +# 24232 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 23798 "parsing/parser.ml" +# 24241 "parsing/parser.ml" in let override = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 23804 "parsing/parser.ml" +# 24247 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1474 "parsing/parser.mly" +# 1545 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 23817 "parsing/parser.ml" +# 24260 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23873,40 +24316,40 @@ module Tables = struct let _v : (Parsetree.open_declaration * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 23879 "parsing/parser.ml" +# 24322 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let attrs1 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 23888 "parsing/parser.ml" +# 24331 "parsing/parser.ml" in let override = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 23896 "parsing/parser.ml" +# 24339 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1474 "parsing/parser.mly" +# 1545 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk me ~override ~attrs ~loc ~docs, ext ) -# 23910 "parsing/parser.ml" +# 24353 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -23959,9 +24402,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 23965 "parsing/parser.ml" +# 24408 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -23971,36 +24414,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 23977 "parsing/parser.ml" +# 24420 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 23985 "parsing/parser.ml" +# 24428 "parsing/parser.ml" in let override = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 23991 "parsing/parser.ml" +# 24434 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1489 "parsing/parser.mly" +# 1560 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 24004 "parsing/parser.ml" +# 24447 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24060,9 +24503,9 @@ module Tables = struct let _v : (Parsetree.open_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 24066 "parsing/parser.ml" +# 24509 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -24072,39 +24515,39 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 24078 "parsing/parser.ml" +# 24521 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined2 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 24086 "parsing/parser.ml" +# 24529 "parsing/parser.ml" in let override = let _1 = _1_inlined1 in -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 24094 "parsing/parser.ml" +# 24537 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1489 "parsing/parser.mly" +# 1560 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Opn.mk id ~override ~attrs ~loc ~docs, ext ) -# 24108 "parsing/parser.ml" +# 24551 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24123,17 +24566,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 675 "parsing/parser.mly" +# 729 "parsing/parser.mly" (string) -# 24129 "parsing/parser.ml" +# 24572 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3445 "parsing/parser.mly" +# 3529 "parsing/parser.mly" ( _1 ) -# 24137 "parsing/parser.ml" +# 24580 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24152,17 +24595,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 633 "parsing/parser.mly" +# 687 "parsing/parser.mly" (string) -# 24158 "parsing/parser.ml" +# 24601 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3446 "parsing/parser.mly" +# 3530 "parsing/parser.mly" ( _1 ) -# 24166 "parsing/parser.ml" +# 24609 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24181,17 +24624,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 634 "parsing/parser.mly" +# 688 "parsing/parser.mly" (string) -# 24187 "parsing/parser.ml" +# 24630 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3447 "parsing/parser.mly" +# 3531 "parsing/parser.mly" ( _1 ) -# 24195 "parsing/parser.ml" +# 24638 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24231,17 +24674,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24237 "parsing/parser.ml" +# 24680 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3448 "parsing/parser.mly" +# 3532 "parsing/parser.mly" ( "."^ _1 ^"(" ^ _3 ^ ")" ) -# 24245 "parsing/parser.ml" +# 24688 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24288,17 +24731,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24294 "parsing/parser.ml" +# 24737 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3449 "parsing/parser.mly" +# 3533 "parsing/parser.mly" ( "."^ _1 ^ "(" ^ _3 ^ ")<-" ) -# 24302 "parsing/parser.ml" +# 24745 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24338,17 +24781,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24344 "parsing/parser.ml" +# 24787 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3450 "parsing/parser.mly" +# 3534 "parsing/parser.mly" ( "."^ _1 ^"[" ^ _3 ^ "]" ) -# 24352 "parsing/parser.ml" +# 24795 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24395,17 +24838,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24401 "parsing/parser.ml" +# 24844 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3451 "parsing/parser.mly" +# 3535 "parsing/parser.mly" ( "."^ _1 ^ "[" ^ _3 ^ "]<-" ) -# 24409 "parsing/parser.ml" +# 24852 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24445,17 +24888,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24451 "parsing/parser.ml" +# 24894 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Asttypes.label) = -# 3452 "parsing/parser.mly" +# 3536 "parsing/parser.mly" ( "."^ _1 ^"{" ^ _3 ^ "}" ) -# 24459 "parsing/parser.ml" +# 24902 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24502,17 +24945,17 @@ module Tables = struct let _3 : (string) = Obj.magic _3 in let _2 : unit = Obj.magic _2 in let _1 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 24508 "parsing/parser.ml" +# 24951 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Asttypes.label) = -# 3453 "parsing/parser.mly" +# 3537 "parsing/parser.mly" ( "."^ _1 ^ "{" ^ _3 ^ "}<-" ) -# 24516 "parsing/parser.ml" +# 24959 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24531,17 +24974,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 686 "parsing/parser.mly" +# 740 "parsing/parser.mly" (string) -# 24537 "parsing/parser.ml" +# 24980 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3454 "parsing/parser.mly" +# 3538 "parsing/parser.mly" ( _1 ) -# 24545 "parsing/parser.ml" +# 24988 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24564,9 +25007,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3455 "parsing/parser.mly" +# 3539 "parsing/parser.mly" ( "!" ) -# 24570 "parsing/parser.ml" +# 25013 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24585,22 +25028,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 627 "parsing/parser.mly" +# 681 "parsing/parser.mly" (string) -# 24591 "parsing/parser.ml" +# 25034 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3459 "parsing/parser.mly" +# 3543 "parsing/parser.mly" ( op ) -# 24599 "parsing/parser.ml" +# 25042 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24604 "parsing/parser.ml" +# 25047 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24619,22 +25062,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 628 "parsing/parser.mly" +# 682 "parsing/parser.mly" (string) -# 24625 "parsing/parser.ml" +# 25068 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3460 "parsing/parser.mly" +# 3544 "parsing/parser.mly" ( op ) -# 24633 "parsing/parser.ml" +# 25076 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24638 "parsing/parser.ml" +# 25081 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24653,22 +25096,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 629 "parsing/parser.mly" +# 683 "parsing/parser.mly" (string) -# 24659 "parsing/parser.ml" +# 25102 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3461 "parsing/parser.mly" +# 3545 "parsing/parser.mly" ( op ) -# 24667 "parsing/parser.ml" +# 25110 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24672 "parsing/parser.ml" +# 25115 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24687,22 +25130,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 630 "parsing/parser.mly" +# 684 "parsing/parser.mly" (string) -# 24693 "parsing/parser.ml" +# 25136 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3462 "parsing/parser.mly" +# 3546 "parsing/parser.mly" ( op ) -# 24701 "parsing/parser.ml" +# 25144 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24706 "parsing/parser.ml" +# 25149 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24721,22 +25164,22 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let op : ( -# 631 "parsing/parser.mly" +# 685 "parsing/parser.mly" (string) -# 24727 "parsing/parser.ml" +# 25170 "parsing/parser.ml" ) = Obj.magic op in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_op_ in let _endpos = _endpos_op_ in let _v : (Asttypes.label) = let _1 = -# 3463 "parsing/parser.mly" +# 3547 "parsing/parser.mly" ( op ) -# 24735 "parsing/parser.ml" +# 25178 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24740 "parsing/parser.ml" +# 25183 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24759,14 +25202,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3464 "parsing/parser.mly" +# 3548 "parsing/parser.mly" ("+") -# 24765 "parsing/parser.ml" +# 25208 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24770 "parsing/parser.ml" +# 25213 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24789,14 +25232,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3465 "parsing/parser.mly" +# 3549 "parsing/parser.mly" ("+.") -# 24795 "parsing/parser.ml" +# 25238 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24800 "parsing/parser.ml" +# 25243 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24819,14 +25262,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3466 "parsing/parser.mly" +# 3550 "parsing/parser.mly" ("+=") -# 24825 "parsing/parser.ml" +# 25268 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24830 "parsing/parser.ml" +# 25273 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24849,14 +25292,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3467 "parsing/parser.mly" +# 3551 "parsing/parser.mly" ("-") -# 24855 "parsing/parser.ml" +# 25298 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24860 "parsing/parser.ml" +# 25303 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24879,14 +25322,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3468 "parsing/parser.mly" +# 3552 "parsing/parser.mly" ("-.") -# 24885 "parsing/parser.ml" +# 25328 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24890 "parsing/parser.ml" +# 25333 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24909,14 +25352,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3469 "parsing/parser.mly" +# 3553 "parsing/parser.mly" ("*") -# 24915 "parsing/parser.ml" +# 25358 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24920 "parsing/parser.ml" +# 25363 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24939,14 +25382,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3470 "parsing/parser.mly" +# 3554 "parsing/parser.mly" ("%") -# 24945 "parsing/parser.ml" +# 25388 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24950 "parsing/parser.ml" +# 25393 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24969,14 +25412,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3471 "parsing/parser.mly" +# 3555 "parsing/parser.mly" ("=") -# 24975 "parsing/parser.ml" +# 25418 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 24980 "parsing/parser.ml" +# 25423 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -24999,14 +25442,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3472 "parsing/parser.mly" +# 3556 "parsing/parser.mly" ("<") -# 25005 "parsing/parser.ml" +# 25448 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25010 "parsing/parser.ml" +# 25453 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25029,14 +25472,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3473 "parsing/parser.mly" +# 3557 "parsing/parser.mly" (">") -# 25035 "parsing/parser.ml" +# 25478 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25040 "parsing/parser.ml" +# 25483 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25059,14 +25502,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3474 "parsing/parser.mly" +# 3558 "parsing/parser.mly" ("or") -# 25065 "parsing/parser.ml" +# 25508 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25070 "parsing/parser.ml" +# 25513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25089,14 +25532,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3475 "parsing/parser.mly" +# 3559 "parsing/parser.mly" ("||") -# 25095 "parsing/parser.ml" +# 25538 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25100 "parsing/parser.ml" +# 25543 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25119,14 +25562,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3476 "parsing/parser.mly" +# 3560 "parsing/parser.mly" ("&") -# 25125 "parsing/parser.ml" +# 25568 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25130 "parsing/parser.ml" +# 25573 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25149,14 +25592,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3477 "parsing/parser.mly" +# 3561 "parsing/parser.mly" ("&&") -# 25155 "parsing/parser.ml" +# 25598 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25160 "parsing/parser.ml" +# 25603 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25179,14 +25622,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = let _1 = -# 3478 "parsing/parser.mly" +# 3562 "parsing/parser.mly" (":=") -# 25185 "parsing/parser.ml" +# 25628 "parsing/parser.ml" in -# 3456 "parsing/parser.mly" +# 3540 "parsing/parser.mly" ( _1 ) -# 25190 "parsing/parser.ml" +# 25633 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25209,9 +25652,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (bool) = -# 3360 "parsing/parser.mly" +# 3444 "parsing/parser.mly" ( true ) -# 25215 "parsing/parser.ml" +# 25658 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25227,9 +25670,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (bool) = -# 3361 "parsing/parser.mly" +# 3445 "parsing/parser.mly" ( false ) -# 25233 "parsing/parser.ml" +# 25676 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25247,7 +25690,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 25251 "parsing/parser.ml" +# 25694 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25272,7 +25715,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 25276 "parsing/parser.ml" +# 25719 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25290,7 +25733,7 @@ module Tables = struct let _v : (unit option) = # 114 "" ( None ) -# 25294 "parsing/parser.ml" +# 25737 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25315,7 +25758,7 @@ module Tables = struct let _v : (unit option) = # 116 "" ( Some x ) -# 25319 "parsing/parser.ml" +# 25762 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25333,7 +25776,7 @@ module Tables = struct let _v : (string Asttypes.loc option) = # 114 "" ( None ) -# 25337 "parsing/parser.ml" +# 25780 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25358,9 +25801,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 25364 "parsing/parser.ml" +# 25807 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -25373,21 +25816,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 25379 "parsing/parser.ml" +# 25822 "parsing/parser.ml" in # 183 "" ( x ) -# 25385 "parsing/parser.ml" +# 25828 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25391 "parsing/parser.ml" +# 25834 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25405,7 +25848,7 @@ module Tables = struct let _v : (Parsetree.core_type option) = # 114 "" ( None ) -# 25409 "parsing/parser.ml" +# 25852 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25437,12 +25880,12 @@ module Tables = struct let _v : (Parsetree.core_type option) = let x = # 183 "" ( x ) -# 25441 "parsing/parser.ml" +# 25884 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25446 "parsing/parser.ml" +# 25889 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25460,7 +25903,7 @@ module Tables = struct let _v : (Parsetree.expression option) = # 114 "" ( None ) -# 25464 "parsing/parser.ml" +# 25907 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25492,12 +25935,12 @@ module Tables = struct let _v : (Parsetree.expression option) = let x = # 183 "" ( x ) -# 25496 "parsing/parser.ml" +# 25939 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25501 "parsing/parser.ml" +# 25944 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25515,7 +25958,7 @@ module Tables = struct let _v : (Parsetree.module_type option) = # 114 "" ( None ) -# 25519 "parsing/parser.ml" +# 25962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25547,12 +25990,12 @@ module Tables = struct let _v : (Parsetree.module_type option) = let x = # 183 "" ( x ) -# 25551 "parsing/parser.ml" +# 25994 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25556 "parsing/parser.ml" +# 25999 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25570,7 +26013,7 @@ module Tables = struct let _v : (Parsetree.pattern option) = # 114 "" ( None ) -# 25574 "parsing/parser.ml" +# 26017 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25602,12 +26045,12 @@ module Tables = struct let _v : (Parsetree.pattern option) = let x = # 183 "" ( x ) -# 25606 "parsing/parser.ml" +# 26049 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25611 "parsing/parser.ml" +# 26054 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25625,7 +26068,7 @@ module Tables = struct let _v : (Parsetree.expression option) = # 114 "" ( None ) -# 25629 "parsing/parser.ml" +# 26072 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25657,12 +26100,12 @@ module Tables = struct let _v : (Parsetree.expression option) = let x = # 183 "" ( x ) -# 25661 "parsing/parser.ml" +# 26104 "parsing/parser.ml" in # 116 "" ( Some x ) -# 25666 "parsing/parser.ml" +# 26109 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25680,7 +26123,7 @@ module Tables = struct let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = # 114 "" ( None ) -# 25684 "parsing/parser.ml" +# 26127 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25705,7 +26148,7 @@ module Tables = struct let _v : ((Parsetree.core_type option * Parsetree.core_type option) option) = # 116 "" ( Some x ) -# 25709 "parsing/parser.ml" +# 26152 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25724,17 +26167,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 668 "parsing/parser.mly" +# 722 "parsing/parser.mly" (string) -# 25730 "parsing/parser.ml" +# 26173 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3661 "parsing/parser.mly" +# 3749 "parsing/parser.mly" ( _1 ) -# 25738 "parsing/parser.ml" +# 26181 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25766,18 +26209,18 @@ module Tables = struct } = _menhir_stack in let _3 : unit = Obj.magic _3 in let _2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 25772 "parsing/parser.ml" +# 26215 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (string) = -# 3662 "parsing/parser.mly" +# 3750 "parsing/parser.mly" ( _2 ) -# 25781 "parsing/parser.ml" +# 26224 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25831,9 +26274,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1253 "parsing/parser.mly" +# 1324 "parsing/parser.mly" ( mkmod ~loc:_sloc (Pmod_constraint(me, mty)) ) -# 25837 "parsing/parser.ml" +# 26280 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25886,9 +26329,9 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1255 "parsing/parser.mly" +# 1326 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 25892 "parsing/parser.ml" +# 26335 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25925,9 +26368,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.module_expr) = -# 1258 "parsing/parser.mly" +# 1329 "parsing/parser.mly" ( me (* TODO consider reloc *) ) -# 25931 "parsing/parser.ml" +# 26374 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -25966,9 +26409,9 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1260 "parsing/parser.mly" +# 1331 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 25972 "parsing/parser.ml" +# 26415 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26019,25 +26462,25 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.module_expr) = let e = -# 1277 "parsing/parser.mly" +# 1348 "parsing/parser.mly" ( e ) -# 26025 "parsing/parser.ml" +# 26468 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26032 "parsing/parser.ml" +# 26475 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1264 "parsing/parser.mly" +# 1335 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26041 "parsing/parser.ml" +# 26484 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26108,11 +26551,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26116 "parsing/parser.ml" +# 26559 "parsing/parser.ml" in let _endpos_ty_ = _endpos__1_ in @@ -26120,26 +26563,26 @@ module Tables = struct let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1279 "parsing/parser.mly" +# 1350 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_constraint (e, ty)) ) -# 26126 "parsing/parser.ml" +# 26569 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26134 "parsing/parser.ml" +# 26577 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1264 "parsing/parser.mly" +# 1335 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26143 "parsing/parser.ml" +# 26586 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26225,11 +26668,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26233 "parsing/parser.ml" +# 26676 "parsing/parser.ml" in let _endpos_ty2_ = _endpos__1_inlined1_ in @@ -26238,37 +26681,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26246 "parsing/parser.ml" +# 26689 "parsing/parser.ml" in let _endpos = _endpos_ty2_ in let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1281 "parsing/parser.mly" +# 1352 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_coerce (e, Some ty1, ty2)) ) -# 26255 "parsing/parser.ml" +# 26698 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26263 "parsing/parser.ml" +# 26706 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1264 "parsing/parser.mly" +# 1335 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26272 "parsing/parser.ml" +# 26715 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26339,11 +26782,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 26347 "parsing/parser.ml" +# 26790 "parsing/parser.ml" in let _endpos_ty2_ = _endpos__1_ in @@ -26351,26 +26794,26 @@ module Tables = struct let _startpos = _startpos_e_ in let _loc = (_startpos, _endpos) in -# 1283 "parsing/parser.mly" +# 1354 "parsing/parser.mly" ( ghexp ~loc:_loc (Pexp_coerce (e, None, ty2)) ) -# 26357 "parsing/parser.ml" +# 26800 "parsing/parser.ml" in let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26365 "parsing/parser.ml" +# 26808 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1264 "parsing/parser.mly" +# 1335 "parsing/parser.mly" ( mkmod ~loc:_sloc ~attrs (Pmod_unpack e) ) -# 26374 "parsing/parser.ml" +# 26817 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26430,17 +26873,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26436 "parsing/parser.ml" +# 26879 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1266 "parsing/parser.mly" +# 1337 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 26444 "parsing/parser.ml" +# 26887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26500,17 +26943,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26506 "parsing/parser.ml" +# 26949 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1268 "parsing/parser.mly" +# 1339 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 26514 "parsing/parser.ml" +# 26957 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26563,17 +27006,17 @@ module Tables = struct let _v : (Parsetree.module_expr) = let _3 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 26569 "parsing/parser.ml" +# 27012 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1270 "parsing/parser.mly" +# 1341 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 26577 "parsing/parser.ml" +# 27020 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26602,14 +27045,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 805 "parsing/parser.mly" - (Longident.t) -# 26609 "parsing/parser.ml" - ) = -# 1174 "parsing/parser.mly" + let _v : (Longident.t) = +# 1243 "parsing/parser.mly" ( _1 ) -# 26613 "parsing/parser.ml" +# 27052 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26638,14 +27077,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 795 "parsing/parser.mly" - (Longident.t) -# 26645 "parsing/parser.ml" - ) = -# 1159 "parsing/parser.mly" + let _v : (Longident.t) = +# 1228 "parsing/parser.mly" ( _1 ) -# 26649 "parsing/parser.ml" +# 27084 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26674,14 +27109,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 789 "parsing/parser.mly" - (Parsetree.core_type) -# 26681 "parsing/parser.ml" - ) = -# 1134 "parsing/parser.mly" + let _v : (Parsetree.core_type) = +# 1203 "parsing/parser.mly" ( _1 ) -# 26685 "parsing/parser.ml" +# 27116 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26710,14 +27141,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 791 "parsing/parser.mly" - (Parsetree.expression) -# 26717 "parsing/parser.ml" - ) = -# 1139 "parsing/parser.mly" + let _v : (Parsetree.expression) = +# 1208 "parsing/parser.mly" ( _1 ) -# 26721 "parsing/parser.ml" +# 27148 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26746,14 +27173,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 801 "parsing/parser.mly" - (Longident.t) -# 26753 "parsing/parser.ml" - ) = -# 1164 "parsing/parser.mly" + let _v : (Longident.t) = +# 1233 "parsing/parser.mly" ( _1 ) -# 26757 "parsing/parser.ml" +# 27180 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26782,14 +27205,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 803 "parsing/parser.mly" - (Longident.t) -# 26789 "parsing/parser.ml" - ) = -# 1169 "parsing/parser.mly" + let _v : (Longident.t) = +# 1238 "parsing/parser.mly" ( _1 ) -# 26793 "parsing/parser.ml" +# 27212 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26818,14 +27237,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 799 "parsing/parser.mly" - (Longident.t) -# 26825 "parsing/parser.ml" - ) = -# 1149 "parsing/parser.mly" + let _v : (Longident.t) = +# 1218 "parsing/parser.mly" ( _1 ) -# 26829 "parsing/parser.ml" +# 27244 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26854,14 +27269,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 793 "parsing/parser.mly" - (Parsetree.pattern) -# 26861 "parsing/parser.ml" - ) = -# 1144 "parsing/parser.mly" + let _v : (Parsetree.pattern) = +# 1213 "parsing/parser.mly" ( _1 ) -# 26865 "parsing/parser.ml" +# 27276 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26890,14 +27301,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 797 "parsing/parser.mly" - (Longident.t) -# 26897 "parsing/parser.ml" - ) = -# 1154 "parsing/parser.mly" + let _v : (Longident.t) = +# 1223 "parsing/parser.mly" ( _1 ) -# 26901 "parsing/parser.ml" +# 27308 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26939,15 +27346,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2633 "parsing/parser.mly" +# 2710 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 26945 "parsing/parser.ml" +# 27352 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 26951 "parsing/parser.ml" +# 27358 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -26977,14 +27384,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2635 "parsing/parser.mly" +# 2712 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 26983 "parsing/parser.ml" +# 27390 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 26988 "parsing/parser.ml" +# 27395 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27007,14 +27414,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2637 "parsing/parser.mly" +# 2714 "parsing/parser.mly" ( _1 ) -# 27013 "parsing/parser.ml" +# 27420 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27018 "parsing/parser.ml" +# 27425 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27059,15 +27466,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 27065 "parsing/parser.ml" +# 27472 "parsing/parser.ml" in -# 2640 "parsing/parser.mly" +# 2717 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 27071 "parsing/parser.ml" +# 27478 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -27075,21 +27482,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27081 "parsing/parser.ml" +# 27488 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27087 "parsing/parser.ml" +# 27494 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27093 "parsing/parser.ml" +# 27500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27130,9 +27537,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2642 "parsing/parser.mly" +# 2719 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 27136 "parsing/parser.ml" +# 27543 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27140,21 +27547,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27146 "parsing/parser.ml" +# 27553 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27152 "parsing/parser.ml" +# 27559 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27158 "parsing/parser.ml" +# 27565 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27179,29 +27586,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2644 "parsing/parser.mly" +# 2721 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 27185 "parsing/parser.ml" +# 27592 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27193 "parsing/parser.ml" +# 27600 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27199 "parsing/parser.ml" +# 27606 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27205 "parsing/parser.ml" +# 27612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27242,9 +27649,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2646 "parsing/parser.mly" +# 2723 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27248 "parsing/parser.ml" +# 27655 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27252,21 +27659,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27258 "parsing/parser.ml" +# 27665 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27264 "parsing/parser.ml" +# 27671 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27270 "parsing/parser.ml" +# 27677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27305,30 +27712,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2648 "parsing/parser.mly" +# 2725 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 27311 "parsing/parser.ml" +# 27718 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27320 "parsing/parser.ml" +# 27727 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27326 "parsing/parser.ml" +# 27733 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27332 "parsing/parser.ml" +# 27739 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27369,9 +27776,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2650 "parsing/parser.mly" +# 2727 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27375 "parsing/parser.ml" +# 27782 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -27379,21 +27786,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27385 "parsing/parser.ml" +# 27792 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 27391 "parsing/parser.ml" +# 27798 "parsing/parser.ml" in -# 2621 "parsing/parser.mly" +# 2698 "parsing/parser.mly" ( _1 ) -# 27397 "parsing/parser.ml" +# 27804 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27441,24 +27848,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 27447 "parsing/parser.ml" +# 27854 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 27453 "parsing/parser.ml" +# 27860 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2623 "parsing/parser.mly" +# 2700 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_exception _3) _2) -# 27462 "parsing/parser.ml" +# 27869 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27495,9 +27902,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2747 "parsing/parser.mly" +# 2827 "parsing/parser.mly" ( _3 :: _1 ) -# 27501 "parsing/parser.ml" +# 27908 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27534,9 +27941,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2748 "parsing/parser.mly" +# 2828 "parsing/parser.mly" ( [_3; _1] ) -# 27540 "parsing/parser.ml" +# 27947 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27574,9 +27981,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2749 "parsing/parser.mly" +# 2829 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27580 "parsing/parser.ml" +# 27987 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27613,9 +28020,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2747 "parsing/parser.mly" +# 2827 "parsing/parser.mly" ( _3 :: _1 ) -# 27619 "parsing/parser.ml" +# 28026 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27652,9 +28059,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = -# 2748 "parsing/parser.mly" +# 2828 "parsing/parser.mly" ( [_3; _1] ) -# 27658 "parsing/parser.ml" +# 28065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27692,9 +28099,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern list) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2749 "parsing/parser.mly" +# 2829 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 27698 "parsing/parser.ml" +# 28105 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27717,9 +28124,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2656 "parsing/parser.mly" +# 2733 "parsing/parser.mly" ( _1 ) -# 27723 "parsing/parser.ml" +# 28130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27755,15 +28162,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 27761 "parsing/parser.ml" +# 28168 "parsing/parser.ml" in -# 2659 "parsing/parser.mly" - ( Ppat_construct(_1, Some _2) ) -# 27767 "parsing/parser.ml" +# 2736 "parsing/parser.mly" + ( Ppat_construct(_1, Some ([], _2)) ) +# 28174 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -27771,15 +28178,108 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27777 "parsing/parser.ml" +# 28184 "parsing/parser.ml" in -# 2662 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( _1 ) -# 27783 "parsing/parser.ml" +# 28190 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = pat; + MenhirLib.EngineTypes.startp = _startpos_pat_; + MenhirLib.EngineTypes.endp = _endpos_pat_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = xs; + MenhirLib.EngineTypes.startp = _startpos_xs_; + MenhirLib.EngineTypes.endp = _endpos_xs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + }; + } = _menhir_stack in + let pat : (Parsetree.pattern) = Obj.magic pat in + let _5 : unit = Obj.magic _5 in + let xs : (string Asttypes.loc list) = Obj.magic xs in + let _3 : unit = Obj.magic _3 in + let _2 : unit = Obj.magic _2 in + let _1 : (Longident.t) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_pat_ in + let _v : (Parsetree.pattern) = let _1 = + let _1 = + let newtypes = +# 2478 "parsing/parser.mly" + ( xs ) +# 28252 "parsing/parser.ml" + in + let constr = + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 883 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 28261 "parsing/parser.ml" + + in + +# 2739 "parsing/parser.mly" + ( Ppat_construct(constr, Some (newtypes, pat)) ) +# 28267 "parsing/parser.ml" + + in + let _endpos__1_ = _endpos_pat_ in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 918 "parsing/parser.mly" + ( mkpat ~loc:_sloc _1 ) +# 28277 "parsing/parser.ml" + + in + +# 2742 "parsing/parser.mly" + ( _1 ) +# 28283 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27810,24 +28310,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2661 "parsing/parser.mly" +# 2741 "parsing/parser.mly" ( Ppat_variant(_1, Some _2) ) -# 27816 "parsing/parser.ml" +# 28316 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 27825 "parsing/parser.ml" +# 28325 "parsing/parser.ml" in -# 2662 "parsing/parser.mly" +# 2742 "parsing/parser.mly" ( _1 ) -# 27831 "parsing/parser.ml" +# 28331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27875,24 +28375,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 27881 "parsing/parser.ml" +# 28381 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 27887 "parsing/parser.ml" +# 28387 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2664 "parsing/parser.mly" +# 2744 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_lazy _3) _2) -# 27896 "parsing/parser.ml" +# 28396 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27934,15 +28434,15 @@ module Tables = struct let _loc__2_ = (_startpos__2_, _endpos__2_) in let _sloc = (_symbolstartpos, _endpos) in -# 2633 "parsing/parser.mly" +# 2710 "parsing/parser.mly" ( mkpat_cons ~loc:_sloc _loc__2_ (ghpat ~loc:_sloc (Ppat_tuple[_1;_3])) ) -# 27940 "parsing/parser.ml" +# 28440 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 27946 "parsing/parser.ml" +# 28446 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -27972,14 +28472,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = -# 2635 "parsing/parser.mly" +# 2712 "parsing/parser.mly" ( Pat.attr _1 _2 ) -# 27978 "parsing/parser.ml" +# 28478 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 27983 "parsing/parser.ml" +# 28483 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28002,14 +28502,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = -# 2637 "parsing/parser.mly" +# 2714 "parsing/parser.mly" ( _1 ) -# 28008 "parsing/parser.ml" +# 28508 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28013 "parsing/parser.ml" +# 28513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28054,15 +28554,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28060 "parsing/parser.ml" +# 28560 "parsing/parser.ml" in -# 2640 "parsing/parser.mly" +# 2717 "parsing/parser.mly" ( Ppat_alias(_1, _3) ) -# 28066 "parsing/parser.ml" +# 28566 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -28070,21 +28570,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28076 "parsing/parser.ml" +# 28576 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28082 "parsing/parser.ml" +# 28582 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28088 "parsing/parser.ml" +# 28588 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28125,9 +28625,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2642 "parsing/parser.mly" +# 2719 "parsing/parser.mly" ( expecting _loc__3_ "identifier" ) -# 28131 "parsing/parser.ml" +# 28631 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28135,21 +28635,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28141 "parsing/parser.ml" +# 28641 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28147 "parsing/parser.ml" +# 28647 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28153 "parsing/parser.ml" +# 28653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28174,29 +28674,29 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2644 "parsing/parser.mly" +# 2721 "parsing/parser.mly" ( Ppat_tuple(List.rev _1) ) -# 28180 "parsing/parser.ml" +# 28680 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28188 "parsing/parser.ml" +# 28688 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28194 "parsing/parser.ml" +# 28694 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28200 "parsing/parser.ml" +# 28700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28237,9 +28737,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2646 "parsing/parser.mly" +# 2723 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 28243 "parsing/parser.ml" +# 28743 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28247,21 +28747,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28253 "parsing/parser.ml" +# 28753 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28259 "parsing/parser.ml" +# 28759 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28265 "parsing/parser.ml" +# 28765 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28300,30 +28800,30 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _1 = -# 2648 "parsing/parser.mly" +# 2725 "parsing/parser.mly" ( Ppat_or(_1, _3) ) -# 28306 "parsing/parser.ml" +# 28806 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28315 "parsing/parser.ml" +# 28815 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28321 "parsing/parser.ml" +# 28821 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28327 "parsing/parser.ml" +# 28827 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28364,9 +28864,9 @@ module Tables = struct let _1 = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2650 "parsing/parser.mly" +# 2727 "parsing/parser.mly" ( expecting _loc__3_ "pattern" ) -# 28370 "parsing/parser.ml" +# 28870 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -28374,21 +28874,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28380 "parsing/parser.ml" +# 28880 "parsing/parser.ml" in -# 2651 "parsing/parser.mly" +# 2728 "parsing/parser.mly" ( _1 ) -# 28386 "parsing/parser.ml" +# 28886 "parsing/parser.ml" in -# 2628 "parsing/parser.mly" +# 2705 "parsing/parser.mly" ( _1 ) -# 28392 "parsing/parser.ml" +# 28892 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28407,9 +28907,9 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 28413 "parsing/parser.ml" +# 28913 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -28421,30 +28921,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 28427 "parsing/parser.ml" +# 28927 "parsing/parser.ml" in -# 2110 "parsing/parser.mly" +# 2200 "parsing/parser.mly" ( Ppat_var _1 ) -# 28433 "parsing/parser.ml" +# 28933 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28442 "parsing/parser.ml" +# 28942 "parsing/parser.ml" in -# 2112 "parsing/parser.mly" +# 2202 "parsing/parser.mly" ( _1 ) -# 28448 "parsing/parser.ml" +# 28948 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28468,23 +28968,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2111 "parsing/parser.mly" +# 2201 "parsing/parser.mly" ( Ppat_any ) -# 28474 "parsing/parser.ml" +# 28974 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 28482 "parsing/parser.ml" +# 28982 "parsing/parser.ml" in -# 2112 "parsing/parser.mly" +# 2202 "parsing/parser.mly" ( _1 ) -# 28488 "parsing/parser.ml" +# 28988 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28507,9 +29007,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.payload) = -# 3771 "parsing/parser.mly" +# 3861 "parsing/parser.mly" ( PStr _1 ) -# 28513 "parsing/parser.ml" +# 29013 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28539,9 +29039,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3772 "parsing/parser.mly" +# 3862 "parsing/parser.mly" ( PSig _2 ) -# 28545 "parsing/parser.ml" +# 29045 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28571,9 +29071,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3773 "parsing/parser.mly" +# 3863 "parsing/parser.mly" ( PTyp _2 ) -# 28577 "parsing/parser.ml" +# 29077 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28603,9 +29103,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.payload) = -# 3774 "parsing/parser.mly" +# 3864 "parsing/parser.mly" ( PPat (_2, None) ) -# 28609 "parsing/parser.ml" +# 29109 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28649,9 +29149,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.payload) = -# 3775 "parsing/parser.mly" +# 3865 "parsing/parser.mly" ( PPat (_2, Some _4) ) -# 28655 "parsing/parser.ml" +# 29155 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28674,9 +29174,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = -# 3174 "parsing/parser.mly" +# 3258 "parsing/parser.mly" ( _1 ) -# 28680 "parsing/parser.ml" +# 29180 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28719,24 +29219,24 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 28723 "parsing/parser.ml" +# 29223 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 28728 "parsing/parser.ml" +# 29228 "parsing/parser.ml" in -# 3166 "parsing/parser.mly" +# 3250 "parsing/parser.mly" ( _1 ) -# 28734 "parsing/parser.ml" +# 29234 "parsing/parser.ml" in -# 3170 "parsing/parser.mly" +# 3254 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 28740 "parsing/parser.ml" +# 29240 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__3_, _startpos_xs_) in @@ -28744,15 +29244,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 28750 "parsing/parser.ml" +# 29250 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3260 "parsing/parser.mly" ( _1 ) -# 28756 "parsing/parser.ml" +# 29256 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28775,14 +29275,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 28781 "parsing/parser.ml" +# 29281 "parsing/parser.ml" in -# 3174 "parsing/parser.mly" +# 3258 "parsing/parser.mly" ( _1 ) -# 28786 "parsing/parser.ml" +# 29286 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28821,33 +29321,33 @@ module Tables = struct let _v : (Parsetree.core_type) = let _1 = let _1 = let _3 = -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 28827 "parsing/parser.ml" +# 29327 "parsing/parser.ml" in let _1 = let _1 = let xs = # 253 "" ( List.rev xs ) -# 28834 "parsing/parser.ml" +# 29334 "parsing/parser.ml" in -# 919 "parsing/parser.mly" +# 985 "parsing/parser.mly" ( xs ) -# 28839 "parsing/parser.ml" +# 29339 "parsing/parser.ml" in -# 3166 "parsing/parser.mly" +# 3250 "parsing/parser.mly" ( _1 ) -# 28845 "parsing/parser.ml" +# 29345 "parsing/parser.ml" in -# 3170 "parsing/parser.mly" +# 3254 "parsing/parser.mly" ( Ptyp_poly(_1, _3) ) -# 28851 "parsing/parser.ml" +# 29351 "parsing/parser.ml" in let _startpos__1_ = _startpos_xs_ in @@ -28855,15 +29355,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 28861 "parsing/parser.ml" +# 29361 "parsing/parser.ml" in -# 3176 "parsing/parser.mly" +# 3260 "parsing/parser.mly" ( _1 ) -# 28867 "parsing/parser.ml" +# 29367 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28910,9 +29410,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3734 "parsing/parser.mly" +# 3822 "parsing/parser.mly" ( Attr.mk ~loc:(make_loc _sloc) _2 _3 ) -# 28916 "parsing/parser.ml" +# 29416 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -28993,9 +29493,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 28999 "parsing/parser.ml" +# 29499 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -29005,30 +29505,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 29011 "parsing/parser.ml" +# 29511 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 29019 "parsing/parser.ml" +# 29519 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2811 "parsing/parser.mly" +# 2891 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~prim ~attrs ~loc ~docs, ext ) -# 29032 "parsing/parser.ml" +# 29532 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29044,14 +29544,14 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag) = let _1 = -# 3602 "parsing/parser.mly" +# 3690 "parsing/parser.mly" ( Public ) -# 29050 "parsing/parser.ml" +# 29550 "parsing/parser.ml" in -# 3599 "parsing/parser.mly" +# 3687 "parsing/parser.mly" ( _1 ) -# 29055 "parsing/parser.ml" +# 29555 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29074,14 +29574,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = let _1 = -# 3603 "parsing/parser.mly" +# 3691 "parsing/parser.mly" ( Private ) -# 29080 "parsing/parser.ml" +# 29580 "parsing/parser.ml" in -# 3599 "parsing/parser.mly" +# 3687 "parsing/parser.mly" ( _1 ) -# 29085 "parsing/parser.ml" +# 29585 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29097,9 +29597,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3625 "parsing/parser.mly" +# 3713 "parsing/parser.mly" ( Public, Concrete ) -# 29103 "parsing/parser.ml" +# 29603 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29122,9 +29622,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3626 "parsing/parser.mly" +# 3714 "parsing/parser.mly" ( Private, Concrete ) -# 29128 "parsing/parser.ml" +# 29628 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29147,9 +29647,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3627 "parsing/parser.mly" +# 3715 "parsing/parser.mly" ( Public, Virtual ) -# 29153 "parsing/parser.ml" +# 29653 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29179,9 +29679,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3628 "parsing/parser.mly" +# 3716 "parsing/parser.mly" ( Private, Virtual ) -# 29185 "parsing/parser.ml" +# 29685 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29211,9 +29711,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag * Asttypes.virtual_flag) = -# 3629 "parsing/parser.mly" +# 3717 "parsing/parser.mly" ( Private, Virtual ) -# 29217 "parsing/parser.ml" +# 29717 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29229,9 +29729,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.rec_flag) = -# 3582 "parsing/parser.mly" +# 3668 "parsing/parser.mly" ( Nonrecursive ) -# 29235 "parsing/parser.ml" +# 29735 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29254,9 +29754,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.rec_flag) = -# 3583 "parsing/parser.mly" +# 3669 "parsing/parser.mly" ( Recursive ) -# 29260 "parsing/parser.ml" +# 29760 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29282,12 +29782,12 @@ module Tables = struct (Longident.t Asttypes.loc * Parsetree.expression) list) = let eo = # 124 "" ( None ) -# 29286 "parsing/parser.ml" +# 29786 "parsing/parser.ml" in -# 2553 "parsing/parser.mly" +# 2630 "parsing/parser.mly" ( eo, fields ) -# 29291 "parsing/parser.ml" +# 29791 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29328,18 +29828,18 @@ module Tables = struct let x = # 191 "" ( x ) -# 29332 "parsing/parser.ml" +# 29832 "parsing/parser.ml" in # 126 "" ( Some x ) -# 29337 "parsing/parser.ml" +# 29837 "parsing/parser.ml" in -# 2553 "parsing/parser.mly" +# 2630 "parsing/parser.mly" ( eo, fields ) -# 29343 "parsing/parser.ml" +# 29843 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29364,17 +29864,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 2996 "parsing/parser.mly" +# 3076 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Type.constructor cid ~args ?res ~attrs ~loc ~info ) -# 29373 "parsing/parser.ml" +# 29873 "parsing/parser.ml" in -# 1029 "parsing/parser.mly" +# 1095 "parsing/parser.mly" ( [x] ) -# 29378 "parsing/parser.ml" +# 29878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29399,17 +29899,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 2996 "parsing/parser.mly" +# 3076 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Type.constructor cid ~args ?res ~attrs ~loc ~info ) -# 29408 "parsing/parser.ml" +# 29908 "parsing/parser.ml" in -# 1032 "parsing/parser.mly" +# 1098 "parsing/parser.mly" ( [x] ) -# 29413 "parsing/parser.ml" +# 29913 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29441,17 +29941,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.constructor_declaration list) = let x = -# 2996 "parsing/parser.mly" +# 3076 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Type.constructor cid ~args ?res ~attrs ~loc ~info ) -# 29450 "parsing/parser.ml" +# 29950 "parsing/parser.ml" in -# 1036 "parsing/parser.mly" +# 1102 "parsing/parser.mly" ( x :: xs ) -# 29455 "parsing/parser.ml" +# 29955 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29477,23 +29977,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29486 "parsing/parser.ml" +# 29986 "parsing/parser.ml" in -# 3102 "parsing/parser.mly" +# 3182 "parsing/parser.mly" ( _1 ) -# 29491 "parsing/parser.ml" +# 29991 "parsing/parser.ml" in -# 1029 "parsing/parser.mly" +# 1095 "parsing/parser.mly" ( [x] ) -# 29497 "parsing/parser.ml" +# 29997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29516,14 +30016,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3104 "parsing/parser.mly" +# 3184 "parsing/parser.mly" ( _1 ) -# 29522 "parsing/parser.ml" +# 30022 "parsing/parser.ml" in -# 1029 "parsing/parser.mly" +# 1095 "parsing/parser.mly" ( [x] ) -# 29527 "parsing/parser.ml" +# 30027 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29549,23 +30049,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29558 "parsing/parser.ml" +# 30058 "parsing/parser.ml" in -# 3102 "parsing/parser.mly" +# 3182 "parsing/parser.mly" ( _1 ) -# 29563 "parsing/parser.ml" +# 30063 "parsing/parser.ml" in -# 1032 "parsing/parser.mly" +# 1098 "parsing/parser.mly" ( [x] ) -# 29569 "parsing/parser.ml" +# 30069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29588,14 +30088,14 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3104 "parsing/parser.mly" +# 3184 "parsing/parser.mly" ( _1 ) -# 29594 "parsing/parser.ml" +# 30094 "parsing/parser.ml" in -# 1032 "parsing/parser.mly" +# 1098 "parsing/parser.mly" ( [x] ) -# 29599 "parsing/parser.ml" +# 30099 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29628,23 +30128,23 @@ module Tables = struct let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = let _1 = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29637 "parsing/parser.ml" +# 30137 "parsing/parser.ml" in -# 3102 "parsing/parser.mly" +# 3182 "parsing/parser.mly" ( _1 ) -# 29642 "parsing/parser.ml" +# 30142 "parsing/parser.ml" in -# 1036 "parsing/parser.mly" +# 1102 "parsing/parser.mly" ( x :: xs ) -# 29648 "parsing/parser.ml" +# 30148 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29674,14 +30174,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos__1_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3104 "parsing/parser.mly" +# 3184 "parsing/parser.mly" ( _1 ) -# 29680 "parsing/parser.ml" +# 30180 "parsing/parser.ml" in -# 1036 "parsing/parser.mly" +# 1102 "parsing/parser.mly" ( x :: xs ) -# 29685 "parsing/parser.ml" +# 30185 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29706,17 +30206,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29715 "parsing/parser.ml" +# 30215 "parsing/parser.ml" in -# 1029 "parsing/parser.mly" +# 1095 "parsing/parser.mly" ( [x] ) -# 29720 "parsing/parser.ml" +# 30220 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29741,17 +30241,17 @@ module Tables = struct let _startpos = _startpos_d_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29750 "parsing/parser.ml" +# 30250 "parsing/parser.ml" in -# 1032 "parsing/parser.mly" +# 1098 "parsing/parser.mly" ( [x] ) -# 29755 "parsing/parser.ml" +# 30255 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29783,17 +30283,17 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_d_ in let _v : (Parsetree.extension_constructor list) = let x = -# 3108 "parsing/parser.mly" +# 3188 "parsing/parser.mly" ( let cid, args, res, attrs, loc, info = d in Te.decl cid ~args ?res ~attrs ~loc ~info ) -# 29792 "parsing/parser.ml" +# 30292 "parsing/parser.ml" in -# 1036 "parsing/parser.mly" +# 1102 "parsing/parser.mly" ( x :: xs ) -# 29797 "parsing/parser.ml" +# 30297 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29809,9 +30309,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * Parsetree.core_type * Ast_helper.loc) list) = -# 895 "parsing/parser.mly" +# 961 "parsing/parser.mly" ( [] ) -# 29815 "parsing/parser.ml" +# 30315 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29868,21 +30368,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1990 "parsing/parser.mly" +# 2080 "parsing/parser.mly" ( _1, _3, make_loc _sloc ) -# 29874 "parsing/parser.ml" +# 30374 "parsing/parser.ml" in # 183 "" ( x ) -# 29880 "parsing/parser.ml" +# 30380 "parsing/parser.ml" in -# 897 "parsing/parser.mly" +# 963 "parsing/parser.mly" ( x :: xs ) -# 29886 "parsing/parser.ml" +# 30386 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29905,9 +30405,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 909 "parsing/parser.mly" +# 975 "parsing/parser.mly" ( [ x ] ) -# 29911 "parsing/parser.ml" +# 30411 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29937,9 +30437,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Lexing.position * Parsetree.functor_parameter) list) = -# 911 "parsing/parser.mly" +# 977 "parsing/parser.mly" ( x :: xs ) -# 29943 "parsing/parser.ml" +# 30443 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29962,9 +30462,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 909 "parsing/parser.mly" +# 975 "parsing/parser.mly" ( [ x ] ) -# 29968 "parsing/parser.ml" +# 30468 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -29994,9 +30494,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Asttypes.arg_label * Parsetree.expression) list) = -# 911 "parsing/parser.mly" +# 977 "parsing/parser.mly" ( x :: xs ) -# 30000 "parsing/parser.ml" +# 30500 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30019,9 +30519,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 909 "parsing/parser.mly" +# 975 "parsing/parser.mly" ( [ x ] ) -# 30025 "parsing/parser.ml" +# 30525 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30051,9 +30551,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Asttypes.label list) = -# 911 "parsing/parser.mly" +# 977 "parsing/parser.mly" ( x :: xs ) -# 30057 "parsing/parser.ml" +# 30557 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30089,21 +30589,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 30095 "parsing/parser.ml" +# 30595 "parsing/parser.ml" in -# 3162 "parsing/parser.mly" +# 3246 "parsing/parser.mly" ( _2 ) -# 30101 "parsing/parser.ml" +# 30601 "parsing/parser.ml" in -# 909 "parsing/parser.mly" +# 975 "parsing/parser.mly" ( [ x ] ) -# 30107 "parsing/parser.ml" +# 30607 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30146,21 +30646,21 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 30152 "parsing/parser.ml" +# 30652 "parsing/parser.ml" in -# 3162 "parsing/parser.mly" +# 3246 "parsing/parser.mly" ( _2 ) -# 30158 "parsing/parser.ml" +# 30658 "parsing/parser.ml" in -# 911 "parsing/parser.mly" +# 977 "parsing/parser.mly" ( x :: xs ) -# 30164 "parsing/parser.ml" +# 30664 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30185,12 +30685,12 @@ module Tables = struct let _v : (Parsetree.case list) = let _1 = # 124 "" ( None ) -# 30189 "parsing/parser.ml" +# 30689 "parsing/parser.ml" in -# 1000 "parsing/parser.mly" +# 1066 "parsing/parser.mly" ( [x] ) -# 30194 "parsing/parser.ml" +# 30694 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30224,13 +30724,13 @@ module Tables = struct # 126 "" ( Some x ) -# 30228 "parsing/parser.ml" +# 30728 "parsing/parser.ml" in -# 1000 "parsing/parser.mly" +# 1066 "parsing/parser.mly" ( [x] ) -# 30234 "parsing/parser.ml" +# 30734 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30267,9 +30767,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.case list) = -# 1004 "parsing/parser.mly" +# 1070 "parsing/parser.mly" ( x :: xs ) -# 30273 "parsing/parser.ml" +# 30773 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30293,20 +30793,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 30299 "parsing/parser.ml" +# 30799 "parsing/parser.ml" in -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30304 "parsing/parser.ml" +# 30804 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30310 "parsing/parser.ml" +# 30810 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30344,20 +30844,20 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type list) = let xs = let x = -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 30350 "parsing/parser.ml" +# 30850 "parsing/parser.ml" in -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30355 "parsing/parser.ml" +# 30855 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30361 "parsing/parser.ml" +# 30861 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30380,14 +30880,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30386 "parsing/parser.ml" +# 30886 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30391 "parsing/parser.ml" +# 30891 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30424,14 +30924,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.with_constraint list) = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30430 "parsing/parser.ml" +# 30930 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30435 "parsing/parser.ml" +# 30935 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30454,14 +30954,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30460 "parsing/parser.ml" +# 30960 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30465 "parsing/parser.ml" +# 30965 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30498,14 +30998,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.row_field list) = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30504 "parsing/parser.ml" +# 31004 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30509 "parsing/parser.ml" +# 31009 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30528,14 +31028,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30534 "parsing/parser.ml" +# 31034 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30539 "parsing/parser.ml" +# 31039 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30572,14 +31072,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30578 "parsing/parser.ml" +# 31078 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30583 "parsing/parser.ml" +# 31083 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30602,14 +31102,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30608 "parsing/parser.ml" +# 31108 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30613 "parsing/parser.ml" +# 31113 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30646,14 +31146,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30652 "parsing/parser.ml" +# 31152 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30657 "parsing/parser.ml" +# 31157 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30676,14 +31176,14 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 935 "parsing/parser.mly" +# 1001 "parsing/parser.mly" ( [ x ] ) -# 30682 "parsing/parser.ml" +# 31182 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30687 "parsing/parser.ml" +# 31187 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30720,14 +31220,14 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = let xs = -# 939 "parsing/parser.mly" +# 1005 "parsing/parser.mly" ( x :: xs ) -# 30726 "parsing/parser.ml" +# 31226 "parsing/parser.ml" in -# 943 "parsing/parser.mly" +# 1009 "parsing/parser.mly" ( xs ) -# 30731 "parsing/parser.ml" +# 31231 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30764,9 +31264,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 966 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x :: xs ) -# 30770 "parsing/parser.ml" +# 31270 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30803,9 +31303,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 970 "parsing/parser.mly" +# 1036 "parsing/parser.mly" ( [ x2; x1 ] ) -# 30809 "parsing/parser.ml" +# 31309 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30842,9 +31342,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.expression list) = -# 966 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x :: xs ) -# 30848 "parsing/parser.ml" +# 31348 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30881,9 +31381,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.expression list) = -# 970 "parsing/parser.mly" +# 1036 "parsing/parser.mly" ( [ x2; x1 ] ) -# 30887 "parsing/parser.ml" +# 31387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30920,9 +31420,9 @@ module Tables = struct let _startpos = _startpos_xs_ in let _endpos = _endpos_x_ in let _v : (Parsetree.core_type list) = -# 966 "parsing/parser.mly" +# 1032 "parsing/parser.mly" ( x :: xs ) -# 30926 "parsing/parser.ml" +# 31426 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30959,9 +31459,9 @@ module Tables = struct let _startpos = _startpos_x1_ in let _endpos = _endpos_x2_ in let _v : (Parsetree.core_type list) = -# 970 "parsing/parser.mly" +# 1036 "parsing/parser.mly" ( [ x2; x1 ] ) -# 30965 "parsing/parser.ml" +# 31465 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -30984,9 +31484,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.row_field) = -# 3345 "parsing/parser.mly" +# 3429 "parsing/parser.mly" ( _1 ) -# 30990 "parsing/parser.ml" +# 31490 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31012,9 +31512,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3347 "parsing/parser.mly" +# 3431 "parsing/parser.mly" ( Rf.inherit_ ~loc:(make_loc _sloc) _1 ) -# 31018 "parsing/parser.ml" +# 31518 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31039,12 +31539,12 @@ module Tables = struct let _v : (Parsetree.expression list) = let _2 = # 124 "" ( None ) -# 31043 "parsing/parser.ml" +# 31543 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31048 "parsing/parser.ml" +# 31548 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31078,13 +31578,13 @@ module Tables = struct # 126 "" ( Some x ) -# 31082 "parsing/parser.ml" +# 31582 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31088 "parsing/parser.ml" +# 31588 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31121,9 +31621,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.expression list) = -# 991 "parsing/parser.mly" +# 1057 "parsing/parser.mly" ( x :: xs ) -# 31127 "parsing/parser.ml" +# 31627 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31149,9 +31649,9 @@ module Tables = struct } = _menhir_stack in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 31155 "parsing/parser.ml" +# 31655 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31159,22 +31659,22 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 31163 "parsing/parser.ml" +# 31663 "parsing/parser.ml" in let x = let label = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 31170 "parsing/parser.ml" +# 31670 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31178 "parsing/parser.ml" +# 31678 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31182,7 +31682,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2576 "parsing/parser.mly" +# 2653 "parsing/parser.mly" ( let e = match oe with | None -> @@ -31192,13 +31692,13 @@ module Tables = struct e in label, e ) -# 31196 "parsing/parser.ml" +# 31696 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31202 "parsing/parser.ml" +# 31702 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31231,9 +31731,9 @@ module Tables = struct let x : unit = Obj.magic x in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 31237 "parsing/parser.ml" +# 31737 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31241,22 +31741,22 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 31245 "parsing/parser.ml" +# 31745 "parsing/parser.ml" in let x = let label = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 31252 "parsing/parser.ml" +# 31752 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31260 "parsing/parser.ml" +# 31760 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31264,7 +31764,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2576 "parsing/parser.mly" +# 2653 "parsing/parser.mly" ( let e = match oe with | None -> @@ -31274,13 +31774,13 @@ module Tables = struct e in label, e ) -# 31278 "parsing/parser.ml" +# 31778 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31284 "parsing/parser.ml" +# 31784 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31320,9 +31820,9 @@ module Tables = struct let _2 : unit = Obj.magic _2 in let oe : (Parsetree.expression option) = Obj.magic oe in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 31326 "parsing/parser.ml" +# 31826 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -31330,17 +31830,17 @@ module Tables = struct let _v : ((Asttypes.label Asttypes.loc * Parsetree.expression) list) = let x = let label = let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 31336 "parsing/parser.ml" +# 31836 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31344 "parsing/parser.ml" +# 31844 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31348,7 +31848,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2576 "parsing/parser.mly" +# 2653 "parsing/parser.mly" ( let e = match oe with | None -> @@ -31358,13 +31858,13 @@ module Tables = struct e in label, e ) -# 31362 "parsing/parser.ml" +# 31862 "parsing/parser.ml" in -# 991 "parsing/parser.mly" +# 1057 "parsing/parser.mly" ( x :: xs ) -# 31368 "parsing/parser.ml" +# 31868 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31389,12 +31889,12 @@ module Tables = struct let _v : (Parsetree.pattern list) = let _2 = # 124 "" ( None ) -# 31393 "parsing/parser.ml" +# 31893 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31398 "parsing/parser.ml" +# 31898 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31428,13 +31928,13 @@ module Tables = struct # 126 "" ( Some x ) -# 31432 "parsing/parser.ml" +# 31932 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31438 "parsing/parser.ml" +# 31938 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31471,9 +31971,9 @@ module Tables = struct let _startpos = _startpos_x_ in let _endpos = _endpos_xs_ in let _v : (Parsetree.pattern list) = -# 991 "parsing/parser.mly" +# 1057 "parsing/parser.mly" ( x :: xs ) -# 31477 "parsing/parser.ml" +# 31977 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31512,7 +32012,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 124 "" ( None ) -# 31516 "parsing/parser.ml" +# 32016 "parsing/parser.ml" in let x = let label = @@ -31520,9 +32020,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31526 "parsing/parser.ml" +# 32026 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31530,7 +32030,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2559 "parsing/parser.mly" +# 2636 "parsing/parser.mly" ( let e = match eo with | None -> @@ -31540,13 +32040,13 @@ module Tables = struct e in label, mkexp_opt_constraint ~loc:_sloc e c ) -# 31544 "parsing/parser.ml" +# 32044 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31550 "parsing/parser.ml" +# 32050 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31592,7 +32092,7 @@ module Tables = struct let _v : ((Longident.t Asttypes.loc * Parsetree.expression) list) = let _2 = # 126 "" ( Some x ) -# 31596 "parsing/parser.ml" +# 32096 "parsing/parser.ml" in let x = let label = @@ -31600,9 +32100,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31606 "parsing/parser.ml" +# 32106 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31610,7 +32110,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2559 "parsing/parser.mly" +# 2636 "parsing/parser.mly" ( let e = match eo with | None -> @@ -31620,13 +32120,13 @@ module Tables = struct e in label, mkexp_opt_constraint ~loc:_sloc e c ) -# 31624 "parsing/parser.ml" +# 32124 "parsing/parser.ml" in -# 987 "parsing/parser.mly" +# 1053 "parsing/parser.mly" ( [x] ) -# 31630 "parsing/parser.ml" +# 32130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31682,9 +32182,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31688 "parsing/parser.ml" +# 32188 "parsing/parser.ml" in let _startpos_label_ = _startpos__1_ in @@ -31692,7 +32192,7 @@ module Tables = struct let _symbolstartpos = _startpos_label_ in let _sloc = (_symbolstartpos, _endpos) in -# 2559 "parsing/parser.mly" +# 2636 "parsing/parser.mly" ( let e = match eo with | None -> @@ -31702,13 +32202,13 @@ module Tables = struct e in label, mkexp_opt_constraint ~loc:_sloc e c ) -# 31706 "parsing/parser.ml" +# 32206 "parsing/parser.ml" in -# 991 "parsing/parser.mly" +# 1057 "parsing/parser.mly" ( x :: xs ) -# 31712 "parsing/parser.ml" +# 32212 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31731,9 +32231,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = -# 2079 "parsing/parser.mly" +# 2169 "parsing/parser.mly" ( _1 ) -# 31737 "parsing/parser.ml" +# 32237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31763,9 +32263,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2080 "parsing/parser.mly" +# 2170 "parsing/parser.mly" ( _1 ) -# 31769 "parsing/parser.ml" +# 32269 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31803,24 +32303,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2082 "parsing/parser.mly" +# 2172 "parsing/parser.mly" ( Pexp_sequence(_1, _3) ) -# 31809 "parsing/parser.ml" +# 32309 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 31818 "parsing/parser.ml" +# 32318 "parsing/parser.ml" in -# 2083 "parsing/parser.mly" +# 2173 "parsing/parser.mly" ( _1 ) -# 31824 "parsing/parser.ml" +# 32324 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31874,11 +32374,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2085 "parsing/parser.mly" +# 2175 "parsing/parser.mly" ( let seq = mkexp ~loc:_sloc (Pexp_sequence (_1, _5)) in let payload = PStr [mkstrexp seq []] in mkexp ~loc:_sloc (Pexp_extension (_4, payload)) ) -# 31882 "parsing/parser.ml" +# 32382 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -31945,18 +32445,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 31951 "parsing/parser.ml" +# 32451 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined4_ in let attrs2 = let _1 = _1_inlined3 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 31960 "parsing/parser.ml" +# 32460 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -31966,17 +32466,17 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 31972 "parsing/parser.ml" +# 32472 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 31980 "parsing/parser.ml" +# 32480 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in @@ -31984,14 +32484,14 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3026 "parsing/parser.mly" +# 3106 "parsing/parser.mly" ( let args, res = args_res in let loc = make_loc (_startpos, _endpos_attrs2_) in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.decl id ~args ?res ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 31995 "parsing/parser.ml" +# 32495 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32017,21 +32517,21 @@ module Tables = struct let _1 = # 260 "" ( List.flatten xss ) -# 32021 "parsing/parser.ml" +# 32521 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 810 "parsing/parser.mly" +# 876 "parsing/parser.mly" ( extra_sig _startpos _endpos _1 ) -# 32029 "parsing/parser.ml" +# 32529 "parsing/parser.ml" in -# 1547 "parsing/parser.mly" +# 1618 "parsing/parser.mly" ( _1 ) -# 32035 "parsing/parser.ml" +# 32535 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32063,9 +32563,9 @@ module Tables = struct let _v : (Parsetree.signature_item) = let _2 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 32069 "parsing/parser.ml" +# 32569 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -32073,10 +32573,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1562 "parsing/parser.mly" +# 1633 "parsing/parser.mly" ( let docs = symbol_docs _sloc in mksig ~loc:_sloc (Psig_extension (_1, (add_docs_attrs docs _2))) ) -# 32080 "parsing/parser.ml" +# 32580 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32100,23 +32600,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1566 "parsing/parser.mly" +# 1637 "parsing/parser.mly" ( Psig_attribute _1 ) -# 32106 "parsing/parser.ml" +# 32606 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 858 "parsing/parser.mly" +# 924 "parsing/parser.mly" ( mksig ~loc:_sloc _1 ) -# 32114 "parsing/parser.ml" +# 32614 "parsing/parser.ml" in -# 1568 "parsing/parser.mly" +# 1639 "parsing/parser.mly" ( _1 ) -# 32120 "parsing/parser.ml" +# 32620 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32140,23 +32640,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1571 "parsing/parser.mly" +# 1642 "parsing/parser.mly" ( psig_value _1 ) -# 32146 "parsing/parser.ml" +# 32646 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32154 "parsing/parser.ml" +# 32654 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32160 "parsing/parser.ml" +# 32660 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32180,23 +32680,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1573 "parsing/parser.mly" +# 1644 "parsing/parser.mly" ( psig_value _1 ) -# 32186 "parsing/parser.ml" +# 32686 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32194 "parsing/parser.ml" +# 32694 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32200 "parsing/parser.ml" +# 32700 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32231,26 +32731,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 32237 "parsing/parser.ml" +# 32737 "parsing/parser.ml" in -# 2847 "parsing/parser.mly" +# 2927 "parsing/parser.mly" ( _1 ) -# 32242 "parsing/parser.ml" +# 32742 "parsing/parser.ml" in -# 2830 "parsing/parser.mly" +# 2910 "parsing/parser.mly" ( _1 ) -# 32248 "parsing/parser.ml" +# 32748 "parsing/parser.ml" in -# 1575 "parsing/parser.mly" +# 1646 "parsing/parser.mly" ( psig_type _1 ) -# 32254 "parsing/parser.ml" +# 32754 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -32258,15 +32758,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32264 "parsing/parser.ml" +# 32764 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32270 "parsing/parser.ml" +# 32770 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32301,26 +32801,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 32307 "parsing/parser.ml" +# 32807 "parsing/parser.ml" in -# 2847 "parsing/parser.mly" +# 2927 "parsing/parser.mly" ( _1 ) -# 32312 "parsing/parser.ml" +# 32812 "parsing/parser.ml" in -# 2835 "parsing/parser.mly" +# 2915 "parsing/parser.mly" ( _1 ) -# 32318 "parsing/parser.ml" +# 32818 "parsing/parser.ml" in -# 1577 "parsing/parser.mly" +# 1648 "parsing/parser.mly" ( psig_typesubst _1 ) -# 32324 "parsing/parser.ml" +# 32824 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -32328,15 +32828,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32334 "parsing/parser.ml" +# 32834 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32340 "parsing/parser.ml" +# 32840 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32421,16 +32921,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 32427 "parsing/parser.ml" +# 32927 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1040 "parsing/parser.mly" +# 1106 "parsing/parser.mly" ( List.rev xs ) -# 32434 "parsing/parser.ml" +# 32934 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -32438,46 +32938,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32444 "parsing/parser.ml" +# 32944 "parsing/parser.ml" in let _4 = -# 3590 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( Recursive ) -# 32450 "parsing/parser.ml" +# 32950 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 32457 "parsing/parser.ml" +# 32957 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3095 "parsing/parser.mly" +# 3175 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 32469 "parsing/parser.ml" +# 32969 "parsing/parser.ml" in -# 3082 "parsing/parser.mly" +# 3162 "parsing/parser.mly" ( _1 ) -# 32475 "parsing/parser.ml" +# 32975 "parsing/parser.ml" in -# 1579 "parsing/parser.mly" +# 1650 "parsing/parser.mly" ( psig_typext _1 ) -# 32481 "parsing/parser.ml" +# 32981 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -32485,15 +32985,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32491 "parsing/parser.ml" +# 32991 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32497 "parsing/parser.ml" +# 32997 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32585,16 +33085,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 32591 "parsing/parser.ml" +# 33091 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1040 "parsing/parser.mly" +# 1106 "parsing/parser.mly" ( List.rev xs ) -# 32598 "parsing/parser.ml" +# 33098 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -32602,9 +33102,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32608 "parsing/parser.ml" +# 33108 "parsing/parser.ml" in let _4 = @@ -32613,41 +33113,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3591 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 32619 "parsing/parser.ml" +# 33119 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 32627 "parsing/parser.ml" +# 33127 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3095 "parsing/parser.mly" +# 3175 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 32639 "parsing/parser.ml" +# 33139 "parsing/parser.ml" in -# 3082 "parsing/parser.mly" +# 3162 "parsing/parser.mly" ( _1 ) -# 32645 "parsing/parser.ml" +# 33145 "parsing/parser.ml" in -# 1579 "parsing/parser.mly" +# 1650 "parsing/parser.mly" ( psig_typext _1 ) -# 32651 "parsing/parser.ml" +# 33151 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -32655,15 +33155,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32661 "parsing/parser.ml" +# 33161 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32667 "parsing/parser.ml" +# 33167 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32687,23 +33187,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1581 "parsing/parser.mly" +# 1652 "parsing/parser.mly" ( psig_exception _1 ) -# 32693 "parsing/parser.ml" +# 33193 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32701 "parsing/parser.ml" +# 33201 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32707 "parsing/parser.ml" +# 33207 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32766,9 +33266,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 32772 "parsing/parser.ml" +# 33272 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -32778,37 +33278,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32784 "parsing/parser.ml" +# 33284 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 32792 "parsing/parser.ml" +# 33292 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1610 "parsing/parser.mly" +# 1683 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 32806 "parsing/parser.ml" +# 33306 "parsing/parser.ml" in -# 1583 "parsing/parser.mly" +# 1654 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 32812 "parsing/parser.ml" +# 33312 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -32816,15 +33316,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32822 "parsing/parser.ml" +# 33322 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32828 "parsing/parser.ml" +# 33328 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32894,9 +33394,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 32900 "parsing/parser.ml" +# 33400 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in @@ -32907,9 +33407,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32913 "parsing/parser.ml" +# 33413 "parsing/parser.ml" in let (_endpos_id_, _startpos_id_) = (_endpos__1_, _startpos__1_) in @@ -32917,9 +33417,9 @@ module Tables = struct let _symbolstartpos = _startpos_id_ in let _sloc = (_symbolstartpos, _endpos) in -# 1647 "parsing/parser.mly" +# 1720 "parsing/parser.mly" ( Mty.alias ~loc:(make_loc _sloc) id ) -# 32923 "parsing/parser.ml" +# 33423 "parsing/parser.ml" in let name = @@ -32928,37 +33428,37 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 32934 "parsing/parser.ml" +# 33434 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 32942 "parsing/parser.ml" +# 33442 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1638 "parsing/parser.mly" +# 1711 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Md.mk name body ~attrs ~loc ~docs, ext ) -# 32956 "parsing/parser.ml" +# 33456 "parsing/parser.ml" in -# 1585 "parsing/parser.mly" +# 1656 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_module body, ext) ) -# 32962 "parsing/parser.ml" +# 33462 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -32966,15 +33466,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 32972 "parsing/parser.ml" +# 33472 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 32978 "parsing/parser.ml" +# 33478 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -32998,23 +33498,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1587 "parsing/parser.mly" +# 1658 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modsubst body, ext) ) -# 33004 "parsing/parser.ml" +# 33504 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33012 "parsing/parser.ml" +# 33512 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33018 "parsing/parser.ml" +# 33518 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33100,9 +33600,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 33106 "parsing/parser.ml" +# 33606 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33112,49 +33612,49 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33118 "parsing/parser.ml" +# 33618 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 33126 "parsing/parser.ml" +# 33626 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1681 "parsing/parser.mly" +# 1754 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in ext, Md.mk name mty ~attrs ~loc ~docs ) -# 33140 "parsing/parser.ml" +# 33640 "parsing/parser.ml" in -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 33146 "parsing/parser.ml" +# 33646 "parsing/parser.ml" in -# 1670 "parsing/parser.mly" +# 1743 "parsing/parser.mly" ( _1 ) -# 33152 "parsing/parser.ml" +# 33652 "parsing/parser.ml" in -# 1589 "parsing/parser.mly" +# 1660 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_recmodule l, ext) ) -# 33158 "parsing/parser.ml" +# 33658 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -33162,15 +33662,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33168 "parsing/parser.ml" +# 33668 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33174 "parsing/parser.ml" +# 33674 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33194,23 +33694,63 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1591 "parsing/parser.mly" +# 1662 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_modtype body, ext) ) -# 33200 "parsing/parser.ml" +# 33700 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33208 "parsing/parser.ml" +# 33708 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" + ( _1 ) +# 33714 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + } = _menhir_stack in + let _1 : (Parsetree.module_type_declaration * string Asttypes.loc option) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__1_ in + let _v : (Parsetree.signature_item) = let _1 = + let _1 = +# 1664 "parsing/parser.mly" + ( let (body, ext) = _1 in (Psig_modtypesubst body, ext) ) +# 33740 "parsing/parser.ml" + in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 941 "parsing/parser.mly" + ( wrap_mksig_ext ~loc:_sloc _1 ) +# 33748 "parsing/parser.ml" + + in + +# 1674 "parsing/parser.mly" ( _1 ) -# 33214 "parsing/parser.ml" +# 33754 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33234,23 +33774,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1593 "parsing/parser.mly" +# 1666 "parsing/parser.mly" ( let (body, ext) = _1 in (Psig_open body, ext) ) -# 33240 "parsing/parser.ml" +# 33780 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33248 "parsing/parser.ml" +# 33788 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33254 "parsing/parser.ml" +# 33794 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33306,38 +33846,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 33312 "parsing/parser.ml" +# 33852 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 33321 "parsing/parser.ml" +# 33861 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1439 "parsing/parser.mly" +# 1510 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 33335 "parsing/parser.ml" +# 33875 "parsing/parser.ml" in -# 1595 "parsing/parser.mly" +# 1668 "parsing/parser.mly" ( psig_include _1 ) -# 33341 "parsing/parser.ml" +# 33881 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -33345,15 +33885,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33351 "parsing/parser.ml" +# 33891 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33357 "parsing/parser.ml" +# 33897 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33430,9 +33970,9 @@ module Tables = struct let cty : (Parsetree.class_type) = Obj.magic cty in let _7 : unit = Obj.magic _7 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 33436 "parsing/parser.ml" +# 33976 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -33450,9 +33990,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 33456 "parsing/parser.ml" +# 33996 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -33462,24 +34002,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 33468 "parsing/parser.ml" +# 34008 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 33476 "parsing/parser.ml" +# 34016 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2011 "parsing/parser.mly" +# 2101 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -33487,25 +34027,25 @@ module Tables = struct ext, Ci.mk id cty ~virt ~params ~attrs ~loc ~docs ) -# 33491 "parsing/parser.ml" +# 34031 "parsing/parser.ml" in -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 33497 "parsing/parser.ml" +# 34037 "parsing/parser.ml" in -# 1999 "parsing/parser.mly" +# 2089 "parsing/parser.mly" ( _1 ) -# 33503 "parsing/parser.ml" +# 34043 "parsing/parser.ml" in -# 1597 "parsing/parser.mly" +# 1670 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class l, ext) ) -# 33509 "parsing/parser.ml" +# 34049 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -33513,15 +34053,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33519 "parsing/parser.ml" +# 34059 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33525 "parsing/parser.ml" +# 34065 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33545,23 +34085,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.signature_item) = let _1 = let _1 = -# 1599 "parsing/parser.mly" +# 1672 "parsing/parser.mly" ( let (ext, l) = _1 in (Psig_class_type l, ext) ) -# 33551 "parsing/parser.ml" +# 34091 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 875 "parsing/parser.mly" +# 941 "parsing/parser.mly" ( wrap_mksig_ext ~loc:_sloc _1 ) -# 33559 "parsing/parser.ml" +# 34099 "parsing/parser.ml" in -# 1601 "parsing/parser.mly" +# 1674 "parsing/parser.mly" ( _1 ) -# 33565 "parsing/parser.ml" +# 34105 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33584,9 +34124,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.constant) = -# 3421 "parsing/parser.mly" +# 3505 "parsing/parser.mly" ( _1 ) -# 33590 "parsing/parser.ml" +# 34130 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33611,18 +34151,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 637 "parsing/parser.mly" +# 691 "parsing/parser.mly" (string * char option) -# 33617 "parsing/parser.ml" +# 34157 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3422 "parsing/parser.mly" +# 3506 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer("-" ^ n, m) ) -# 33626 "parsing/parser.ml" +# 34166 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33647,18 +34187,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 616 "parsing/parser.mly" +# 670 "parsing/parser.mly" (string * char option) -# 33653 "parsing/parser.ml" +# 34193 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3423 "parsing/parser.mly" +# 3507 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float("-" ^ f, m) ) -# 33662 "parsing/parser.ml" +# 34202 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33683,18 +34223,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 637 "parsing/parser.mly" +# 691 "parsing/parser.mly" (string * char option) -# 33689 "parsing/parser.ml" +# 34229 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3424 "parsing/parser.mly" +# 3508 "parsing/parser.mly" ( let (n, m) = _2 in Pconst_integer (n, m) ) -# 33698 "parsing/parser.ml" +# 34238 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33719,18 +34259,18 @@ module Tables = struct }; } = _menhir_stack in let _2 : ( -# 616 "parsing/parser.mly" +# 670 "parsing/parser.mly" (string * char option) -# 33725 "parsing/parser.ml" +# 34265 "parsing/parser.ml" ) = Obj.magic _2 in let _1 : unit = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.constant) = -# 3425 "parsing/parser.mly" +# 3509 "parsing/parser.mly" ( let (f, m) = _2 in Pconst_float(f, m) ) -# 33734 "parsing/parser.ml" +# 34274 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33771,18 +34311,18 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2759 "parsing/parser.mly" +# 2839 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 33779 "parsing/parser.ml" +# 34319 "parsing/parser.ml" in -# 2730 "parsing/parser.mly" +# 2810 "parsing/parser.mly" ( let (fields, closed) = _2 in Ppat_record(fields, closed) ) -# 33786 "parsing/parser.ml" +# 34326 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -33790,15 +34330,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 33796 "parsing/parser.ml" +# 34336 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 33802 "parsing/parser.ml" +# 34342 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33839,19 +34379,19 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 2759 "parsing/parser.mly" +# 2839 "parsing/parser.mly" ( let fields, closed = _1 in let closed = match closed with Some () -> Open | None -> Closed in fields, closed ) -# 33847 "parsing/parser.ml" +# 34387 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2733 "parsing/parser.mly" +# 2813 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 33855 "parsing/parser.ml" +# 34395 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -33859,15 +34399,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 33865 "parsing/parser.ml" +# 34405 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 33871 "parsing/parser.ml" +# 34411 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33906,15 +34446,15 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2753 "parsing/parser.mly" +# 2833 "parsing/parser.mly" ( ps ) -# 33912 "parsing/parser.ml" +# 34452 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2735 "parsing/parser.mly" +# 2815 "parsing/parser.mly" ( fst (mktailpat _loc__3_ _2) ) -# 33918 "parsing/parser.ml" +# 34458 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -33922,15 +34462,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 33928 "parsing/parser.ml" +# 34468 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 33934 "parsing/parser.ml" +# 34474 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -33969,16 +34509,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2753 "parsing/parser.mly" +# 2833 "parsing/parser.mly" ( ps ) -# 33975 "parsing/parser.ml" +# 34515 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2737 "parsing/parser.mly" +# 2817 "parsing/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 33982 "parsing/parser.ml" +# 34522 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -33986,15 +34526,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 33992 "parsing/parser.ml" +# 34532 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 33998 "parsing/parser.ml" +# 34538 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34033,14 +34573,14 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2753 "parsing/parser.mly" +# 2833 "parsing/parser.mly" ( ps ) -# 34039 "parsing/parser.ml" +# 34579 "parsing/parser.ml" in -# 2739 "parsing/parser.mly" +# 2819 "parsing/parser.mly" ( Ppat_array _2 ) -# 34044 "parsing/parser.ml" +# 34584 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34048,15 +34588,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34054 "parsing/parser.ml" +# 34594 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 34060 "parsing/parser.ml" +# 34600 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34087,24 +34627,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2741 "parsing/parser.mly" +# 2821 "parsing/parser.mly" ( Ppat_array [] ) -# 34093 "parsing/parser.ml" +# 34633 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34102 "parsing/parser.ml" +# 34642 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 34108 "parsing/parser.ml" +# 34648 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34143,16 +34683,16 @@ module Tables = struct let _v : (Parsetree.pattern) = let _1 = let _1 = let _2 = -# 2753 "parsing/parser.mly" +# 2833 "parsing/parser.mly" ( ps ) -# 34149 "parsing/parser.ml" +# 34689 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2743 "parsing/parser.mly" +# 2823 "parsing/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 34156 "parsing/parser.ml" +# 34696 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -34160,15 +34700,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 34166 "parsing/parser.ml" +# 34706 "parsing/parser.ml" in -# 2744 "parsing/parser.mly" +# 2824 "parsing/parser.mly" ( _1 ) -# 34172 "parsing/parser.ml" +# 34712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34208,9 +34748,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2246 "parsing/parser.mly" +# 2341 "parsing/parser.mly" ( reloc_exp ~loc:_sloc _2 ) -# 34214 "parsing/parser.ml" +# 34754 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34249,9 +34789,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2248 "parsing/parser.mly" +# 2343 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 34255 "parsing/parser.ml" +# 34795 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34298,9 +34838,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2250 "parsing/parser.mly" +# 2345 "parsing/parser.mly" ( mkexp_constraint ~loc:_sloc _2 _3 ) -# 34304 "parsing/parser.ml" +# 34844 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34318,9 +34858,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -34328,14 +34868,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34343,75 +34883,33 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let i : (Parsetree.expression) = Obj.magic i in let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2346 "parsing/parser.mly" + ( None ) +# 34898 "parsing/parser.ml" + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 34903 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2252 "parsing/parser.mly" - ( array_get ~loc:_sloc _1 _4 ) -# 34360 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2254 "parsing/parser.mly" - ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 34415 "parsing/parser.ml" +# 2347 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 34913 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34429,9 +34927,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -34439,14 +34937,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34454,75 +34952,33 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let i : (Parsetree.expression) = Obj.magic i in let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2346 "parsing/parser.mly" + ( None ) +# 34967 "parsing/parser.ml" + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 34972 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2256 "parsing/parser.mly" - ( string_get ~loc:_sloc _1 _4 ) -# 34471 "parsing/parser.ml" - in - { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = Obj.repr _v; - MenhirLib.EngineTypes.startp = _startpos; - MenhirLib.EngineTypes.endp = _endpos; - MenhirLib.EngineTypes.next = _menhir_stack; - }); - (fun _menhir_env -> - let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in - let { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; - }; - }; - } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in - let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in - -# 2258 "parsing/parser.mly" - ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 34526 "parsing/parser.ml" +# 2347 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 34982 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34540,9 +34996,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = i; + MenhirLib.EngineTypes.startp = _startpos_i_; + MenhirLib.EngineTypes.endp = _endpos_i_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -34550,14 +35006,14 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = d; + MenhirLib.EngineTypes.startp = _startpos_d_; + MenhirLib.EngineTypes.endp = _endpos_d_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34565,29 +35021,33 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let es : (Parsetree.expression list) = Obj.magic es in + let i : (Parsetree.expression) = Obj.magic i in let _3 : unit = Obj.magic _3 in - let _2 : ( -# 632 "parsing/parser.mly" - (string) -# 34574 "parsing/parser.ml" - ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let d : unit = Obj.magic d in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" - ( es ) -# 34583 "parsing/parser.ml" - in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2346 "parsing/parser.mly" + ( None ) +# 35036 "parsing/parser.ml" + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 35041 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2260 "parsing/parser.mly" - ( dotop_get ~loc:_sloc lident bracket _2 _1 _4 ) -# 34591 "parsing/parser.ml" +# 2347 "parsing/parser.mly" + ( mk_indexop_expr builtin_indexing_operators ~loc:_sloc _1 ) +# 35051 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34620,9 +35080,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34633,25 +35093,51 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 34639 "parsing/parser.ml" +# 35099 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35109 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 34648 "parsing/parser.ml" - in - let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in +# 35114 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 35120 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35125 "parsing/parser.ml" + + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 35131 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2262 "parsing/parser.mly" - ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 34655 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35141 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34683,11 +35169,23 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -34697,26 +35195,61 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 34703 "parsing/parser.ml" +# 35201 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35213 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 34712 "parsing/parser.ml" - in - let _endpos = _endpos__5_ in +# 35218 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 35226 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 35231 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35237 "parsing/parser.ml" + + in + +# 2231 "parsing/parser.mly" + ( array, d, Paren, i, r ) +# 35243 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2264 "parsing/parser.mly" - ( dotop_get ~loc:_sloc lident paren _2 _1 _4 ) -# 34720 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35253 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34749,9 +35282,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34762,25 +35295,51 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 34768 "parsing/parser.ml" +# 35301 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35311 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 34777 "parsing/parser.ml" - in - let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in +# 35316 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 35322 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35327 "parsing/parser.ml" + + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 35333 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2266 "parsing/parser.mly" - ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 34784 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35343 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34812,11 +35371,23 @@ module Tables = struct MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; @@ -34826,26 +35397,61 @@ module Tables = struct let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 34832 "parsing/parser.ml" +# 35403 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _4 = -# 2588 "parsing/parser.mly" + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35415 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 34841 "parsing/parser.ml" - in - let _endpos = _endpos__5_ in +# 35420 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 35428 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 35433 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35439 "parsing/parser.ml" + + in + +# 2233 "parsing/parser.mly" + ( array, d, Brace, i, r ) +# 35445 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2268 "parsing/parser.mly" - ( dotop_get ~loc:_sloc lident brace _2 _1 _4 ) -# 34849 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35455 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34863,9 +35469,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _3; @@ -34878,9 +35484,9 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34888,23 +35494,54 @@ module Tables = struct }; } = _menhir_stack in let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in + let es : (Parsetree.expression list) = Obj.magic es in let _3 : unit = Obj.magic _3 in let _2 : ( -# 632 "parsing/parser.mly" +# 686 "parsing/parser.mly" (string) -# 34897 "parsing/parser.ml" +# 35503 "parsing/parser.ml" ) = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in + let _startpos = _startpos_array_ in let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35513 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" + ( es ) +# 35518 "parsing/parser.ml" + in + let d = + let _1 = +# 124 "" + ( None ) +# 35524 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35529 "parsing/parser.ml" + + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 35535 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in -# 2270 "parsing/parser.mly" - ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 34908 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35545 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34917,9 +35554,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _5; + MenhirLib.EngineTypes.startp = _startpos__5_; + MenhirLib.EngineTypes.endp = _endpos__5_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -34927,29 +35564,29 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _3; + MenhirLib.EngineTypes.startp = _startpos__3_; + MenhirLib.EngineTypes.endp = _endpos__3_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.semv = array; + MenhirLib.EngineTypes.startp = _startpos_array_; + MenhirLib.EngineTypes.endp = _endpos_array_; MenhirLib.EngineTypes.next = _menhir_stack; }; }; @@ -34958,32 +35595,65 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in - let es : (Parsetree.expression list) = Obj.magic es in let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let es : (Parsetree.expression list) = Obj.magic es in + let _3 : unit = Obj.magic _3 in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 34968 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in - let _1 : (Parsetree.expression) = Obj.magic _1 in +# 35605 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1 : unit = Obj.magic _1 in + let array : (Parsetree.expression) = Obj.magic array in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in - let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _startpos = _startpos_array_ in + let _endpos = _endpos__5_ in + let _v : (Parsetree.expression) = let _1 = + let r = +# 2348 "parsing/parser.mly" + ( None ) +# 35617 "parsing/parser.ml" + in + let i = +# 2665 "parsing/parser.mly" ( es ) -# 34979 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in +# 35622 "parsing/parser.ml" + in + let d = + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 35630 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 35635 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35641 "parsing/parser.ml" + + in + +# 2235 "parsing/parser.mly" + ( array, d, Bracket, i, r ) +# 35647 "parsing/parser.ml" + + in + let (_endpos__1_, _startpos__1_) = (_endpos__5_, _startpos_array_) in + let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2272 "parsing/parser.mly" - ( dotop_get ~loc:_sloc (ldot _3) bracket _4 _1 _6 ) -# 34987 "parsing/parser.ml" +# 2349 "parsing/parser.mly" + ( mk_indexop_expr user_indexing_operators ~loc:_sloc _1 ) +# 35657 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -34996,72 +35666,118 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = es; - MenhirLib.EngineTypes.startp = _startpos_es_; - MenhirLib.EngineTypes.endp = _endpos_es_; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in - let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" - (string) -# 35047 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in + let _e : unit = Obj.magic _e in + let _4 : (Parsetree.expression) = Obj.magic _4 in + let _p : unit = Obj.magic _p in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" - ( es ) -# 35058 "parsing/parser.ml" + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2240 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) +# 35713 "parsing/parser.ml" + + in + +# 2350 "parsing/parser.mly" + ( _1 ) +# 35719 "parsing/parser.ml" in - let _loc__7_ = (_startpos__7_, _endpos__7_) in - let _loc__5_ = (_startpos__5_, _endpos__5_) in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _e : unit = Obj.magic _e in + let _4 : (Parsetree.expression) = Obj.magic _4 in + let _p : unit = Obj.magic _p in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2242 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) +# 35775 "parsing/parser.ml" + + in -# 2275 "parsing/parser.mly" - ( unclosed "[" _loc__5_ "]" _loc__7_ ) -# 35065 "parsing/parser.ml" +# 2350 "parsing/parser.mly" + ( _1 ) +# 35781 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35074,9 +35790,71 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let _e : unit = Obj.magic _e in + let _4 : (Parsetree.expression) = Obj.magic _4 in + let _p : unit = Obj.magic _p in + let _2 : unit = Obj.magic _2 in + let _1 : (Parsetree.expression) = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2244 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) +# 35837 "parsing/parser.ml" + + in + +# 2350 "parsing/parser.mly" + ( _1 ) +# 35843 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -35084,63 +35862,67 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in + let _e : unit = Obj.magic _e in let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 35125 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in +# 35891 "parsing/parser.ml" + ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" ( es ) -# 35136 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 35901 "parsing/parser.ml" + in + let _2 = + let _1 = +# 124 "" + ( None ) +# 35907 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 35912 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2240 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) +# 35920 "parsing/parser.ml" + + in -# 2277 "parsing/parser.mly" - ( dotop_get ~loc:_sloc (ldot _3) paren _4 _1 _6 ) -# 35144 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 35926 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35153,9 +35935,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -35163,24 +35945,24 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -35194,31 +35976,59 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in + let _e : unit = Obj.magic _e in let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 35204 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in +# 35986 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" ( es ) -# 35215 "parsing/parser.ml" - in - let _loc__7_ = (_startpos__7_, _endpos__7_) in - let _loc__5_ = (_startpos__5_, _endpos__5_) in +# 35998 "parsing/parser.ml" + in + let _2 = + let _1 = _1_inlined1 in + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 36007 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 36012 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 36018 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2240 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Paren _loc__e_ ) +# 36026 "parsing/parser.ml" + + in -# 2280 "parsing/parser.mly" - ( unclosed "(" _loc__5_ ")" _loc__7_ ) -# 35222 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 36032 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35231,9 +36041,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -35241,63 +36051,67 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; - MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; - }; - }; + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; }; }; }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in + let _e : unit = Obj.magic _e in let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 35282 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in +# 36080 "parsing/parser.ml" + ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" ( es ) -# 35293 "parsing/parser.ml" - in - let _endpos = _endpos__7_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in +# 36090 "parsing/parser.ml" + in + let _2 = + let _1 = +# 124 "" + ( None ) +# 36096 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 36101 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2242 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) +# 36109 "parsing/parser.ml" + + in -# 2282 "parsing/parser.mly" - ( dotop_get ~loc:_sloc (ldot _3) brace _4 _1 _6 ) -# 35301 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 36115 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35310,9 +36124,9 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _7; - MenhirLib.EngineTypes.startp = _startpos__7_; - MenhirLib.EngineTypes.endp = _endpos__7_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = es; @@ -35320,24 +36134,24 @@ module Tables = struct MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _2; - MenhirLib.EngineTypes.startp = _startpos__2_; - MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _menhir_s; MenhirLib.EngineTypes.semv = _1; @@ -35351,31 +36165,59 @@ module Tables = struct }; }; } = _menhir_stack in - let _7 : unit = Obj.magic _7 in + let _e : unit = Obj.magic _e in let es : (Parsetree.expression list) = Obj.magic es in - let _5 : unit = Obj.magic _5 in - let _4 : ( -# 632 "parsing/parser.mly" + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" (string) -# 35361 "parsing/parser.ml" - ) = Obj.magic _4 in - let _3 : (Longident.t) = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in +# 36175 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__7_ in - let _v : (Parsetree.expression) = let _6 = -# 2588 "parsing/parser.mly" + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" ( es ) -# 35372 "parsing/parser.ml" - in - let _loc__7_ = (_startpos__7_, _endpos__7_) in - let _loc__5_ = (_startpos__5_, _endpos__5_) in +# 36187 "parsing/parser.ml" + in + let _2 = + let _1 = _1_inlined1 in + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 36196 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 36201 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 36207 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2242 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Brace _loc__e_ ) +# 36215 "parsing/parser.ml" + + in -# 2285 "parsing/parser.mly" - ( unclosed "{" _loc__5_ "}" _loc__7_ ) -# 35379 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 36221 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35388,19 +36230,19 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; @@ -35417,21 +36259,48 @@ module Tables = struct }; }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in + let _e : unit = Obj.magic _e in + let es : (Parsetree.expression list) = Obj.magic es in + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" + (string) +# 36269 "parsing/parser.ml" + ) = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _endpos = _endpos__5_ in - let _symbolstartpos = _startpos__1_ in - let _sloc = (_symbolstartpos, _endpos) in + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" + ( es ) +# 36279 "parsing/parser.ml" + in + let _2 = + let _1 = +# 124 "" + ( None ) +# 36285 "parsing/parser.ml" + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 36290 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2244 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) +# 36298 "parsing/parser.ml" + + in -# 2287 "parsing/parser.mly" - ( bigarray_get ~loc:_sloc _1 _4 ) -# 35435 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 36304 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35444,49 +36313,100 @@ module Tables = struct let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in let { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _5; - MenhirLib.EngineTypes.startp = _startpos__5_; - MenhirLib.EngineTypes.endp = _endpos__5_; + MenhirLib.EngineTypes.semv = _e; + MenhirLib.EngineTypes.startp = _startpos__e_; + MenhirLib.EngineTypes.endp = _endpos__e_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _4; - MenhirLib.EngineTypes.startp = _startpos__4_; - MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.semv = es; + MenhirLib.EngineTypes.startp = _startpos_es_; + MenhirLib.EngineTypes.endp = _endpos_es_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; - MenhirLib.EngineTypes.semv = _3; - MenhirLib.EngineTypes.startp = _startpos__3_; - MenhirLib.EngineTypes.endp = _endpos__3_; + MenhirLib.EngineTypes.semv = _p; + MenhirLib.EngineTypes.startp = _startpos__p_; + MenhirLib.EngineTypes.endp = _endpos__p_; MenhirLib.EngineTypes.next = { MenhirLib.EngineTypes.state = _; MenhirLib.EngineTypes.semv = _2; MenhirLib.EngineTypes.startp = _startpos__2_; MenhirLib.EngineTypes.endp = _endpos__2_; MenhirLib.EngineTypes.next = { - MenhirLib.EngineTypes.state = _menhir_s; - MenhirLib.EngineTypes.semv = _1; - MenhirLib.EngineTypes.startp = _startpos__1_; - MenhirLib.EngineTypes.endp = _endpos__1_; - MenhirLib.EngineTypes.next = _menhir_stack; + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2_inlined1; + MenhirLib.EngineTypes.startp = _startpos__2_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__2_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; }; }; }; }; } = _menhir_stack in - let _5 : unit = Obj.magic _5 in - let _4 : (Parsetree.expression) = Obj.magic _4 in - let _3 : unit = Obj.magic _3 in - let _2 : unit = Obj.magic _2 in + let _e : unit = Obj.magic _e in + let es : (Parsetree.expression list) = Obj.magic es in + let _p : unit = Obj.magic _p in + let _2 : ( +# 686 "parsing/parser.mly" + (string) +# 36364 "parsing/parser.ml" + ) = Obj.magic _2 in + let _2_inlined1 : (Longident.t) = Obj.magic _2_inlined1 in + let _1_inlined1 : unit = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in - let _endpos = _endpos__5_ in - let _v : (Parsetree.expression) = let _loc__5_ = (_startpos__5_, _endpos__5_) in - let _loc__3_ = (_startpos__3_, _endpos__3_) in + let _endpos = _endpos__e_ in + let _v : (Parsetree.expression) = let _1 = + let _4 = +# 2665 "parsing/parser.mly" + ( es ) +# 36376 "parsing/parser.ml" + in + let _2 = + let _1 = _1_inlined1 in + let _1 = + let _2 = _2_inlined1 in + let x = +# 2247 "parsing/parser.mly" + (_2) +# 36385 "parsing/parser.ml" + in + +# 126 "" + ( Some x ) +# 36390 "parsing/parser.ml" + + in + +# 2247 "parsing/parser.mly" + ( _1, _2 ) +# 36396 "parsing/parser.ml" + + in + let _loc__p_ = (_startpos__p_, _endpos__p_) in + let _loc__e_ = (_startpos__e_, _endpos__e_) in + +# 2244 "parsing/parser.mly" + ( indexop_unclosed_error _loc__p_ Bracket _loc__e_ ) +# 36404 "parsing/parser.ml" + + in -# 2289 "parsing/parser.mly" - ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 35490 "parsing/parser.ml" +# 2351 "parsing/parser.mly" + ( _1 ) +# 36410 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35540,15 +36460,15 @@ module Tables = struct let attrs = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35546 "parsing/parser.ml" +# 36466 "parsing/parser.ml" in -# 2298 "parsing/parser.mly" +# 2360 "parsing/parser.mly" ( e.pexp_desc, (ext, attrs @ e.pexp_attributes) ) -# 35552 "parsing/parser.ml" +# 36472 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -35556,10 +36476,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 35563 "parsing/parser.ml" +# 36483 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35608,24 +36528,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35614 "parsing/parser.ml" +# 36534 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 35620 "parsing/parser.ml" +# 36540 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2300 "parsing/parser.mly" +# 2362 "parsing/parser.mly" ( Pexp_construct (mkloc (Lident "()") (make_loc _sloc), None), _2 ) -# 35629 "parsing/parser.ml" +# 36549 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -35633,10 +36553,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 35640 "parsing/parser.ml" +# 36560 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35692,23 +36612,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35698 "parsing/parser.ml" +# 36618 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 35704 "parsing/parser.ml" +# 36624 "parsing/parser.ml" in let _loc__4_ = (_startpos__4_, _endpos__4_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2302 "parsing/parser.mly" +# 2364 "parsing/parser.mly" ( unclosed "begin" _loc__1_ "end" _loc__4_ ) -# 35712 "parsing/parser.ml" +# 36632 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -35716,10 +36636,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 35723 "parsing/parser.ml" +# 36643 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35769,9 +36689,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 35775 "parsing/parser.ml" +# 36695 "parsing/parser.ml" in let _2 = @@ -35779,21 +36699,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35785 "parsing/parser.ml" +# 36705 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 35791 "parsing/parser.ml" +# 36711 "parsing/parser.ml" in -# 2304 "parsing/parser.mly" +# 2366 "parsing/parser.mly" ( Pexp_new(_3), _2 ) -# 35797 "parsing/parser.ml" +# 36717 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -35801,10 +36721,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 35808 "parsing/parser.ml" +# 36728 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35867,21 +36787,21 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35873 "parsing/parser.ml" +# 36793 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 35879 "parsing/parser.ml" +# 36799 "parsing/parser.ml" in -# 2306 "parsing/parser.mly" +# 2368 "parsing/parser.mly" ( Pexp_pack _4, _3 ) -# 35885 "parsing/parser.ml" +# 36805 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -35889,10 +36809,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 35896 "parsing/parser.ml" +# 36816 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -35970,11 +36890,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 35978 "parsing/parser.ml" +# 36898 "parsing/parser.ml" in let _3 = @@ -35982,24 +36902,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 35988 "parsing/parser.ml" +# 36908 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 35994 "parsing/parser.ml" +# 36914 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2308 "parsing/parser.mly" +# 2370 "parsing/parser.mly" ( Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _4), _6), _3 ) -# 36003 "parsing/parser.ml" +# 36923 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -36007,10 +36927,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36014 "parsing/parser.ml" +# 36934 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36080,23 +37000,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 36086 "parsing/parser.ml" +# 37006 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 36092 "parsing/parser.ml" +# 37012 "parsing/parser.ml" in let _loc__6_ = (_startpos__6_, _endpos__6_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2310 "parsing/parser.mly" +# 2372 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__6_ ) -# 36100 "parsing/parser.ml" +# 37020 "parsing/parser.ml" in let _endpos__1_ = _endpos__6_ in @@ -36104,10 +37024,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2291 "parsing/parser.mly" +# 2353 "parsing/parser.mly" ( let desc, attrs = _1 in mkexp_attrs ~loc:_sloc desc attrs ) -# 36111 "parsing/parser.ml" +# 37031 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36136,30 +37056,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36142 "parsing/parser.ml" +# 37062 "parsing/parser.ml" in -# 2314 "parsing/parser.mly" +# 2376 "parsing/parser.mly" ( Pexp_ident (_1) ) -# 36148 "parsing/parser.ml" +# 37068 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36157 "parsing/parser.ml" +# 37077 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36163 "parsing/parser.ml" +# 37083 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36183,23 +37103,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2316 "parsing/parser.mly" +# 2378 "parsing/parser.mly" ( Pexp_constant _1 ) -# 36189 "parsing/parser.ml" +# 37109 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36197 "parsing/parser.ml" +# 37117 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36203 "parsing/parser.ml" +# 37123 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36228,30 +37148,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36234 "parsing/parser.ml" +# 37154 "parsing/parser.ml" in -# 2318 "parsing/parser.mly" +# 2380 "parsing/parser.mly" ( Pexp_construct(_1, None) ) -# 36240 "parsing/parser.ml" +# 37160 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36249 "parsing/parser.ml" +# 37169 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36255 "parsing/parser.ml" +# 37175 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36275,23 +37195,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2320 "parsing/parser.mly" +# 2382 "parsing/parser.mly" ( Pexp_variant(_1, None) ) -# 36281 "parsing/parser.ml" +# 37201 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36289 "parsing/parser.ml" +# 37209 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36295 "parsing/parser.ml" +# 37215 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36317,9 +37237,9 @@ module Tables = struct } = _menhir_stack in let _2 : (Parsetree.expression) = Obj.magic _2 in let _1 : ( -# 675 "parsing/parser.mly" +# 729 "parsing/parser.mly" (string) -# 36323 "parsing/parser.ml" +# 37243 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in @@ -36331,15 +37251,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 36337 "parsing/parser.ml" +# 37257 "parsing/parser.ml" in -# 2322 "parsing/parser.mly" +# 2384 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 36343 "parsing/parser.ml" +# 37263 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -36347,15 +37267,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36353 "parsing/parser.ml" +# 37273 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36359 "parsing/parser.ml" +# 37279 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36388,23 +37308,23 @@ module Tables = struct let _1 = let _1 = let _1 = -# 2323 "parsing/parser.mly" +# 2385 "parsing/parser.mly" ("!") -# 36394 "parsing/parser.ml" +# 37314 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 36402 "parsing/parser.ml" +# 37322 "parsing/parser.ml" in -# 2324 "parsing/parser.mly" +# 2386 "parsing/parser.mly" ( Pexp_apply(_1, [Nolabel,_2]) ) -# 36408 "parsing/parser.ml" +# 37328 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in @@ -36412,15 +37332,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36418 "parsing/parser.ml" +# 37338 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36424 "parsing/parser.ml" +# 37344 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36459,14 +37379,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2571 "parsing/parser.mly" +# 2648 "parsing/parser.mly" ( xs ) -# 36465 "parsing/parser.ml" +# 37385 "parsing/parser.ml" in -# 2326 "parsing/parser.mly" +# 2388 "parsing/parser.mly" ( Pexp_override _2 ) -# 36470 "parsing/parser.ml" +# 37390 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -36474,15 +37394,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36480 "parsing/parser.ml" +# 37400 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36486 "parsing/parser.ml" +# 37406 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36521,16 +37441,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2571 "parsing/parser.mly" +# 2648 "parsing/parser.mly" ( xs ) -# 36527 "parsing/parser.ml" +# 37447 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2328 "parsing/parser.mly" +# 2390 "parsing/parser.mly" ( unclosed "{<" _loc__1_ ">}" _loc__3_ ) -# 36534 "parsing/parser.ml" +# 37454 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -36538,15 +37458,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36544 "parsing/parser.ml" +# 37464 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36550 "parsing/parser.ml" +# 37470 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36577,24 +37497,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2330 "parsing/parser.mly" +# 2392 "parsing/parser.mly" ( Pexp_override [] ) -# 36583 "parsing/parser.ml" +# 37503 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36592 "parsing/parser.ml" +# 37512 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36598 "parsing/parser.ml" +# 37518 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36638,15 +37558,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36644 "parsing/parser.ml" +# 37564 "parsing/parser.ml" in -# 2332 "parsing/parser.mly" +# 2394 "parsing/parser.mly" ( Pexp_field(_1, _3) ) -# 36650 "parsing/parser.ml" +# 37570 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -36654,15 +37574,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36660 "parsing/parser.ml" +# 37580 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36666 "parsing/parser.ml" +# 37586 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36720,24 +37640,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36726 "parsing/parser.ml" +# 37646 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 36735 "parsing/parser.ml" +# 37655 "parsing/parser.ml" in -# 2334 "parsing/parser.mly" +# 2396 "parsing/parser.mly" ( Pexp_open(od, _4) ) -# 36741 "parsing/parser.ml" +# 37661 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -36745,15 +37665,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36751 "parsing/parser.ml" +# 37671 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36757 "parsing/parser.ml" +# 37677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36806,9 +37726,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2571 "parsing/parser.mly" +# 2648 "parsing/parser.mly" ( xs ) -# 36812 "parsing/parser.ml" +# 37732 "parsing/parser.ml" in let od = let _1 = @@ -36816,18 +37736,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36822 "parsing/parser.ml" +# 37742 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 36831 "parsing/parser.ml" +# 37751 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -36835,10 +37755,10 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2336 "parsing/parser.mly" +# 2398 "parsing/parser.mly" ( (* TODO: review the location of Pexp_override *) Pexp_open(od, mkexp ~loc:_sloc (Pexp_override _4)) ) -# 36842 "parsing/parser.ml" +# 37762 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -36846,15 +37766,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36852 "parsing/parser.ml" +# 37772 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36858 "parsing/parser.ml" +# 37778 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36907,16 +37827,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2571 "parsing/parser.mly" +# 2648 "parsing/parser.mly" ( xs ) -# 36913 "parsing/parser.ml" +# 37833 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2339 "parsing/parser.mly" +# 2401 "parsing/parser.mly" ( unclosed "{<" _loc__3_ ">}" _loc__5_ ) -# 36920 "parsing/parser.ml" +# 37840 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -36924,15 +37844,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 36930 "parsing/parser.ml" +# 37850 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 36936 "parsing/parser.ml" +# 37856 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -36963,9 +37883,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 36969 "parsing/parser.ml" +# 37889 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _2 : unit = Obj.magic _2 in let _1 : (Parsetree.expression) = Obj.magic _1 in @@ -36977,23 +37897,23 @@ module Tables = struct let _3 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 36983 "parsing/parser.ml" +# 37903 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 36991 "parsing/parser.ml" +# 37911 "parsing/parser.ml" in -# 2341 "parsing/parser.mly" +# 2403 "parsing/parser.mly" ( Pexp_send(_1, _3) ) -# 36997 "parsing/parser.ml" +# 37917 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -37001,15 +37921,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37007 "parsing/parser.ml" +# 37927 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37013 "parsing/parser.ml" +# 37933 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37041,9 +37961,9 @@ module Tables = struct } = _menhir_stack in let _3 : (Parsetree.expression) = Obj.magic _3 in let _1_inlined1 : ( -# 686 "parsing/parser.mly" +# 740 "parsing/parser.mly" (string) -# 37047 "parsing/parser.ml" +# 37967 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _1 : (Parsetree.expression) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in @@ -37057,15 +37977,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 844 "parsing/parser.mly" +# 910 "parsing/parser.mly" ( mkoperator ~loc:_sloc _1 ) -# 37063 "parsing/parser.ml" +# 37983 "parsing/parser.ml" in -# 2343 "parsing/parser.mly" +# 2405 "parsing/parser.mly" ( mkinfix _1 _2 _3 ) -# 37069 "parsing/parser.ml" +# 37989 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37073,15 +37993,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37079 "parsing/parser.ml" +# 37999 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37085 "parsing/parser.ml" +# 38005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37105,23 +38025,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2345 "parsing/parser.mly" +# 2407 "parsing/parser.mly" ( Pexp_extension _1 ) -# 37111 "parsing/parser.ml" +# 38031 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37119 "parsing/parser.ml" +# 38039 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37125 "parsing/parser.ml" +# 38045 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37169,18 +38089,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2346 "parsing/parser.mly" +# 2408 "parsing/parser.mly" (Lident "()") -# 37175 "parsing/parser.ml" +# 38095 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37184 "parsing/parser.ml" +# 38104 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -37190,25 +38110,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37196 "parsing/parser.ml" +# 38116 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37205 "parsing/parser.ml" +# 38125 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2347 "parsing/parser.mly" +# 2409 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_loc__3_) (Pexp_construct(_3, None))) ) -# 37212 "parsing/parser.ml" +# 38132 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -37216,15 +38136,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37222 "parsing/parser.ml" +# 38142 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37228 "parsing/parser.ml" +# 38148 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37279,9 +38199,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2349 "parsing/parser.mly" +# 2411 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 37285 "parsing/parser.ml" +# 38205 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37289,15 +38209,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37295 "parsing/parser.ml" +# 38215 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37301 "parsing/parser.ml" +# 38221 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37336,25 +38256,25 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2351 "parsing/parser.mly" +# 2413 "parsing/parser.mly" ( let (exten, fields) = _2 in Pexp_record(fields, exten) ) -# 37343 "parsing/parser.ml" +# 38263 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37352 "parsing/parser.ml" +# 38272 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37358 "parsing/parser.ml" +# 38278 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37396,9 +38316,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2354 "parsing/parser.mly" +# 2416 "parsing/parser.mly" ( unclosed "{" _loc__1_ "}" _loc__3_ ) -# 37402 "parsing/parser.ml" +# 38322 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37406,15 +38326,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37412 "parsing/parser.ml" +# 38332 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37418 "parsing/parser.ml" +# 38338 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37473,27 +38393,27 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37479 "parsing/parser.ml" +# 38399 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37488 "parsing/parser.ml" +# 38408 "parsing/parser.ml" in let _endpos = _endpos__5_ in -# 2356 "parsing/parser.mly" +# 2418 "parsing/parser.mly" ( let (exten, fields) = _4 in Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_record(fields, exten))) ) -# 37497 "parsing/parser.ml" +# 38417 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37501,15 +38421,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37507 "parsing/parser.ml" +# 38427 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37513 "parsing/parser.ml" +# 38433 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37565,9 +38485,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2360 "parsing/parser.mly" +# 2422 "parsing/parser.mly" ( unclosed "{" _loc__3_ "}" _loc__5_ ) -# 37571 "parsing/parser.ml" +# 38491 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37575,15 +38495,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37581 "parsing/parser.ml" +# 38501 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37587 "parsing/parser.ml" +# 38507 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37622,14 +38542,14 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 37628 "parsing/parser.ml" +# 38548 "parsing/parser.ml" in -# 2362 "parsing/parser.mly" +# 2424 "parsing/parser.mly" ( Pexp_array(_2) ) -# 37633 "parsing/parser.ml" +# 38553 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37637,15 +38557,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37643 "parsing/parser.ml" +# 38563 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37649 "parsing/parser.ml" +# 38569 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37684,16 +38604,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 37690 "parsing/parser.ml" +# 38610 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2364 "parsing/parser.mly" +# 2426 "parsing/parser.mly" ( unclosed "[|" _loc__1_ "|]" _loc__3_ ) -# 37697 "parsing/parser.ml" +# 38617 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -37701,15 +38621,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37707 "parsing/parser.ml" +# 38627 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37713 "parsing/parser.ml" +# 38633 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37740,24 +38660,24 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = let _1 = let _1 = -# 2366 "parsing/parser.mly" +# 2428 "parsing/parser.mly" ( Pexp_array [] ) -# 37746 "parsing/parser.ml" +# 38666 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37755 "parsing/parser.ml" +# 38675 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37761 "parsing/parser.ml" +# 38681 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37810,9 +38730,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 37816 "parsing/parser.ml" +# 38736 "parsing/parser.ml" in let od = let _1 = @@ -37820,25 +38740,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37826 "parsing/parser.ml" +# 38746 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37835 "parsing/parser.ml" +# 38755 "parsing/parser.ml" in let _endpos = _endpos__5_ in -# 2368 "parsing/parser.mly" +# 2430 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array(_4))) ) -# 37842 "parsing/parser.ml" +# 38762 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -37846,15 +38766,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37852 "parsing/parser.ml" +# 38772 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37858 "parsing/parser.ml" +# 38778 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37905,26 +38825,26 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 37911 "parsing/parser.ml" +# 38831 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 37920 "parsing/parser.ml" +# 38840 "parsing/parser.ml" in let _endpos = _endpos__4_ in -# 2370 "parsing/parser.mly" +# 2432 "parsing/parser.mly" ( (* TODO: review the location of Pexp_array *) Pexp_open(od, mkexp ~loc:(_startpos__3_, _endpos) (Pexp_array [])) ) -# 37928 "parsing/parser.ml" +# 38848 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -37932,15 +38852,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 37938 "parsing/parser.ml" +# 38858 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 37944 "parsing/parser.ml" +# 38864 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -37993,16 +38913,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 37999 "parsing/parser.ml" +# 38919 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2374 "parsing/parser.mly" +# 2436 "parsing/parser.mly" ( unclosed "[|" _loc__3_ "|]" _loc__5_ ) -# 38006 "parsing/parser.ml" +# 38926 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38010,15 +38930,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38016 "parsing/parser.ml" +# 38936 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38022 "parsing/parser.ml" +# 38942 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38057,15 +38977,15 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 38063 "parsing/parser.ml" +# 38983 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2376 "parsing/parser.mly" +# 2438 "parsing/parser.mly" ( fst (mktailexp _loc__3_ _2) ) -# 38069 "parsing/parser.ml" +# 38989 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38073,15 +38993,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38079 "parsing/parser.ml" +# 38999 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38085 "parsing/parser.ml" +# 39005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38120,16 +39040,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _2 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 38126 "parsing/parser.ml" +# 39046 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2378 "parsing/parser.mly" +# 2440 "parsing/parser.mly" ( unclosed "[" _loc__1_ "]" _loc__3_ ) -# 38133 "parsing/parser.ml" +# 39053 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -38137,15 +39057,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38143 "parsing/parser.ml" +# 39063 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38149 "parsing/parser.ml" +# 39069 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38198,9 +39118,9 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 38204 "parsing/parser.ml" +# 39124 "parsing/parser.ml" in let od = let _1 = @@ -38208,30 +39128,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38214 "parsing/parser.ml" +# 39134 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38223 "parsing/parser.ml" +# 39143 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _loc__5_ = (_startpos__5_, _endpos__5_) in -# 2380 "parsing/parser.mly" +# 2442 "parsing/parser.mly" ( let list_exp = (* TODO: review the location of list_exp *) let tail_exp, _tail_loc = mktailexp _loc__5_ _4 in mkexp ~loc:(_startpos__3_, _endpos) tail_exp in Pexp_open(od, list_exp) ) -# 38235 "parsing/parser.ml" +# 39155 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38239,15 +39159,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38245 "parsing/parser.ml" +# 39165 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38251 "parsing/parser.ml" +# 39171 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38295,18 +39215,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2385 "parsing/parser.mly" +# 2447 "parsing/parser.mly" (Lident "[]") -# 38301 "parsing/parser.ml" +# 39221 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38310 "parsing/parser.ml" +# 39230 "parsing/parser.ml" in let (_endpos__3_, _startpos__3_) = (_endpos__2_inlined1_, _startpos__1_inlined1_) in @@ -38316,25 +39236,25 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38322 "parsing/parser.ml" +# 39242 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38331 "parsing/parser.ml" +# 39251 "parsing/parser.ml" in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2386 "parsing/parser.mly" +# 2448 "parsing/parser.mly" ( Pexp_open(od, mkexp ~loc:_loc__3_ (Pexp_construct(_3, None))) ) -# 38338 "parsing/parser.ml" +# 39258 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -38342,15 +39262,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38348 "parsing/parser.ml" +# 39268 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38354 "parsing/parser.ml" +# 39274 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38403,16 +39323,16 @@ module Tables = struct let _v : (Parsetree.expression) = let _1 = let _1 = let _4 = -# 2588 "parsing/parser.mly" +# 2665 "parsing/parser.mly" ( es ) -# 38409 "parsing/parser.ml" +# 39329 "parsing/parser.ml" in let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2389 "parsing/parser.mly" +# 2451 "parsing/parser.mly" ( unclosed "[" _loc__3_ "]" _loc__5_ ) -# 38416 "parsing/parser.ml" +# 39336 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -38420,15 +39340,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38426 "parsing/parser.ml" +# 39346 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38432 "parsing/parser.ml" +# 39352 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38521,11 +39441,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 38529 "parsing/parser.ml" +# 39449 "parsing/parser.ml" in let _5 = @@ -38533,15 +39453,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 38539 "parsing/parser.ml" +# 39459 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 38545 "parsing/parser.ml" +# 39465 "parsing/parser.ml" in let od = @@ -38550,18 +39470,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38556 "parsing/parser.ml" +# 39476 "parsing/parser.ml" in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 1498 "parsing/parser.mly" +# 1569 "parsing/parser.mly" ( let loc = make_loc _loc__1_ in let me = Mod.ident ~loc _1 in Opn.mk ~loc me ) -# 38565 "parsing/parser.ml" +# 39485 "parsing/parser.ml" in let _startpos_od_ = _startpos__1_ in @@ -38569,12 +39489,12 @@ module Tables = struct let _symbolstartpos = _startpos_od_ in let _sloc = (_symbolstartpos, _endpos) in -# 2392 "parsing/parser.mly" +# 2454 "parsing/parser.mly" ( let modexp = mkexp_attrs ~loc:(_startpos__3_, _endpos) (Pexp_constraint (ghexp ~loc:_sloc (Pexp_pack _6), _8)) _5 in Pexp_open(od, modexp) ) -# 38578 "parsing/parser.ml" +# 39498 "parsing/parser.ml" in let _endpos__1_ = _endpos__9_ in @@ -38582,15 +39502,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38588 "parsing/parser.ml" +# 39508 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38594 "parsing/parser.ml" +# 39514 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38675,23 +39595,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 38681 "parsing/parser.ml" +# 39601 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 38687 "parsing/parser.ml" +# 39607 "parsing/parser.ml" in let _loc__8_ = (_startpos__8_, _endpos__8_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2398 "parsing/parser.mly" +# 2460 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__8_ ) -# 38695 "parsing/parser.ml" +# 39615 "parsing/parser.ml" in let _endpos__1_ = _endpos__8_ in @@ -38699,15 +39619,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 850 "parsing/parser.mly" +# 916 "parsing/parser.mly" ( mkexp ~loc:_sloc _1 ) -# 38705 "parsing/parser.ml" +# 39625 "parsing/parser.ml" in -# 2294 "parsing/parser.mly" +# 2356 "parsing/parser.mly" ( _1 ) -# 38711 "parsing/parser.ml" +# 39631 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38736,30 +39656,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38742 "parsing/parser.ml" +# 39662 "parsing/parser.ml" in -# 2668 "parsing/parser.mly" +# 2748 "parsing/parser.mly" ( Ppat_var (_1) ) -# 38748 "parsing/parser.ml" +# 39668 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 38757 "parsing/parser.ml" +# 39677 "parsing/parser.ml" in -# 2669 "parsing/parser.mly" +# 2749 "parsing/parser.mly" ( _1 ) -# 38763 "parsing/parser.ml" +# 39683 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38782,9 +39702,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2670 "parsing/parser.mly" +# 2750 "parsing/parser.mly" ( _1 ) -# 38788 "parsing/parser.ml" +# 39708 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38824,9 +39744,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2675 "parsing/parser.mly" +# 2755 "parsing/parser.mly" ( reloc_pat ~loc:_sloc _2 ) -# 38830 "parsing/parser.ml" +# 39750 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38849,9 +39769,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = -# 2677 "parsing/parser.mly" +# 2757 "parsing/parser.mly" ( _1 ) -# 38855 "parsing/parser.ml" +# 39775 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -38914,9 +39834,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 38920 "parsing/parser.ml" +# 39840 "parsing/parser.ml" in let _3 = @@ -38924,24 +39844,24 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 38930 "parsing/parser.ml" +# 39850 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 38936 "parsing/parser.ml" +# 39856 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2679 "parsing/parser.mly" +# 2759 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_unpack _4) _3 ) -# 38945 "parsing/parser.ml" +# 39865 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39018,11 +39938,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 39026 "parsing/parser.ml" +# 39946 "parsing/parser.ml" in let _4 = @@ -39031,9 +39951,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39037 "parsing/parser.ml" +# 39957 "parsing/parser.ml" in let (_endpos__4_, _startpos__4_) = (_endpos__1_inlined3_, _startpos__1_inlined3_) in @@ -39042,15 +39962,15 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 39048 "parsing/parser.ml" +# 39968 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 39054 "parsing/parser.ml" +# 39974 "parsing/parser.ml" in let _endpos = _endpos__7_ in @@ -39058,11 +39978,11 @@ module Tables = struct let _loc__4_ = (_startpos__4_, _endpos__4_) in let _sloc = (_symbolstartpos, _endpos) in -# 2681 "parsing/parser.mly" +# 2761 "parsing/parser.mly" ( mkpat_attrs ~loc:_sloc (Ppat_constraint(mkpat ~loc:_loc__4_ (Ppat_unpack _4), _6)) _3 ) -# 39066 "parsing/parser.ml" +# 39986 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39086,23 +40006,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2689 "parsing/parser.mly" +# 2769 "parsing/parser.mly" ( Ppat_any ) -# 39092 "parsing/parser.ml" +# 40012 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39100 "parsing/parser.ml" +# 40020 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39106 "parsing/parser.ml" +# 40026 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39126,23 +40046,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2691 "parsing/parser.mly" +# 2771 "parsing/parser.mly" ( Ppat_constant _1 ) -# 39132 "parsing/parser.ml" +# 40052 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39140 "parsing/parser.ml" +# 40060 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39146 "parsing/parser.ml" +# 40066 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39180,24 +40100,24 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2693 "parsing/parser.mly" +# 2773 "parsing/parser.mly" ( Ppat_interval (_1, _3) ) -# 39186 "parsing/parser.ml" +# 40106 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39195 "parsing/parser.ml" +# 40115 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39201 "parsing/parser.ml" +# 40121 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39226,30 +40146,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39232 "parsing/parser.ml" +# 40152 "parsing/parser.ml" in -# 2695 "parsing/parser.mly" +# 2775 "parsing/parser.mly" ( Ppat_construct(_1, None) ) -# 39238 "parsing/parser.ml" +# 40158 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39247 "parsing/parser.ml" +# 40167 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39253 "parsing/parser.ml" +# 40173 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39273,23 +40193,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2697 "parsing/parser.mly" +# 2777 "parsing/parser.mly" ( Ppat_variant(_1, None) ) -# 39279 "parsing/parser.ml" +# 40199 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39287 "parsing/parser.ml" +# 40207 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39293 "parsing/parser.ml" +# 40213 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39326,15 +40246,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39332 "parsing/parser.ml" +# 40252 "parsing/parser.ml" in -# 2699 "parsing/parser.mly" +# 2779 "parsing/parser.mly" ( Ppat_type (_2) ) -# 39338 "parsing/parser.ml" +# 40258 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -39342,15 +40262,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39348 "parsing/parser.ml" +# 40268 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39354 "parsing/parser.ml" +# 40274 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39393,15 +40313,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39399 "parsing/parser.ml" +# 40319 "parsing/parser.ml" in -# 2701 "parsing/parser.mly" +# 2781 "parsing/parser.mly" ( Ppat_open(_1, _3) ) -# 39405 "parsing/parser.ml" +# 40325 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39409,15 +40329,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39415 "parsing/parser.ml" +# 40335 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39421 "parsing/parser.ml" +# 40341 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39465,18 +40385,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2702 "parsing/parser.mly" +# 2782 "parsing/parser.mly" (Lident "[]") -# 39471 "parsing/parser.ml" +# 40391 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39480 "parsing/parser.ml" +# 40400 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -39485,18 +40405,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39491 "parsing/parser.ml" +# 40411 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2703 "parsing/parser.mly" +# 2783 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 39500 "parsing/parser.ml" +# 40420 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39504,15 +40424,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39510 "parsing/parser.ml" +# 40430 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39516 "parsing/parser.ml" +# 40436 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39560,18 +40480,18 @@ module Tables = struct let _3 = let (_endpos__2_, _startpos__1_, _2, _1) = (_endpos__2_inlined1_, _startpos__1_inlined1_, _2_inlined1, _1_inlined1) in let _1 = -# 2704 "parsing/parser.mly" +# 2784 "parsing/parser.mly" (Lident "()") -# 39566 "parsing/parser.ml" +# 40486 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39575 "parsing/parser.ml" +# 40495 "parsing/parser.ml" in let _endpos__3_ = _endpos__2_inlined1_ in @@ -39580,18 +40500,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39586 "parsing/parser.ml" +# 40506 "parsing/parser.ml" in let _endpos = _endpos__3_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2705 "parsing/parser.mly" +# 2785 "parsing/parser.mly" ( Ppat_open(_1, mkpat ~loc:_sloc (Ppat_construct(_3, None))) ) -# 39595 "parsing/parser.ml" +# 40515 "parsing/parser.ml" in let _endpos__1_ = _endpos__2_inlined1_ in @@ -39599,15 +40519,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39605 "parsing/parser.ml" +# 40525 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39611 "parsing/parser.ml" +# 40531 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39664,15 +40584,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 39670 "parsing/parser.ml" +# 40590 "parsing/parser.ml" in -# 2707 "parsing/parser.mly" +# 2787 "parsing/parser.mly" ( Ppat_open (_1, _4) ) -# 39676 "parsing/parser.ml" +# 40596 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39680,15 +40600,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39686 "parsing/parser.ml" +# 40606 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39692 "parsing/parser.ml" +# 40612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39743,9 +40663,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 2709 "parsing/parser.mly" +# 2789 "parsing/parser.mly" ( unclosed "(" _loc__3_ ")" _loc__5_ ) -# 39749 "parsing/parser.ml" +# 40669 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -39753,15 +40673,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39759 "parsing/parser.ml" +# 40679 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39765 "parsing/parser.ml" +# 40685 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39808,9 +40728,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2711 "parsing/parser.mly" +# 2791 "parsing/parser.mly" ( expecting _loc__4_ "pattern" ) -# 39814 "parsing/parser.ml" +# 40734 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -39818,15 +40738,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39824 "parsing/parser.ml" +# 40744 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39830 "parsing/parser.ml" +# 40750 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39867,9 +40787,9 @@ module Tables = struct let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2713 "parsing/parser.mly" +# 2793 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 39873 "parsing/parser.ml" +# 40793 "parsing/parser.ml" in let _endpos__1_ = _endpos__3_ in @@ -39877,15 +40797,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39883 "parsing/parser.ml" +# 40803 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39889 "parsing/parser.ml" +# 40809 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -39937,24 +40857,24 @@ module Tables = struct let _endpos = _endpos__5_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2715 "parsing/parser.mly" +# 2795 "parsing/parser.mly" ( Ppat_constraint(_2, _4) ) -# 39943 "parsing/parser.ml" +# 40863 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 39952 "parsing/parser.ml" +# 40872 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 39958 "parsing/parser.ml" +# 40878 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40009,9 +40929,9 @@ module Tables = struct let _loc__5_ = (_startpos__5_, _endpos__5_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2717 "parsing/parser.mly" +# 2797 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__5_ ) -# 40015 "parsing/parser.ml" +# 40935 "parsing/parser.ml" in let _endpos__1_ = _endpos__5_ in @@ -40019,15 +40939,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40025 "parsing/parser.ml" +# 40945 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 40031 "parsing/parser.ml" +# 40951 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40074,9 +40994,9 @@ module Tables = struct let _1 = let _loc__4_ = (_startpos__4_, _endpos__4_) in -# 2719 "parsing/parser.mly" +# 2799 "parsing/parser.mly" ( expecting _loc__4_ "type" ) -# 40080 "parsing/parser.ml" +# 41000 "parsing/parser.ml" in let _endpos__1_ = _endpos__4_ in @@ -40084,15 +41004,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40090 "parsing/parser.ml" +# 41010 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 40096 "parsing/parser.ml" +# 41016 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40171,11 +41091,11 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3335 "parsing/parser.mly" +# 3419 "parsing/parser.mly" ( let (lid, cstrs, attrs) = package_type_of_module_type _1 in let descr = Ptyp_package (lid, cstrs) in mktyp ~loc:_sloc ~attrs descr ) -# 40179 "parsing/parser.ml" +# 41099 "parsing/parser.ml" in let _3 = @@ -40183,23 +41103,23 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 40189 "parsing/parser.ml" +# 41109 "parsing/parser.ml" in -# 3758 "parsing/parser.mly" +# 3848 "parsing/parser.mly" ( _1, _2 ) -# 40195 "parsing/parser.ml" +# 41115 "parsing/parser.ml" in let _loc__7_ = (_startpos__7_, _endpos__7_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2722 "parsing/parser.mly" +# 2802 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__7_ ) -# 40203 "parsing/parser.ml" +# 41123 "parsing/parser.ml" in let _endpos__1_ = _endpos__7_ in @@ -40207,15 +41127,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40213 "parsing/parser.ml" +# 41133 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 40219 "parsing/parser.ml" +# 41139 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40239,23 +41159,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.pattern) = let _1 = let _1 = -# 2724 "parsing/parser.mly" +# 2804 "parsing/parser.mly" ( Ppat_extension _1 ) -# 40245 "parsing/parser.ml" +# 41165 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 852 "parsing/parser.mly" +# 918 "parsing/parser.mly" ( mkpat ~loc:_sloc _1 ) -# 40253 "parsing/parser.ml" +# 41173 "parsing/parser.ml" in -# 2685 "parsing/parser.mly" +# 2765 "parsing/parser.mly" ( _1 ) -# 40259 "parsing/parser.ml" +# 41179 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40274,17 +41194,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 40280 "parsing/parser.ml" +# 41200 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3668 "parsing/parser.mly" +# 3756 "parsing/parser.mly" ( _1 ) -# 40288 "parsing/parser.ml" +# 41208 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40303,17 +41223,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 701 "parsing/parser.mly" +# 756 "parsing/parser.mly" (string) -# 40309 "parsing/parser.ml" +# 41229 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3669 "parsing/parser.mly" +# 3757 "parsing/parser.mly" ( _1 ) -# 40317 "parsing/parser.ml" +# 41237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40336,9 +41256,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3670 "parsing/parser.mly" +# 3758 "parsing/parser.mly" ( "and" ) -# 40342 "parsing/parser.ml" +# 41262 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40361,9 +41281,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3671 "parsing/parser.mly" +# 3759 "parsing/parser.mly" ( "as" ) -# 40367 "parsing/parser.ml" +# 41287 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40386,9 +41306,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3672 "parsing/parser.mly" +# 3760 "parsing/parser.mly" ( "assert" ) -# 40392 "parsing/parser.ml" +# 41312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40411,9 +41331,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3673 "parsing/parser.mly" +# 3761 "parsing/parser.mly" ( "begin" ) -# 40417 "parsing/parser.ml" +# 41337 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40436,9 +41356,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3674 "parsing/parser.mly" +# 3762 "parsing/parser.mly" ( "class" ) -# 40442 "parsing/parser.ml" +# 41362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40461,9 +41381,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3675 "parsing/parser.mly" +# 3763 "parsing/parser.mly" ( "constraint" ) -# 40467 "parsing/parser.ml" +# 41387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40486,9 +41406,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3676 "parsing/parser.mly" +# 3764 "parsing/parser.mly" ( "do" ) -# 40492 "parsing/parser.ml" +# 41412 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40511,9 +41431,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3677 "parsing/parser.mly" +# 3765 "parsing/parser.mly" ( "done" ) -# 40517 "parsing/parser.ml" +# 41437 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40536,9 +41456,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3678 "parsing/parser.mly" +# 3766 "parsing/parser.mly" ( "downto" ) -# 40542 "parsing/parser.ml" +# 41462 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40561,9 +41481,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3679 "parsing/parser.mly" +# 3767 "parsing/parser.mly" ( "else" ) -# 40567 "parsing/parser.ml" +# 41487 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40586,9 +41506,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3680 "parsing/parser.mly" +# 3768 "parsing/parser.mly" ( "end" ) -# 40592 "parsing/parser.ml" +# 41512 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40611,9 +41531,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3681 "parsing/parser.mly" +# 3769 "parsing/parser.mly" ( "exception" ) -# 40617 "parsing/parser.ml" +# 41537 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40636,9 +41556,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3682 "parsing/parser.mly" +# 3770 "parsing/parser.mly" ( "external" ) -# 40642 "parsing/parser.ml" +# 41562 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40661,9 +41581,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3683 "parsing/parser.mly" +# 3771 "parsing/parser.mly" ( "false" ) -# 40667 "parsing/parser.ml" +# 41587 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40686,9 +41606,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3684 "parsing/parser.mly" +# 3772 "parsing/parser.mly" ( "for" ) -# 40692 "parsing/parser.ml" +# 41612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40711,9 +41631,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3685 "parsing/parser.mly" +# 3773 "parsing/parser.mly" ( "fun" ) -# 40717 "parsing/parser.ml" +# 41637 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40736,9 +41656,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3686 "parsing/parser.mly" +# 3774 "parsing/parser.mly" ( "function" ) -# 40742 "parsing/parser.ml" +# 41662 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40761,9 +41681,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3687 "parsing/parser.mly" +# 3775 "parsing/parser.mly" ( "functor" ) -# 40767 "parsing/parser.ml" +# 41687 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40786,9 +41706,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3688 "parsing/parser.mly" +# 3776 "parsing/parser.mly" ( "if" ) -# 40792 "parsing/parser.ml" +# 41712 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40811,9 +41731,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3689 "parsing/parser.mly" +# 3777 "parsing/parser.mly" ( "in" ) -# 40817 "parsing/parser.ml" +# 41737 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40836,9 +41756,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3690 "parsing/parser.mly" +# 3778 "parsing/parser.mly" ( "include" ) -# 40842 "parsing/parser.ml" +# 41762 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40861,9 +41781,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3691 "parsing/parser.mly" +# 3779 "parsing/parser.mly" ( "inherit" ) -# 40867 "parsing/parser.ml" +# 41787 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40886,9 +41806,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3692 "parsing/parser.mly" +# 3780 "parsing/parser.mly" ( "initializer" ) -# 40892 "parsing/parser.ml" +# 41812 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40911,9 +41831,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3693 "parsing/parser.mly" +# 3781 "parsing/parser.mly" ( "lazy" ) -# 40917 "parsing/parser.ml" +# 41837 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40936,9 +41856,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3694 "parsing/parser.mly" +# 3782 "parsing/parser.mly" ( "let" ) -# 40942 "parsing/parser.ml" +# 41862 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40961,9 +41881,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3695 "parsing/parser.mly" +# 3783 "parsing/parser.mly" ( "match" ) -# 40967 "parsing/parser.ml" +# 41887 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -40986,9 +41906,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3696 "parsing/parser.mly" +# 3784 "parsing/parser.mly" ( "method" ) -# 40992 "parsing/parser.ml" +# 41912 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41011,9 +41931,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3697 "parsing/parser.mly" +# 3785 "parsing/parser.mly" ( "module" ) -# 41017 "parsing/parser.ml" +# 41937 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41036,9 +41956,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3698 "parsing/parser.mly" +# 3786 "parsing/parser.mly" ( "mutable" ) -# 41042 "parsing/parser.ml" +# 41962 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41061,9 +41981,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3699 "parsing/parser.mly" +# 3787 "parsing/parser.mly" ( "new" ) -# 41067 "parsing/parser.ml" +# 41987 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41086,9 +42006,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3700 "parsing/parser.mly" +# 3788 "parsing/parser.mly" ( "nonrec" ) -# 41092 "parsing/parser.ml" +# 42012 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41111,9 +42031,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3701 "parsing/parser.mly" +# 3789 "parsing/parser.mly" ( "object" ) -# 41117 "parsing/parser.ml" +# 42037 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41136,9 +42056,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3702 "parsing/parser.mly" +# 3790 "parsing/parser.mly" ( "of" ) -# 41142 "parsing/parser.ml" +# 42062 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41161,9 +42081,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3703 "parsing/parser.mly" +# 3791 "parsing/parser.mly" ( "open" ) -# 41167 "parsing/parser.ml" +# 42087 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41186,9 +42106,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3704 "parsing/parser.mly" +# 3792 "parsing/parser.mly" ( "or" ) -# 41192 "parsing/parser.ml" +# 42112 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41211,9 +42131,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3705 "parsing/parser.mly" +# 3793 "parsing/parser.mly" ( "private" ) -# 41217 "parsing/parser.ml" +# 42137 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41236,9 +42156,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3706 "parsing/parser.mly" +# 3794 "parsing/parser.mly" ( "rec" ) -# 41242 "parsing/parser.ml" +# 42162 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41261,9 +42181,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3707 "parsing/parser.mly" +# 3795 "parsing/parser.mly" ( "sig" ) -# 41267 "parsing/parser.ml" +# 42187 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41286,9 +42206,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3708 "parsing/parser.mly" +# 3796 "parsing/parser.mly" ( "struct" ) -# 41292 "parsing/parser.ml" +# 42212 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41311,9 +42231,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3709 "parsing/parser.mly" +# 3797 "parsing/parser.mly" ( "then" ) -# 41317 "parsing/parser.ml" +# 42237 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41336,9 +42256,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3710 "parsing/parser.mly" +# 3798 "parsing/parser.mly" ( "to" ) -# 41342 "parsing/parser.ml" +# 42262 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41361,9 +42281,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3711 "parsing/parser.mly" +# 3799 "parsing/parser.mly" ( "true" ) -# 41367 "parsing/parser.ml" +# 42287 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41386,9 +42306,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3712 "parsing/parser.mly" +# 3800 "parsing/parser.mly" ( "try" ) -# 41392 "parsing/parser.ml" +# 42312 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41411,9 +42331,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3713 "parsing/parser.mly" +# 3801 "parsing/parser.mly" ( "type" ) -# 41417 "parsing/parser.ml" +# 42337 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41436,9 +42356,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3714 "parsing/parser.mly" +# 3802 "parsing/parser.mly" ( "val" ) -# 41442 "parsing/parser.ml" +# 42362 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41461,9 +42381,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3715 "parsing/parser.mly" +# 3803 "parsing/parser.mly" ( "virtual" ) -# 41467 "parsing/parser.ml" +# 42387 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41486,9 +42406,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3716 "parsing/parser.mly" +# 3804 "parsing/parser.mly" ( "when" ) -# 41492 "parsing/parser.ml" +# 42412 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41511,9 +42431,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3717 "parsing/parser.mly" +# 3805 "parsing/parser.mly" ( "while" ) -# 41517 "parsing/parser.ml" +# 42437 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41536,9 +42456,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3718 "parsing/parser.mly" +# 3806 "parsing/parser.mly" ( "with" ) -# 41542 "parsing/parser.ml" +# 42462 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41561,9 +42481,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Parsetree.type_exception * string Asttypes.loc option) = -# 3003 "parsing/parser.mly" +# 3083 "parsing/parser.mly" ( _1 ) -# 41567 "parsing/parser.ml" +# 42487 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41637,18 +42557,18 @@ module Tables = struct let _v : (Parsetree.type_exception * string Asttypes.loc option) = let attrs = let _1 = _1_inlined5 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 41643 "parsing/parser.ml" +# 42563 "parsing/parser.ml" in let _endpos_attrs_ = _endpos__1_inlined5_ in let attrs2 = let _1 = _1_inlined4 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 41652 "parsing/parser.ml" +# 42572 "parsing/parser.ml" in let lid = @@ -41657,9 +42577,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41663 "parsing/parser.ml" +# 42583 "parsing/parser.ml" in let id = @@ -41668,30 +42588,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 41674 "parsing/parser.ml" +# 42594 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 41682 "parsing/parser.ml" +# 42602 "parsing/parser.ml" in let _endpos = _endpos_attrs_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3012 "parsing/parser.mly" +# 3092 "parsing/parser.mly" ( let loc = make_loc _sloc in let docs = symbol_docs _sloc in Te.mk_exception ~attrs (Te.rebind id lid ~attrs:(attrs1 @ attrs2) ~loc ~docs) , ext ) -# 41695 "parsing/parser.ml" +# 42615 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41721,9 +42641,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.expression) = -# 2513 "parsing/parser.mly" +# 2590 "parsing/parser.mly" ( _2 ) -# 41727 "parsing/parser.ml" +# 42647 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41756,9 +42676,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2515 "parsing/parser.mly" +# 2592 "parsing/parser.mly" ( let (l, o, p) = _1 in ghexp ~loc:_sloc (Pexp_fun(l, o, p, _2)) ) -# 41762 "parsing/parser.ml" +# 42682 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41809,17 +42729,17 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__5_ in let _v : (Parsetree.expression) = let _3 = -# 2416 "parsing/parser.mly" +# 2478 "parsing/parser.mly" ( xs ) -# 41815 "parsing/parser.ml" +# 42735 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2517 "parsing/parser.mly" +# 2594 "parsing/parser.mly" ( mk_newtypes ~loc:_sloc _3 _5 ) -# 41823 "parsing/parser.ml" +# 42743 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41846,39 +42766,39 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 41850 "parsing/parser.ml" +# 42770 "parsing/parser.ml" in let xs = let items = -# 887 "parsing/parser.mly" +# 953 "parsing/parser.mly" ( [] ) -# 41856 "parsing/parser.ml" +# 42776 "parsing/parser.ml" in -# 1301 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( items ) -# 41861 "parsing/parser.ml" +# 42781 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 41867 "parsing/parser.ml" +# 42787 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 809 "parsing/parser.mly" +# 875 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 41876 "parsing/parser.ml" +# 42796 "parsing/parser.ml" in -# 1294 "parsing/parser.mly" +# 1365 "parsing/parser.mly" ( _1 ) -# 41882 "parsing/parser.ml" +# 42802 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -41919,7 +42839,7 @@ module Tables = struct let ys = # 260 "" ( List.flatten xss ) -# 41923 "parsing/parser.ml" +# 42843 "parsing/parser.ml" in let xs = let items = @@ -41927,65 +42847,65 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 41933 "parsing/parser.ml" +# 42853 "parsing/parser.ml" in -# 1308 "parsing/parser.mly" +# 1379 "parsing/parser.mly" ( mkstrexp e attrs ) -# 41938 "parsing/parser.ml" +# 42858 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 821 "parsing/parser.mly" +# 887 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 41946 "parsing/parser.ml" +# 42866 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 840 "parsing/parser.mly" +# 906 "parsing/parser.mly" ( mark_rhs_docs _startpos _endpos; _1 ) -# 41956 "parsing/parser.ml" +# 42876 "parsing/parser.ml" in -# 889 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( x ) -# 41962 "parsing/parser.ml" +# 42882 "parsing/parser.ml" in -# 1301 "parsing/parser.mly" +# 1372 "parsing/parser.mly" ( items ) -# 41968 "parsing/parser.ml" +# 42888 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 41974 "parsing/parser.ml" +# 42894 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 809 "parsing/parser.mly" +# 875 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 41983 "parsing/parser.ml" +# 42903 "parsing/parser.ml" in -# 1294 "parsing/parser.mly" +# 1365 "parsing/parser.mly" ( _1 ) -# 41989 "parsing/parser.ml" +# 42909 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42011,9 +42931,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1323 "parsing/parser.mly" +# 1394 "parsing/parser.mly" ( val_of_let_bindings ~loc:_sloc _1 ) -# 42017 "parsing/parser.ml" +# 42937 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42047,9 +42967,9 @@ module Tables = struct let _2 = let _1 = _1_inlined1 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 42053 "parsing/parser.ml" +# 42973 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -42057,10 +42977,10 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1326 "parsing/parser.mly" +# 1397 "parsing/parser.mly" ( let docs = symbol_docs _sloc in Pstr_extension (_1, add_docs_attrs docs _2) ) -# 42064 "parsing/parser.ml" +# 42984 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined1_ in @@ -42068,15 +42988,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 856 "parsing/parser.mly" +# 922 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 42074 "parsing/parser.ml" +# 42994 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42080 "parsing/parser.ml" +# 43000 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42100,23 +43020,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1329 "parsing/parser.mly" +# 1400 "parsing/parser.mly" ( Pstr_attribute _1 ) -# 42106 "parsing/parser.ml" +# 43026 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 856 "parsing/parser.mly" +# 922 "parsing/parser.mly" ( mkstr ~loc:_sloc _1 ) -# 42114 "parsing/parser.ml" +# 43034 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42120 "parsing/parser.ml" +# 43040 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42140,23 +43060,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1333 "parsing/parser.mly" +# 1404 "parsing/parser.mly" ( pstr_primitive _1 ) -# 42146 "parsing/parser.ml" +# 43066 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42154 "parsing/parser.ml" +# 43074 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42160 "parsing/parser.ml" +# 43080 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42180,23 +43100,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1335 "parsing/parser.mly" +# 1406 "parsing/parser.mly" ( pstr_primitive _1 ) -# 42186 "parsing/parser.ml" +# 43106 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42194 "parsing/parser.ml" +# 43114 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42200 "parsing/parser.ml" +# 43120 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42231,26 +43151,26 @@ module Tables = struct let _1 = let _1 = let _1 = -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 42237 "parsing/parser.ml" +# 43157 "parsing/parser.ml" in -# 2847 "parsing/parser.mly" +# 2927 "parsing/parser.mly" ( _1 ) -# 42242 "parsing/parser.ml" +# 43162 "parsing/parser.ml" in -# 2830 "parsing/parser.mly" +# 2910 "parsing/parser.mly" ( _1 ) -# 42248 "parsing/parser.ml" +# 43168 "parsing/parser.ml" in -# 1337 "parsing/parser.mly" +# 1408 "parsing/parser.mly" ( pstr_type _1 ) -# 42254 "parsing/parser.ml" +# 43174 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_bs_, _startpos_a_) in @@ -42258,15 +43178,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42264 "parsing/parser.ml" +# 43184 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42270 "parsing/parser.ml" +# 43190 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42351,16 +43271,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 42357 "parsing/parser.ml" +# 43277 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in let cs = -# 1040 "parsing/parser.mly" +# 1106 "parsing/parser.mly" ( List.rev xs ) -# 42364 "parsing/parser.ml" +# 43284 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in @@ -42368,46 +43288,46 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42374 "parsing/parser.ml" +# 43294 "parsing/parser.ml" in let _4 = -# 3590 "parsing/parser.mly" +# 3676 "parsing/parser.mly" ( Recursive ) -# 42380 "parsing/parser.ml" +# 43300 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 42387 "parsing/parser.ml" +# 43307 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3095 "parsing/parser.mly" +# 3175 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 42399 "parsing/parser.ml" +# 43319 "parsing/parser.ml" in -# 3078 "parsing/parser.mly" +# 3158 "parsing/parser.mly" ( _1 ) -# 42405 "parsing/parser.ml" +# 43325 "parsing/parser.ml" in -# 1339 "parsing/parser.mly" +# 1410 "parsing/parser.mly" ( pstr_typext _1 ) -# 42411 "parsing/parser.ml" +# 43331 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -42415,15 +43335,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42421 "parsing/parser.ml" +# 43341 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42427 "parsing/parser.ml" +# 43347 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42515,16 +43435,16 @@ module Tables = struct let attrs2 = let _1 = _1_inlined4 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 42521 "parsing/parser.ml" +# 43441 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined4_ in let cs = -# 1040 "parsing/parser.mly" +# 1106 "parsing/parser.mly" ( List.rev xs ) -# 42528 "parsing/parser.ml" +# 43448 "parsing/parser.ml" in let tid = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined3_, _startpos__1_inlined3_, _1_inlined3) in @@ -42532,9 +43452,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42538 "parsing/parser.ml" +# 43458 "parsing/parser.ml" in let _4 = @@ -42543,41 +43463,41 @@ module Tables = struct let _startpos = _startpos__1_ in let _loc = (_startpos, _endpos) in -# 3591 "parsing/parser.mly" +# 3678 "parsing/parser.mly" ( not_expecting _loc "nonrec flag" ) -# 42549 "parsing/parser.ml" +# 43469 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 42557 "parsing/parser.ml" +# 43477 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3095 "parsing/parser.mly" +# 3175 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let attrs = attrs1 @ attrs2 in Te.mk tid cs ~params ~priv ~attrs ~docs, ext ) -# 42569 "parsing/parser.ml" +# 43489 "parsing/parser.ml" in -# 3078 "parsing/parser.mly" +# 3158 "parsing/parser.mly" ( _1 ) -# 42575 "parsing/parser.ml" +# 43495 "parsing/parser.ml" in -# 1339 "parsing/parser.mly" +# 1410 "parsing/parser.mly" ( pstr_typext _1 ) -# 42581 "parsing/parser.ml" +# 43501 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined4_ in @@ -42585,15 +43505,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42591 "parsing/parser.ml" +# 43511 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42597 "parsing/parser.ml" +# 43517 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42617,23 +43537,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1341 "parsing/parser.mly" +# 1412 "parsing/parser.mly" ( pstr_exception _1 ) -# 42623 "parsing/parser.ml" +# 43543 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42631 "parsing/parser.ml" +# 43551 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42637 "parsing/parser.ml" +# 43557 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42696,9 +43616,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 42702 "parsing/parser.ml" +# 43622 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -42708,36 +43628,36 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42714 "parsing/parser.ml" +# 43634 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 42722 "parsing/parser.ml" +# 43642 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1367 "parsing/parser.mly" +# 1438 "parsing/parser.mly" ( let docs = symbol_docs _sloc in let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in let body = Mb.mk name body ~attrs ~loc ~docs in Pstr_module body, ext ) -# 42735 "parsing/parser.ml" +# 43655 "parsing/parser.ml" in -# 1343 "parsing/parser.mly" +# 1414 "parsing/parser.mly" ( _1 ) -# 42741 "parsing/parser.ml" +# 43661 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined3_ in @@ -42745,15 +43665,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42751 "parsing/parser.ml" +# 43671 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42757 "parsing/parser.ml" +# 43677 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42832,9 +43752,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 42838 "parsing/parser.ml" +# 43758 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -42844,24 +43764,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 42850 "parsing/parser.ml" +# 43770 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 42858 "parsing/parser.ml" +# 43778 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1402 "parsing/parser.mly" +# 1473 "parsing/parser.mly" ( let loc = make_loc _sloc in let attrs = attrs1 @ attrs2 in @@ -42869,25 +43789,25 @@ module Tables = struct ext, Mb.mk name body ~attrs ~loc ~docs ) -# 42873 "parsing/parser.ml" +# 43793 "parsing/parser.ml" in -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 42879 "parsing/parser.ml" +# 43799 "parsing/parser.ml" in -# 1390 "parsing/parser.mly" +# 1461 "parsing/parser.mly" ( _1 ) -# 42885 "parsing/parser.ml" +# 43805 "parsing/parser.ml" in -# 1345 "parsing/parser.mly" +# 1416 "parsing/parser.mly" ( pstr_recmodule _1 ) -# 42891 "parsing/parser.ml" +# 43811 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -42895,15 +43815,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42901 "parsing/parser.ml" +# 43821 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42907 "parsing/parser.ml" +# 43827 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42927,23 +43847,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1347 "parsing/parser.mly" +# 1418 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_modtype body, ext) ) -# 42933 "parsing/parser.ml" +# 43853 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42941 "parsing/parser.ml" +# 43861 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42947 "parsing/parser.ml" +# 43867 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -42967,23 +43887,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1349 "parsing/parser.mly" +# 1420 "parsing/parser.mly" ( let (body, ext) = _1 in (Pstr_open body, ext) ) -# 42973 "parsing/parser.ml" +# 43893 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 42981 "parsing/parser.ml" +# 43901 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 42987 "parsing/parser.ml" +# 43907 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43053,9 +43973,9 @@ module Tables = struct let _1_inlined3 : (Parsetree.attributes) = Obj.magic _1_inlined3 in let body : (Parsetree.class_expr) = Obj.magic body in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 43059 "parsing/parser.ml" +# 43979 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let params : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = Obj.magic params in let virt : (Asttypes.virtual_flag) = Obj.magic virt in @@ -43073,9 +43993,9 @@ module Tables = struct let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 43079 "parsing/parser.ml" +# 43999 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -43085,24 +44005,24 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43091 "parsing/parser.ml" +# 44011 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 43099 "parsing/parser.ml" +# 44019 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1721 "parsing/parser.mly" +# 1811 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in @@ -43110,25 +44030,25 @@ module Tables = struct ext, Ci.mk id body ~virt ~params ~attrs ~loc ~docs ) -# 43114 "parsing/parser.ml" +# 44034 "parsing/parser.ml" in -# 1048 "parsing/parser.mly" +# 1114 "parsing/parser.mly" ( let (x, b) = a in x, b :: bs ) -# 43120 "parsing/parser.ml" +# 44040 "parsing/parser.ml" in -# 1710 "parsing/parser.mly" +# 1800 "parsing/parser.mly" ( _1 ) -# 43126 "parsing/parser.ml" +# 44046 "parsing/parser.ml" in -# 1351 "parsing/parser.mly" +# 1422 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class l, ext) ) -# 43132 "parsing/parser.ml" +# 44052 "parsing/parser.ml" in let _endpos__1_ = _endpos_bs_ in @@ -43136,15 +44056,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43142 "parsing/parser.ml" +# 44062 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 43148 "parsing/parser.ml" +# 44068 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43168,23 +44088,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.structure_item) = let _1 = let _1 = -# 1353 "parsing/parser.mly" +# 1424 "parsing/parser.mly" ( let (ext, l) = _1 in (Pstr_class_type l, ext) ) -# 43174 "parsing/parser.ml" +# 44094 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43182 "parsing/parser.ml" +# 44102 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 43188 "parsing/parser.ml" +# 44108 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43240,38 +44160,38 @@ module Tables = struct let attrs2 = let _1 = _1_inlined2 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 43246 "parsing/parser.ml" +# 44166 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined2_ in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 43255 "parsing/parser.ml" +# 44175 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 1439 "parsing/parser.mly" +# 1510 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Incl.mk thing ~attrs ~loc ~docs, ext ) -# 43269 "parsing/parser.ml" +# 44189 "parsing/parser.ml" in -# 1355 "parsing/parser.mly" +# 1426 "parsing/parser.mly" ( pstr_include _1 ) -# 43275 "parsing/parser.ml" +# 44195 "parsing/parser.ml" in let _endpos__1_ = _endpos__1_inlined2_ in @@ -43279,15 +44199,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 873 "parsing/parser.mly" +# 939 "parsing/parser.mly" ( wrap_mkstr_ext ~loc:_sloc _1 ) -# 43285 "parsing/parser.ml" +# 44205 "parsing/parser.ml" in -# 1357 "parsing/parser.mly" +# 1428 "parsing/parser.mly" ( _1 ) -# 43291 "parsing/parser.ml" +# 44211 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43310,9 +44230,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3653 "parsing/parser.mly" +# 3741 "parsing/parser.mly" ( "-" ) -# 43316 "parsing/parser.ml" +# 44236 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43335,9 +44255,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (string) = -# 3654 "parsing/parser.mly" +# 3742 "parsing/parser.mly" ( "-." ) -# 43341 "parsing/parser.ml" +# 44261 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43390,9 +44310,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _5 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 43396 "parsing/parser.ml" +# 44316 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined1_ in @@ -43401,18 +44321,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 43405 "parsing/parser.ml" +# 44325 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 43410 "parsing/parser.ml" +# 44330 "parsing/parser.ml" in -# 3365 "parsing/parser.mly" +# 3449 "parsing/parser.mly" ( _1 ) -# 43416 "parsing/parser.ml" +# 44336 "parsing/parser.ml" in let _1 = @@ -43420,20 +44340,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43426 "parsing/parser.ml" +# 44346 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3351 "parsing/parser.mly" +# 3435 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _5 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 _3 _4 ) -# 43437 "parsing/parser.ml" +# 44357 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43465,9 +44385,9 @@ module Tables = struct let _v : (Parsetree.row_field) = let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 43471 "parsing/parser.ml" +# 44391 "parsing/parser.ml" in let _endpos__2_ = _endpos__1_inlined1_ in @@ -43476,20 +44396,20 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43482 "parsing/parser.ml" +# 44402 "parsing/parser.ml" in let _endpos = _endpos__2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3355 "parsing/parser.mly" +# 3439 "parsing/parser.mly" ( let info = symbol_info _endpos in let attrs = add_info_attrs info _2 in Rf.tag ~loc:(make_loc _sloc) ~attrs _1 true [] ) -# 43493 "parsing/parser.ml" +# 44413 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43521,7 +44441,7 @@ module Tables = struct let _v : (Parsetree.toplevel_phrase) = let arg = # 124 "" ( None ) -# 43525 "parsing/parser.ml" +# 44445 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined1_ in let dir = @@ -43530,18 +44450,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43536 "parsing/parser.ml" +# 44456 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43545 "parsing/parser.ml" +# 44465 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43572,9 +44492,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 689 "parsing/parser.mly" +# 743 "parsing/parser.mly" (string * Location.t * string option) -# 43578 "parsing/parser.ml" +# 44498 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -43585,23 +44505,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3557 "parsing/parser.mly" +# 3643 "parsing/parser.mly" ( let (s, _, _) = _1 in Pdir_string s ) -# 43591 "parsing/parser.ml" +# 44511 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43599 "parsing/parser.ml" +# 44519 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43605 "parsing/parser.ml" +# 44525 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43611,18 +44531,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43617 "parsing/parser.ml" +# 44537 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43626 "parsing/parser.ml" +# 44546 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43653,9 +44573,9 @@ module Tables = struct }; } = _menhir_stack in let _1_inlined2 : ( -# 637 "parsing/parser.mly" +# 691 "parsing/parser.mly" (string * char option) -# 43659 "parsing/parser.ml" +# 44579 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _1_inlined1 : (Asttypes.label) = Obj.magic _1_inlined1 in let _1 : unit = Obj.magic _1 in @@ -43666,23 +44586,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3558 "parsing/parser.mly" +# 3644 "parsing/parser.mly" ( let (n, m) = _1 in Pdir_int (n ,m) ) -# 43672 "parsing/parser.ml" +# 44592 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43680 "parsing/parser.ml" +# 44600 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43686 "parsing/parser.ml" +# 44606 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43692,18 +44612,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43698 "parsing/parser.ml" +# 44618 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43707 "parsing/parser.ml" +# 44627 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43743,23 +44663,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3559 "parsing/parser.mly" +# 3645 "parsing/parser.mly" ( Pdir_ident _1 ) -# 43749 "parsing/parser.ml" +# 44669 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43757 "parsing/parser.ml" +# 44677 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43763 "parsing/parser.ml" +# 44683 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43769,18 +44689,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43775 "parsing/parser.ml" +# 44695 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43784 "parsing/parser.ml" +# 44704 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43820,23 +44740,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3560 "parsing/parser.mly" +# 3646 "parsing/parser.mly" ( Pdir_ident _1 ) -# 43826 "parsing/parser.ml" +# 44746 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43834 "parsing/parser.ml" +# 44754 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43840 "parsing/parser.ml" +# 44760 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43846,18 +44766,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43852 "parsing/parser.ml" +# 44772 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43861 "parsing/parser.ml" +# 44781 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43897,23 +44817,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3561 "parsing/parser.mly" +# 3647 "parsing/parser.mly" ( Pdir_bool false ) -# 43903 "parsing/parser.ml" +# 44823 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43911 "parsing/parser.ml" +# 44831 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43917 "parsing/parser.ml" +# 44837 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -43923,18 +44843,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 43929 "parsing/parser.ml" +# 44849 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 43938 "parsing/parser.ml" +# 44858 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -43974,23 +44894,23 @@ module Tables = struct let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let x = let _1 = -# 3562 "parsing/parser.mly" +# 3648 "parsing/parser.mly" ( Pdir_bool true ) -# 43980 "parsing/parser.ml" +# 44900 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 878 "parsing/parser.mly" +# 944 "parsing/parser.mly" ( mk_directive_arg ~loc:_sloc _1 ) -# 43988 "parsing/parser.ml" +# 44908 "parsing/parser.ml" in # 126 "" ( Some x ) -# 43994 "parsing/parser.ml" +# 44914 "parsing/parser.ml" in let _endpos_arg_ = _endpos__1_inlined2_ in @@ -44000,18 +44920,18 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 44006 "parsing/parser.ml" +# 44926 "parsing/parser.ml" in let _endpos = _endpos_arg_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3553 "parsing/parser.mly" +# 3639 "parsing/parser.mly" ( mk_directive ~loc:_sloc dir arg ) -# 44015 "parsing/parser.ml" +# 44935 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44047,45 +44967,41 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in let _endpos = _endpos__2_ in - let _v : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 44054 "parsing/parser.ml" - ) = let _1 = + let _v : (Parsetree.toplevel_phrase) = let _1 = let _1 = let _1 = let attrs = -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 44061 "parsing/parser.ml" +# 44977 "parsing/parser.ml" in -# 1308 "parsing/parser.mly" +# 1379 "parsing/parser.mly" ( mkstrexp e attrs ) -# 44066 "parsing/parser.ml" +# 44982 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 821 "parsing/parser.mly" +# 887 "parsing/parser.mly" ( text_str _startpos @ [_1] ) -# 44074 "parsing/parser.ml" +# 44990 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 809 "parsing/parser.mly" +# 875 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 44083 "parsing/parser.ml" +# 44999 "parsing/parser.ml" in -# 1086 "parsing/parser.mly" +# 1154 "parsing/parser.mly" ( Ptop_def _1 ) -# 44089 "parsing/parser.ml" +# 45005 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44114,29 +45030,25 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xss_ in let _endpos = _endpos__2_ in - let _v : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 44121 "parsing/parser.ml" - ) = let _1 = + let _v : (Parsetree.toplevel_phrase) = let _1 = let _1 = # 260 "" ( List.flatten xss ) -# 44126 "parsing/parser.ml" +# 45038 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 809 "parsing/parser.mly" +# 875 "parsing/parser.mly" ( extra_str _startpos _endpos _1 ) -# 44134 "parsing/parser.ml" +# 45046 "parsing/parser.ml" in -# 1090 "parsing/parser.mly" +# 1158 "parsing/parser.mly" ( Ptop_def _1 ) -# 44140 "parsing/parser.ml" +# 45052 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44165,14 +45077,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in - let _v : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 44172 "parsing/parser.ml" - ) = -# 1094 "parsing/parser.mly" + let _v : (Parsetree.toplevel_phrase) = +# 1162 "parsing/parser.mly" ( _1 ) -# 44176 "parsing/parser.ml" +# 45084 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44194,14 +45102,10 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in - let _v : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 44201 "parsing/parser.ml" - ) = -# 1097 "parsing/parser.mly" + let _v : (Parsetree.toplevel_phrase) = +# 1165 "parsing/parser.mly" ( raise End_of_file ) -# 44205 "parsing/parser.ml" +# 45109 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44224,9 +45128,9 @@ module Tables = struct let _startpos = _startpos_ty_ in let _endpos = _endpos_ty_ in let _v : (Parsetree.core_type) = -# 3257 "parsing/parser.mly" +# 3341 "parsing/parser.mly" ( ty ) -# 44230 "parsing/parser.ml" +# 45134 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44254,18 +45158,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 44258 "parsing/parser.ml" +# 45162 "parsing/parser.ml" in -# 979 "parsing/parser.mly" +# 1045 "parsing/parser.mly" ( xs ) -# 44263 "parsing/parser.ml" +# 45167 "parsing/parser.ml" in -# 3260 "parsing/parser.mly" +# 3344 "parsing/parser.mly" ( Ptyp_tuple tys ) -# 44269 "parsing/parser.ml" +# 45173 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xs_, _startpos_xs_) in @@ -44273,15 +45177,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 44279 "parsing/parser.ml" +# 45183 "parsing/parser.ml" in -# 3262 "parsing/parser.mly" +# 3346 "parsing/parser.mly" ( _1 ) -# 44285 "parsing/parser.ml" +# 45189 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44311,9 +45215,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2591 "parsing/parser.mly" +# 2668 "parsing/parser.mly" ( (Some _2, None) ) -# 44317 "parsing/parser.ml" +# 45221 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44357,9 +45261,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__4_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2592 "parsing/parser.mly" +# 2669 "parsing/parser.mly" ( (Some _2, Some _4) ) -# 44363 "parsing/parser.ml" +# 45267 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44389,9 +45293,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2593 "parsing/parser.mly" +# 2670 "parsing/parser.mly" ( (None, Some _2) ) -# 44395 "parsing/parser.ml" +# 45299 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44421,9 +45325,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2594 "parsing/parser.mly" +# 2671 "parsing/parser.mly" ( syntax_error() ) -# 44427 "parsing/parser.ml" +# 45331 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44453,9 +45357,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type option * Parsetree.core_type option) = -# 2595 "parsing/parser.mly" +# 2672 "parsing/parser.mly" ( syntax_error() ) -# 44459 "parsing/parser.ml" +# 45363 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44471,9 +45375,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 2921 "parsing/parser.mly" +# 3001 "parsing/parser.mly" ( (Ptype_abstract, Public, None) ) -# 44477 "parsing/parser.ml" +# 45381 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44503,9 +45407,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.type_kind * Asttypes.private_flag * Parsetree.core_type option) = -# 2923 "parsing/parser.mly" +# 3003 "parsing/parser.mly" ( _2 ) -# 44509 "parsing/parser.ml" +# 45413 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44528,9 +45432,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3516 "parsing/parser.mly" +# 3600 "parsing/parser.mly" ( _1 ) -# 44534 "parsing/parser.ml" +# 45438 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44560,9 +45464,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) = -# 2938 "parsing/parser.mly" +# 3018 "parsing/parser.mly" ( _2, _1 ) -# 44566 "parsing/parser.ml" +# 45470 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44578,9 +45482,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 2931 "parsing/parser.mly" +# 3011 "parsing/parser.mly" ( [] ) -# 44584 "parsing/parser.ml" +# 45488 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44603,9 +45507,9 @@ module Tables = struct let _startpos = _startpos_p_ in let _endpos = _endpos_p_ in let _v : ((Parsetree.core_type * (Asttypes.variance * Asttypes.injectivity)) list) = -# 2933 "parsing/parser.mly" +# 3013 "parsing/parser.mly" ( [p] ) -# 44609 "parsing/parser.ml" +# 45513 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44645,18 +45549,18 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 44649 "parsing/parser.ml" +# 45553 "parsing/parser.ml" in -# 951 "parsing/parser.mly" +# 1017 "parsing/parser.mly" ( xs ) -# 44654 "parsing/parser.ml" +# 45558 "parsing/parser.ml" in -# 2935 "parsing/parser.mly" +# 3015 "parsing/parser.mly" ( ps ) -# 44660 "parsing/parser.ml" +# 45564 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44687,24 +45591,24 @@ module Tables = struct let _endpos = _endpos_tyvar_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 2943 "parsing/parser.mly" +# 3023 "parsing/parser.mly" ( Ptyp_var tyvar ) -# 44693 "parsing/parser.ml" +# 45597 "parsing/parser.ml" in let _endpos__1_ = _endpos_tyvar_ in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 44702 "parsing/parser.ml" +# 45606 "parsing/parser.ml" in -# 2946 "parsing/parser.mly" +# 3026 "parsing/parser.mly" ( _1 ) -# 44708 "parsing/parser.ml" +# 45612 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44728,23 +45632,23 @@ module Tables = struct let _endpos = _endpos__1_ in let _v : (Parsetree.core_type) = let _1 = let _1 = -# 2945 "parsing/parser.mly" +# 3025 "parsing/parser.mly" ( Ptyp_any ) -# 44734 "parsing/parser.ml" +# 45638 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 854 "parsing/parser.mly" +# 920 "parsing/parser.mly" ( mktyp ~loc:_sloc _1 ) -# 44742 "parsing/parser.ml" +# 45646 "parsing/parser.ml" in -# 2946 "parsing/parser.mly" +# 3026 "parsing/parser.mly" ( _1 ) -# 44748 "parsing/parser.ml" +# 45652 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44760,9 +45664,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2950 "parsing/parser.mly" +# 3030 "parsing/parser.mly" ( NoVariance, NoInjectivity ) -# 44766 "parsing/parser.ml" +# 45670 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44785,9 +45689,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2951 "parsing/parser.mly" +# 3031 "parsing/parser.mly" ( Covariant, NoInjectivity ) -# 44791 "parsing/parser.ml" +# 45695 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44810,9 +45714,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2952 "parsing/parser.mly" +# 3032 "parsing/parser.mly" ( Contravariant, NoInjectivity ) -# 44816 "parsing/parser.ml" +# 45720 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44835,9 +45739,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2953 "parsing/parser.mly" +# 3033 "parsing/parser.mly" ( NoVariance, Injective ) -# 44841 "parsing/parser.ml" +# 45745 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44867,9 +45771,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2954 "parsing/parser.mly" +# 3034 "parsing/parser.mly" ( Covariant, Injective ) -# 44873 "parsing/parser.ml" +# 45777 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44899,9 +45803,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2954 "parsing/parser.mly" +# 3034 "parsing/parser.mly" ( Covariant, Injective ) -# 44905 "parsing/parser.ml" +# 45809 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44931,9 +45835,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2955 "parsing/parser.mly" +# 3035 "parsing/parser.mly" ( Contravariant, Injective ) -# 44937 "parsing/parser.ml" +# 45841 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44963,9 +45867,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.variance * Asttypes.injectivity) = -# 2955 "parsing/parser.mly" +# 3035 "parsing/parser.mly" ( Contravariant, Injective ) -# 44969 "parsing/parser.ml" +# 45873 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -44984,20 +45888,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 629 "parsing/parser.mly" +# 683 "parsing/parser.mly" (string) -# 44990 "parsing/parser.ml" +# 45894 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2957 "parsing/parser.mly" +# 3037 "parsing/parser.mly" ( if _1 = "+!" then Covariant, Injective else if _1 = "-!" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 45001 "parsing/parser.ml" +# 45905 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45016,20 +45920,20 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 675 "parsing/parser.mly" +# 729 "parsing/parser.mly" (string) -# 45022 "parsing/parser.ml" +# 45926 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.variance * Asttypes.injectivity) = let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 2961 "parsing/parser.mly" +# 3041 "parsing/parser.mly" ( if _1 = "!+" then Covariant, Injective else if _1 = "!-" then Contravariant, Injective else expecting _loc__1_ "type_variance" ) -# 45033 "parsing/parser.ml" +# 45937 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45058,48 +45962,44 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_xss_ in let _endpos = _endpos__2_ in - let _v : ( -# 787 "parsing/parser.mly" - (Parsetree.toplevel_phrase list) -# 45065 "parsing/parser.ml" - ) = let _1 = + let _v : (Parsetree.toplevel_phrase list) = let _1 = let _1 = let ys = # 260 "" ( List.flatten xss ) -# 45071 "parsing/parser.ml" +# 45971 "parsing/parser.ml" in let xs = let _1 = -# 887 "parsing/parser.mly" +# 953 "parsing/parser.mly" ( [] ) -# 45077 "parsing/parser.ml" +# 45977 "parsing/parser.ml" in -# 1117 "parsing/parser.mly" +# 1185 "parsing/parser.mly" ( _1 ) -# 45082 "parsing/parser.ml" +# 45982 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 45088 "parsing/parser.ml" +# 45988 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_xss_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 813 "parsing/parser.mly" +# 879 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 45097 "parsing/parser.ml" +# 45997 "parsing/parser.ml" in -# 1110 "parsing/parser.mly" +# 1178 "parsing/parser.mly" ( _1 ) -# 45103 "parsing/parser.ml" +# 46003 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45142,16 +46042,12 @@ module Tables = struct let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos_e_ in let _endpos = _endpos__2_ in - let _v : ( -# 787 "parsing/parser.mly" - (Parsetree.toplevel_phrase list) -# 45149 "parsing/parser.ml" - ) = let _1 = + let _v : (Parsetree.toplevel_phrase list) = let _1 = let _1 = let ys = # 260 "" ( List.flatten xss ) -# 45155 "parsing/parser.ml" +# 46051 "parsing/parser.ml" in let xs = let _1 = @@ -45159,61 +46055,61 @@ module Tables = struct let _1 = let _1 = let attrs = -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 45165 "parsing/parser.ml" +# 46061 "parsing/parser.ml" in -# 1308 "parsing/parser.mly" +# 1379 "parsing/parser.mly" ( mkstrexp e attrs ) -# 45170 "parsing/parser.ml" +# 46066 "parsing/parser.ml" in -# 831 "parsing/parser.mly" +# 897 "parsing/parser.mly" ( Ptop_def [_1] ) -# 45176 "parsing/parser.ml" +# 46072 "parsing/parser.ml" in let _startpos__1_ = _startpos_e_ in let _startpos = _startpos__1_ in -# 829 "parsing/parser.mly" +# 895 "parsing/parser.mly" ( text_def _startpos @ [_1] ) -# 45184 "parsing/parser.ml" +# 46080 "parsing/parser.ml" in -# 889 "parsing/parser.mly" +# 955 "parsing/parser.mly" ( x ) -# 45190 "parsing/parser.ml" +# 46086 "parsing/parser.ml" in -# 1117 "parsing/parser.mly" +# 1185 "parsing/parser.mly" ( _1 ) -# 45196 "parsing/parser.ml" +# 46092 "parsing/parser.ml" in # 267 "" ( xs @ ys ) -# 45202 "parsing/parser.ml" +# 46098 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos_xss_, _startpos_e_) in let _endpos = _endpos__1_ in let _startpos = _startpos__1_ in -# 813 "parsing/parser.mly" +# 879 "parsing/parser.mly" ( extra_def _startpos _endpos _1 ) -# 45211 "parsing/parser.ml" +# 46107 "parsing/parser.ml" in -# 1110 "parsing/parser.mly" +# 1178 "parsing/parser.mly" ( _1 ) -# 45217 "parsing/parser.ml" +# 46113 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45250,9 +46146,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__3_ in let _v : (Asttypes.label) = -# 3435 "parsing/parser.mly" +# 3519 "parsing/parser.mly" ( _2 ) -# 45256 "parsing/parser.ml" +# 46152 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45291,9 +46187,9 @@ module Tables = struct let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in let _loc__1_ = (_startpos__1_, _endpos__1_) in -# 3436 "parsing/parser.mly" +# 3520 "parsing/parser.mly" ( unclosed "(" _loc__1_ ")" _loc__3_ ) -# 45297 "parsing/parser.ml" +# 46193 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45324,9 +46220,9 @@ module Tables = struct let _endpos = _endpos__2_ in let _v : (Asttypes.label) = let _loc__2_ = (_startpos__2_, _endpos__2_) in -# 3437 "parsing/parser.mly" +# 3521 "parsing/parser.mly" ( expecting _loc__2_ "operator" ) -# 45330 "parsing/parser.ml" +# 46226 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45364,9 +46260,9 @@ module Tables = struct let _endpos = _endpos__3_ in let _v : (Asttypes.label) = let _loc__3_ = (_startpos__3_, _endpos__3_) in -# 3438 "parsing/parser.mly" +# 3522 "parsing/parser.mly" ( expecting _loc__3_ "module-expr" ) -# 45370 "parsing/parser.ml" +# 46266 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45385,17 +46281,17 @@ module Tables = struct MenhirLib.EngineTypes.next = _menhir_stack; } = _menhir_stack in let _1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45391 "parsing/parser.ml" +# 46287 "parsing/parser.ml" ) = Obj.magic _1 in let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3441 "parsing/parser.mly" +# 3525 "parsing/parser.mly" ( _1 ) -# 45399 "parsing/parser.ml" +# 46295 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45418,9 +46314,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.label) = -# 3442 "parsing/parser.mly" +# 3526 "parsing/parser.mly" ( _1 ) -# 45424 "parsing/parser.ml" +# 46320 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45443,9 +46339,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Longident.t) = -# 3510 "parsing/parser.mly" +# 3594 "parsing/parser.mly" ( _1 ) -# 45449 "parsing/parser.ml" +# 46345 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45490,9 +46386,9 @@ module Tables = struct let ty : (Parsetree.core_type) = Obj.magic ty in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45496 "parsing/parser.ml" +# 46392 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let mutable_ : (Asttypes.mutable_flag) = Obj.magic mutable_ in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -45504,33 +46400,33 @@ module Tables = struct Parsetree.attributes) = let label = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 45510 "parsing/parser.ml" +# 46406 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45518 "parsing/parser.ml" +# 46414 "parsing/parser.ml" in let attrs = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 45524 "parsing/parser.ml" +# 46420 "parsing/parser.ml" in let _1 = -# 3646 "parsing/parser.mly" +# 3734 "parsing/parser.mly" ( Fresh ) -# 45529 "parsing/parser.ml" +# 46425 "parsing/parser.ml" in -# 1861 "parsing/parser.mly" +# 1951 "parsing/parser.mly" ( (label, mutable_, Cfk_virtual ty), attrs ) -# 45534 "parsing/parser.ml" +# 46430 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45575,9 +46471,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45581 "parsing/parser.ml" +# 46477 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -45589,33 +46485,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 45595 "parsing/parser.ml" +# 46491 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45603 "parsing/parser.ml" +# 46499 "parsing/parser.ml" in let _2 = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 45609 "parsing/parser.ml" +# 46505 "parsing/parser.ml" in let _1 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 45614 "parsing/parser.ml" +# 46510 "parsing/parser.ml" in -# 1863 "parsing/parser.mly" +# 1953 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 45619 "parsing/parser.ml" +# 46515 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45666,9 +46562,9 @@ module Tables = struct let _6 : (Parsetree.expression) = Obj.magic _6 in let _5 : unit = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45672 "parsing/parser.ml" +# 46568 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -45681,36 +46577,36 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 45687 "parsing/parser.ml" +# 46583 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45695 "parsing/parser.ml" +# 46591 "parsing/parser.ml" in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 45703 "parsing/parser.ml" +# 46599 "parsing/parser.ml" in let _1 = -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 45709 "parsing/parser.ml" +# 46605 "parsing/parser.ml" in -# 1863 "parsing/parser.mly" +# 1953 "parsing/parser.mly" ( (_4, _3, Cfk_concrete (_1, _6)), _2 ) -# 45714 "parsing/parser.ml" +# 46610 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45762,9 +46658,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in let _1_inlined1 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45768 "parsing/parser.ml" +# 46664 "parsing/parser.ml" ) = Obj.magic _1_inlined1 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1 : (Parsetree.attributes) = Obj.magic _1 in @@ -45776,30 +46672,30 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 45782 "parsing/parser.ml" +# 46678 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45790 "parsing/parser.ml" +# 46686 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined1_ in let _2 = -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 45797 "parsing/parser.ml" +# 46693 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_, _startpos__1_) in let _1 = -# 3649 "parsing/parser.mly" +# 3737 "parsing/parser.mly" ( Fresh ) -# 45803 "parsing/parser.ml" +# 46699 "parsing/parser.ml" in let (_endpos__1_, _startpos__1_) = (_endpos__0_, _endpos__0_) in let _endpos = _endpos__7_ in @@ -45815,11 +46711,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1866 "parsing/parser.mly" +# 1956 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 45823 "parsing/parser.ml" +# 46719 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -45877,9 +46773,9 @@ module Tables = struct let _6 : unit = Obj.magic _6 in let _5 : (Parsetree.core_type option * Parsetree.core_type option) = Obj.magic _5 in let _1_inlined2 : ( -# 651 "parsing/parser.mly" +# 705 "parsing/parser.mly" (string) -# 45883 "parsing/parser.ml" +# 46779 "parsing/parser.ml" ) = Obj.magic _1_inlined2 in let _3 : (Asttypes.mutable_flag) = Obj.magic _3 in let _1_inlined1 : (Parsetree.attributes) = Obj.magic _1_inlined1 in @@ -45892,33 +46788,33 @@ module Tables = struct Parsetree.attributes) = let _4 = let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined2_, _startpos__1_inlined2_, _1_inlined2) in let _1 = -# 3409 "parsing/parser.mly" +# 3493 "parsing/parser.mly" ( _1 ) -# 45898 "parsing/parser.ml" +# 46794 "parsing/parser.ml" in let _endpos = _endpos__1_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 45906 "parsing/parser.ml" +# 46802 "parsing/parser.ml" in let _startpos__4_ = _startpos__1_inlined2_ in let _2 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 45915 "parsing/parser.ml" +# 46811 "parsing/parser.ml" in let (_endpos__2_, _startpos__2_) = (_endpos__1_inlined1_, _startpos__1_inlined1_) in let _1 = -# 3650 "parsing/parser.mly" +# 3738 "parsing/parser.mly" ( Override ) -# 45922 "parsing/parser.ml" +# 46818 "parsing/parser.ml" in let _endpos = _endpos__7_ in let _symbolstartpos = if _startpos__1_ != _endpos__1_ then @@ -45933,11 +46829,11 @@ module Tables = struct _startpos__4_ in let _sloc = (_symbolstartpos, _endpos) in -# 1866 "parsing/parser.mly" +# 1956 "parsing/parser.mly" ( let e = mkexp_constraint ~loc:_sloc _7 _5 in (_4, _3, Cfk_concrete (_1, e)), _2 ) -# 45941 "parsing/parser.ml" +# 46837 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46004,9 +46900,9 @@ module Tables = struct let _v : (Parsetree.value_description * string Asttypes.loc option) = let attrs2 = let _1 = _1_inlined3 in -# 3743 "parsing/parser.mly" +# 3831 "parsing/parser.mly" ( _1 ) -# 46010 "parsing/parser.ml" +# 46906 "parsing/parser.ml" in let _endpos_attrs2_ = _endpos__1_inlined3_ in @@ -46016,30 +46912,30 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46022 "parsing/parser.ml" +# 46918 "parsing/parser.ml" in let attrs1 = let _1 = _1_inlined1 in -# 3747 "parsing/parser.mly" +# 3835 "parsing/parser.mly" ( _1 ) -# 46030 "parsing/parser.ml" +# 46926 "parsing/parser.ml" in let _endpos = _endpos_attrs2_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 2792 "parsing/parser.mly" +# 2872 "parsing/parser.mly" ( let attrs = attrs1 @ attrs2 in let loc = make_loc _sloc in let docs = symbol_docs _sloc in Val.mk id ty ~attrs ~loc ~docs, ext ) -# 46043 "parsing/parser.ml" +# 46939 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46055,9 +46951,9 @@ module Tables = struct let _startpos = _menhir_stack.MenhirLib.EngineTypes.endp in let _endpos = _startpos in let _v : (Asttypes.virtual_flag) = -# 3610 "parsing/parser.mly" +# 3698 "parsing/parser.mly" ( Concrete ) -# 46061 "parsing/parser.ml" +# 46957 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46080,9 +46976,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.virtual_flag) = -# 3611 "parsing/parser.mly" +# 3699 "parsing/parser.mly" ( Virtual ) -# 46086 "parsing/parser.ml" +# 46982 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46105,9 +47001,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.mutable_flag) = -# 3634 "parsing/parser.mly" +# 3722 "parsing/parser.mly" ( Immutable ) -# 46111 "parsing/parser.ml" +# 47007 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46137,9 +47033,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3635 "parsing/parser.mly" +# 3723 "parsing/parser.mly" ( Mutable ) -# 46143 "parsing/parser.ml" +# 47039 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46169,9 +47065,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.mutable_flag) = -# 3636 "parsing/parser.mly" +# 3724 "parsing/parser.mly" ( Mutable ) -# 46175 "parsing/parser.ml" +# 47071 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46194,9 +47090,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3641 "parsing/parser.mly" +# 3729 "parsing/parser.mly" ( Public ) -# 46200 "parsing/parser.ml" +# 47096 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46226,9 +47122,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3642 "parsing/parser.mly" +# 3730 "parsing/parser.mly" ( Private ) -# 46232 "parsing/parser.ml" +# 47128 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46258,9 +47154,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3643 "parsing/parser.mly" +# 3731 "parsing/parser.mly" ( Private ) -# 46264 "parsing/parser.ml" +# 47160 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46322,27 +47218,27 @@ module Tables = struct let xs = # 253 "" ( List.rev xs ) -# 46326 "parsing/parser.ml" +# 47222 "parsing/parser.ml" in -# 901 "parsing/parser.mly" +# 967 "parsing/parser.mly" ( xs ) -# 46331 "parsing/parser.ml" +# 47227 "parsing/parser.ml" in -# 2892 "parsing/parser.mly" +# 2972 "parsing/parser.mly" ( _1 ) -# 46337 "parsing/parser.ml" +# 47233 "parsing/parser.ml" in let _endpos__6_ = _endpos_xs_ in let _5 = let _1 = _1_inlined2 in -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 46346 "parsing/parser.ml" +# 47242 "parsing/parser.ml" in let _3 = @@ -46351,16 +47247,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46357 "parsing/parser.ml" +# 47253 "parsing/parser.ml" in let _endpos = _endpos__6_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3128 "parsing/parser.mly" +# 3208 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_type (_3, @@ -46370,7 +47266,7 @@ module Tables = struct ~manifest:_5 ~priv:_4 ~loc:(make_loc _sloc))) ) -# 46374 "parsing/parser.ml" +# 47270 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46423,9 +47319,9 @@ module Tables = struct let _v : (Parsetree.with_constraint) = let _5 = let _1 = _1_inlined2 in -# 3205 "parsing/parser.mly" +# 3289 "parsing/parser.mly" ( _1 ) -# 46429 "parsing/parser.ml" +# 47325 "parsing/parser.ml" in let _endpos__5_ = _endpos__1_inlined2_ in @@ -46435,16 +47331,16 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46441 "parsing/parser.ml" +# 47337 "parsing/parser.ml" in let _endpos = _endpos__5_ in let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 3141 "parsing/parser.mly" +# 3221 "parsing/parser.mly" ( let lident = loc_last _3 in Pwith_typesubst (_3, @@ -46452,7 +47348,7 @@ module Tables = struct ~params:_2 ~manifest:_5 ~loc:(make_loc _sloc))) ) -# 46456 "parsing/parser.ml" +# 47352 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46501,9 +47397,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46507 "parsing/parser.ml" +# 47403 "parsing/parser.ml" in let _2 = @@ -46512,15 +47408,15 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46518 "parsing/parser.ml" +# 47414 "parsing/parser.ml" in -# 3149 "parsing/parser.mly" +# 3229 "parsing/parser.mly" ( Pwith_module (_2, _4) ) -# 46524 "parsing/parser.ml" +# 47420 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46569,9 +47465,9 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46575 "parsing/parser.ml" +# 47471 "parsing/parser.ml" in let _2 = @@ -46580,15 +47476,143 @@ module Tables = struct let _symbolstartpos = _startpos__1_ in let _sloc = (_symbolstartpos, _endpos) in -# 817 "parsing/parser.mly" +# 883 "parsing/parser.mly" ( mkrhs _1 _sloc ) -# 46586 "parsing/parser.ml" +# 47482 "parsing/parser.ml" in -# 3151 "parsing/parser.mly" +# 3231 "parsing/parser.mly" ( Pwith_modsubst (_2, _4) ) -# 46592 "parsing/parser.ml" +# 47488 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rhs; + MenhirLib.EngineTypes.startp = _startpos_rhs_; + MenhirLib.EngineTypes.endp = _endpos_rhs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let rhs : (Parsetree.module_type) = Obj.magic rhs in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_rhs_ in + let _v : (Parsetree.with_constraint) = let l = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 883 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 47546 "parsing/parser.ml" + + in + +# 3233 "parsing/parser.mly" + ( Pwith_modtype (l, rhs) ) +# 47552 "parsing/parser.ml" + in + { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = Obj.repr _v; + MenhirLib.EngineTypes.startp = _startpos; + MenhirLib.EngineTypes.endp = _endpos; + MenhirLib.EngineTypes.next = _menhir_stack; + }); + (fun _menhir_env -> + let _menhir_stack = _menhir_env.MenhirLib.EngineTypes.stack in + let { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = rhs; + MenhirLib.EngineTypes.startp = _startpos_rhs_; + MenhirLib.EngineTypes.endp = _endpos_rhs_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _4; + MenhirLib.EngineTypes.startp = _startpos__4_; + MenhirLib.EngineTypes.endp = _endpos__4_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _1_inlined1; + MenhirLib.EngineTypes.startp = _startpos__1_inlined1_; + MenhirLib.EngineTypes.endp = _endpos__1_inlined1_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _; + MenhirLib.EngineTypes.semv = _2; + MenhirLib.EngineTypes.startp = _startpos__2_; + MenhirLib.EngineTypes.endp = _endpos__2_; + MenhirLib.EngineTypes.next = { + MenhirLib.EngineTypes.state = _menhir_s; + MenhirLib.EngineTypes.semv = _1; + MenhirLib.EngineTypes.startp = _startpos__1_; + MenhirLib.EngineTypes.endp = _endpos__1_; + MenhirLib.EngineTypes.next = _menhir_stack; + }; + }; + }; + }; + } = _menhir_stack in + let rhs : (Parsetree.module_type) = Obj.magic rhs in + let _4 : unit = Obj.magic _4 in + let _1_inlined1 : (Longident.t) = Obj.magic _1_inlined1 in + let _2 : unit = Obj.magic _2 in + let _1 : unit = Obj.magic _1 in + let _endpos__0_ = _menhir_stack.MenhirLib.EngineTypes.endp in + let _startpos = _startpos__1_ in + let _endpos = _endpos_rhs_ in + let _v : (Parsetree.with_constraint) = let l = + let (_endpos__1_, _startpos__1_, _1) = (_endpos__1_inlined1_, _startpos__1_inlined1_, _1_inlined1) in + let _endpos = _endpos__1_ in + let _symbolstartpos = _startpos__1_ in + let _sloc = (_symbolstartpos, _endpos) in + +# 883 "parsing/parser.mly" + ( mkrhs _1 _sloc ) +# 47610 "parsing/parser.ml" + + in + +# 3235 "parsing/parser.mly" + ( Pwith_modtypesubst (l, rhs) ) +# 47616 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46611,9 +47635,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__1_ in let _v : (Asttypes.private_flag) = -# 3154 "parsing/parser.mly" +# 3238 "parsing/parser.mly" ( Public ) -# 46617 "parsing/parser.ml" +# 47641 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46643,9 +47667,9 @@ module Tables = struct let _startpos = _startpos__1_ in let _endpos = _endpos__2_ in let _v : (Asttypes.private_flag) = -# 3155 "parsing/parser.mly" +# 3239 "parsing/parser.mly" ( Private ) -# 46649 "parsing/parser.ml" +# 47673 "parsing/parser.ml" in { MenhirLib.EngineTypes.state = _menhir_s; @@ -46673,222 +47697,118 @@ end let use_file = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1809 lexer lexbuf) : ( -# 787 "parsing/parser.mly" - (Parsetree.toplevel_phrase list) -# 46680 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1828 lexer lexbuf) : (Parsetree.toplevel_phrase list)) and toplevel_phrase = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1789 lexer lexbuf) : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 46688 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1808 lexer lexbuf) : (Parsetree.toplevel_phrase)) and parse_val_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1783 lexer lexbuf) : ( -# 797 "parsing/parser.mly" - (Longident.t) -# 46696 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1802 lexer lexbuf) : (Longident.t)) and parse_pattern = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1779 lexer lexbuf) : ( -# 793 "parsing/parser.mly" - (Parsetree.pattern) -# 46704 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1798 lexer lexbuf) : (Parsetree.pattern)) and parse_mty_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1775 lexer lexbuf) : ( -# 799 "parsing/parser.mly" - (Longident.t) -# 46712 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1794 lexer lexbuf) : (Longident.t)) and parse_mod_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1771 lexer lexbuf) : ( -# 803 "parsing/parser.mly" - (Longident.t) -# 46720 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1790 lexer lexbuf) : (Longident.t)) and parse_mod_ext_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1767 lexer lexbuf) : ( -# 801 "parsing/parser.mly" - (Longident.t) -# 46728 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1786 lexer lexbuf) : (Longident.t)) and parse_expression = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1763 lexer lexbuf) : ( -# 791 "parsing/parser.mly" - (Parsetree.expression) -# 46736 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1782 lexer lexbuf) : (Parsetree.expression)) and parse_core_type = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1759 lexer lexbuf) : ( -# 789 "parsing/parser.mly" - (Parsetree.core_type) -# 46744 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1778 lexer lexbuf) : (Parsetree.core_type)) and parse_constr_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1755 lexer lexbuf) : ( -# 795 "parsing/parser.mly" - (Longident.t) -# 46752 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1774 lexer lexbuf) : (Longident.t)) and parse_any_longident = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1737 lexer lexbuf) : ( -# 805 "parsing/parser.mly" - (Longident.t) -# 46760 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1756 lexer lexbuf) : (Longident.t)) and interface = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 1733 lexer lexbuf) : ( -# 783 "parsing/parser.mly" - (Parsetree.signature) -# 46768 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 1752 lexer lexbuf) : (Parsetree.signature)) and implementation = fun lexer lexbuf -> - (Obj.magic (MenhirInterpreter.entry 0 lexer lexbuf) : ( -# 781 "parsing/parser.mly" - (Parsetree.structure) -# 46776 "parsing/parser.ml" - )) + (Obj.magic (MenhirInterpreter.entry `Simplified 0 lexer lexbuf) : (Parsetree.structure)) module Incremental = struct let use_file = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1809 initial_position) : ( -# 787 "parsing/parser.mly" - (Parsetree.toplevel_phrase list) -# 46786 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1828 initial_position) : (Parsetree.toplevel_phrase list) MenhirInterpreter.checkpoint) and toplevel_phrase = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1789 initial_position) : ( -# 785 "parsing/parser.mly" - (Parsetree.toplevel_phrase) -# 46794 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1808 initial_position) : (Parsetree.toplevel_phrase) MenhirInterpreter.checkpoint) and parse_val_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1783 initial_position) : ( -# 797 "parsing/parser.mly" - (Longident.t) -# 46802 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1802 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_pattern = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1779 initial_position) : ( -# 793 "parsing/parser.mly" - (Parsetree.pattern) -# 46810 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1798 initial_position) : (Parsetree.pattern) MenhirInterpreter.checkpoint) and parse_mty_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1775 initial_position) : ( -# 799 "parsing/parser.mly" - (Longident.t) -# 46818 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1794 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_mod_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1771 initial_position) : ( -# 803 "parsing/parser.mly" - (Longident.t) -# 46826 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1790 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_mod_ext_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1767 initial_position) : ( -# 801 "parsing/parser.mly" - (Longident.t) -# 46834 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1786 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_expression = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1763 initial_position) : ( -# 791 "parsing/parser.mly" - (Parsetree.expression) -# 46842 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1782 initial_position) : (Parsetree.expression) MenhirInterpreter.checkpoint) and parse_core_type = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1759 initial_position) : ( -# 789 "parsing/parser.mly" - (Parsetree.core_type) -# 46850 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1778 initial_position) : (Parsetree.core_type) MenhirInterpreter.checkpoint) and parse_constr_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1755 initial_position) : ( -# 795 "parsing/parser.mly" - (Longident.t) -# 46858 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1774 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and parse_any_longident = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1737 initial_position) : ( -# 805 "parsing/parser.mly" - (Longident.t) -# 46866 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1756 initial_position) : (Longident.t) MenhirInterpreter.checkpoint) and interface = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 1733 initial_position) : ( -# 783 "parsing/parser.mly" - (Parsetree.signature) -# 46874 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 1752 initial_position) : (Parsetree.signature) MenhirInterpreter.checkpoint) and implementation = fun initial_position -> - (Obj.magic (MenhirInterpreter.start 0 initial_position) : ( -# 781 "parsing/parser.mly" - (Parsetree.structure) -# 46882 "parsing/parser.ml" - ) MenhirInterpreter.checkpoint) + (Obj.magic (MenhirInterpreter.start 0 initial_position) : (Parsetree.structure) MenhirInterpreter.checkpoint) end -# 3777 "parsing/parser.mly" +# 3867 "parsing/parser.mly" -# 46890 "parsing/parser.ml" +# 47810 "parsing/parser.ml" # 269 "" -# 46895 "parsing/parser.ml" +# 47815 "parsing/parser.ml" diff --git a/boot/ocamlc b/boot/ocamlc index f7592f197865074a975639500fc7cc640188a02f..7874a890bba732acaf555ec91132fa681bd79b0e 100755 GIT binary patch delta 651542 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

BZkV!^{+(Vg=CogC%LupOwBws~O_S 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≥#K>yh4J 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

J)1DSR^YrpEzuS~ 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%0A6Scl}HHVOmS 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 z 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

TFGy+BP;u_(+HSUw0lcVEU# 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 D{90V_ delta 602028 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≈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д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%0A_#FuAChHEUw(uBu&6Y|QhN=A0RA@y0>@w@b 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�w*Q2vqV^P7u?fd#^8OBypUZ(8 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