aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/asn1/doc/src/asn1_ug.xml90
-rw-r--r--lib/asn1/doc/src/asn1ct.xml25
-rw-r--r--lib/asn1/src/asn1ct.erl29
-rw-r--r--lib/asn1/src/asn1ct_check.erl45
-rw-r--r--lib/asn1/src/asn1ct_constructed_per.erl68
-rw-r--r--lib/asn1/src/asn1ct_gen.erl7
-rw-r--r--lib/asn1/src/asn1ct_gen_ber_bin_v2.erl122
-rw-r--r--lib/asn1/src/asn1ct_gen_per.erl22
-rw-r--r--lib/asn1/src/asn1ct_imm.erl47
-rw-r--r--lib/asn1/src/asn1ct_value.erl6
-rw-r--r--lib/asn1/src/asn1rtt_ber.erl65
-rw-r--r--lib/asn1/src/asn1rtt_ext.erl2
-rw-r--r--lib/asn1/src/asn1rtt_per_common.erl37
-rw-r--r--lib/asn1/test/asn1_SUITE.erl44
-rw-r--r--lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl36
-rw-r--r--lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl4
-rw-r--r--lib/asn1/test/h323test.erl14
-rw-r--r--lib/asn1/test/testChoExtension.erl4
-rw-r--r--lib/asn1/test/testChoExternal.erl20
-rw-r--r--lib/asn1/test/testChoOptional.erl12
-rw-r--r--lib/asn1/test/testChoRecursive.erl4
-rw-r--r--lib/asn1/test/testChoTypeRefCho.erl2
-rw-r--r--lib/asn1/test/testChoTypeRefPrim.erl22
-rw-r--r--lib/asn1/test/testChoTypeRefSeq.erl27
-rw-r--r--lib/asn1/test/testChoTypeRefSet.erl27
-rw-r--r--lib/asn1/test/testConstraints.erl8
-rw-r--r--lib/asn1/test/testFragmented.erl4
-rw-r--r--lib/asn1/test/testInfObj.erl8
-rw-r--r--lib/asn1/test/testMergeCompile.erl44
-rw-r--r--lib/asn1/test/testParameterizedInfObj.erl78
-rw-r--r--lib/asn1/test/testPrimExternal.erl2
-rw-r--r--lib/asn1/test/testPrimStrings.erl317
-rw-r--r--lib/asn1/test/testSeqExtension.erl4
-rw-r--r--lib/asn1/test/testSeqExternal.erl18
-rw-r--r--lib/asn1/test/testSeqOf.erl26
-rw-r--r--lib/asn1/test/testSeqOfExternal.erl63
-rw-r--r--lib/asn1/test/testSeqOfTag.erl72
-rw-r--r--lib/asn1/test/testSeqPrim.erl6
-rw-r--r--lib/asn1/test/testSeqSetDefaultVal.erl15
-rw-r--r--lib/asn1/test/testSeqTag.erl36
-rw-r--r--lib/asn1/test/testSeqTypeRefCho.erl8
-rw-r--r--lib/asn1/test/testSeqTypeRefPrim.erl18
-rw-r--r--lib/asn1/test/testSeqTypeRefSeq.erl18
-rw-r--r--lib/asn1/test/testSeqTypeRefSet.erl18
-rw-r--r--lib/asn1/test/testSetExternal.erl18
-rw-r--r--lib/asn1/test/testSetOf.erl6
-rw-r--r--lib/asn1/test/testSetOfExternal.erl54
-rw-r--r--lib/asn1/test/testSetOfTag.erl72
-rw-r--r--lib/asn1/test/testSetTag.erl36
-rw-r--r--lib/asn1/test/testSetTypeRefCho.erl8
-rw-r--r--lib/asn1/test/testSetTypeRefPrim.erl18
-rw-r--r--lib/asn1/test/testSetTypeRefSeq.erl18
-rw-r--r--lib/asn1/test/testSetTypeRefSet.erl18
-rw-r--r--lib/asn1/test/testTimer.erl242
-rw-r--r--lib/asn1/test/testTypeValueNotation.erl2
-rw-r--r--lib/compiler/src/beam_a.erl4
-rw-r--r--lib/compiler/src/beam_block.erl6
-rw-r--r--lib/compiler/src/beam_clean.erl30
-rw-r--r--lib/compiler/src/beam_disasm.erl38
-rw-r--r--lib/compiler/src/beam_flatten.erl4
-rw-r--r--lib/compiler/src/beam_jump.erl4
-rw-r--r--lib/compiler/src/beam_split.erl7
-rw-r--r--lib/compiler/src/beam_utils.erl1
-rw-r--r--lib/compiler/src/beam_validator.erl20
-rw-r--r--lib/compiler/src/beam_z.erl4
-rw-r--r--lib/compiler/src/cerl.erl63
-rw-r--r--lib/compiler/src/cerl_inline.erl46
-rw-r--r--lib/compiler/src/cerl_trees.erl46
-rw-r--r--lib/compiler/src/compile.erl21
-rw-r--r--lib/compiler/src/core_lib.erl4
-rw-r--r--lib/compiler/src/core_lint.erl19
-rw-r--r--lib/compiler/src/core_parse.hrl9
-rw-r--r--lib/compiler/src/core_parse.yrl37
-rw-r--r--lib/compiler/src/core_pp.erl21
-rw-r--r--lib/compiler/src/core_scan.erl2
-rwxr-xr-xlib/compiler/src/genop.tab8
-rw-r--r--lib/compiler/src/sys_core_dsetel.erl12
-rw-r--r--lib/compiler/src/sys_core_fold.erl37
-rw-r--r--lib/compiler/src/sys_pre_expand.erl21
-rw-r--r--lib/compiler/src/v3_codegen.erl170
-rw-r--r--lib/compiler/src/v3_core.erl55
-rw-r--r--lib/compiler/src/v3_kernel.erl72
-rw-r--r--lib/compiler/src/v3_kernel.hrl2
-rw-r--r--lib/compiler/src/v3_kernel_pp.erl15
-rw-r--r--lib/compiler/src/v3_life.erl16
-rw-r--r--lib/compiler/test/compile_SUITE.erl11
-rw-r--r--lib/compiler/test/core_SUITE.erl8
-rw-r--r--lib/compiler/test/core_SUITE_data/map_core_test.core95
-rw-r--r--lib/compiler/test/inline_SUITE.erl3
-rw-r--r--lib/compiler/test/inline_SUITE_data/maps_inline_test.erl70
-rw-r--r--lib/crypto/src/Makefile7
-rw-r--r--lib/crypto/src/crypto.app.src14
-rw-r--r--lib/crypto/src/crypto_app.erl39
-rw-r--r--lib/crypto/src/crypto_server.erl68
-rw-r--r--lib/crypto/src/crypto_sup.erl39
-rw-r--r--lib/dialyzer/src/dialyzer.erl15
-rw-r--r--lib/dialyzer/src/dialyzer_cl.erl10
-rw-r--r--lib/dialyzer/src/dialyzer_contracts.erl90
-rw-r--r--lib/dialyzer/src/dialyzer_dataflow.erl1084
-rw-r--r--lib/dialyzer/src/dialyzer_dep.erl12
-rw-r--r--lib/dialyzer/src/dialyzer_succ_typings.erl82
-rw-r--r--lib/dialyzer/src/dialyzer_typesig.erl364
-rw-r--r--lib/dialyzer/test/Makefile1
-rw-r--r--lib/dialyzer/test/dialyzer.cover3
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/crash2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/ets1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/ewgi2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/inf_loop12
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/inf_loop25
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/int4
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/modules3
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/my_queue2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/opaque1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/queue1
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/simple87
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/results/wings2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl10
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl175
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl655
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl1300
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl2
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl17
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl60
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl65
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl28
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl77
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl138
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl571
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl125
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl9
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl5
-rw-r--r--lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl4
-rw-r--r--lib/dialyzer/test/small_SUITE_data/src/maps1.erl41
-rw-r--r--lib/dialyzer/vsn.mk2
-rw-r--r--lib/diameter/doc/src/diameter.xml7
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl10
-rw-r--r--lib/diameter/src/base/diameter_service.erl5
-rw-r--r--lib/diameter/src/base/diameter_stats.erl5
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl14
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl21
-rw-r--r--lib/diameter/src/diameter.appup.src83
-rw-r--r--lib/diameter/src/transport/diameter_sctp.erl17
-rw-r--r--lib/diameter/vsn.mk4
-rw-r--r--lib/edoc/src/edoc_doclet.erl2
-rw-r--r--lib/edoc/src/edoc_layout.erl10
-rw-r--r--lib/edoc/src/edoc_lib.erl2
-rw-r--r--lib/edoc/src/edoc_parser.yrl16
-rw-r--r--lib/edoc/src/edoc_scanner.erl2
-rw-r--r--lib/edoc/src/edoc_specs.erl13
-rw-r--r--lib/edoc/src/edoc_tags.erl2
-rw-r--r--lib/edoc/src/edoc_types.erl4
-rw-r--r--lib/edoc/src/edoc_types.hrl4
-rw-r--r--lib/edoc/test/edoc_SUITE.erl39
-rw-r--r--lib/edoc/test/edoc_SUITE_data/map_module.erl27
-rw-r--r--lib/erl_docgen/src/docgen_otp_specs.erl5
-rw-r--r--lib/hipe/cerl/cerl_prettypr.erl25
-rw-r--r--lib/hipe/cerl/erl_bif_types.erl1808
-rw-r--r--lib/hipe/cerl/erl_types.erl2103
-rw-r--r--lib/kernel/doc/src/file.xml118
-rw-r--r--lib/kernel/src/file.erl15
-rw-r--r--lib/kernel/test/kernel_SUITE.erl80
-rw-r--r--lib/kernel/test/sendfile_SUITE.erl70
-rw-r--r--lib/megaco/doc/src/notes.xml59
-rw-r--r--lib/megaco/src/app/megaco.appup.src13
-rw-r--r--lib/megaco/src/binary/depend.mk2
-rw-r--r--lib/megaco/vsn.mk4
-rw-r--r--lib/observer/doc/src/Makefile13
-rw-r--r--lib/observer/doc/src/cdv.xml60
-rw-r--r--lib/observer/doc/src/crashdump.xml23
-rw-r--r--lib/observer/doc/src/crashdump_help.html307
-rw-r--r--lib/observer/doc/src/crashdump_ug.xml427
-rw-r--r--lib/observer/doc/src/ref_man.xml1
-rw-r--r--lib/observer/src/Makefile24
-rw-r--r--lib/observer/src/cdv_atom_cb.erl48
-rw-r--r--lib/observer/src/cdv_bin_cb.erl82
-rw-r--r--lib/observer/src/cdv_detail_wx.erl158
-rw-r--r--lib/observer/src/cdv_dist_cb.erl91
-rw-r--r--lib/observer/src/cdv_ets_cb.erl67
-rw-r--r--lib/observer/src/cdv_fun_cb.erl58
-rw-r--r--lib/observer/src/cdv_gen_cb.erl45
-rw-r--r--lib/observer/src/cdv_html_wx.erl128
-rw-r--r--lib/observer/src/cdv_info_wx.erl128
-rw-r--r--lib/observer/src/cdv_int_tab_cb.erl86
-rw-r--r--lib/observer/src/cdv_mem_cb.erl84
-rw-r--r--lib/observer/src/cdv_mod_cb.erl102
-rw-r--r--lib/observer/src/cdv_multi_wx.erl188
-rw-r--r--lib/observer/src/cdv_port_cb.erl103
-rw-r--r--lib/observer/src/cdv_proc_cb.erl156
-rw-r--r--lib/observer/src/cdv_table_wx.erl106
-rw-r--r--lib/observer/src/cdv_term_cb.erl75
-rw-r--r--lib/observer/src/cdv_timer_cb.erl51
-rw-r--r--lib/observer/src/cdv_virtual_list_wx.erl414
-rw-r--r--lib/observer/src/cdv_wx.erl462
-rw-r--r--lib/observer/src/crashdump_viewer.erl2129
-rw-r--r--lib/observer/src/crashdump_viewer.hrl168
-rw-r--r--lib/observer/src/crashdump_viewer_html.erl1440
-rw-r--r--lib/observer/src/etop_tr.erl38
-rw-r--r--lib/observer/src/observer.app.src22
-rw-r--r--lib/observer/src/observer_app_wx.erl27
-rw-r--r--lib/observer/src/observer_defs.hrl11
-rw-r--r--lib/observer/src/observer_html_lib.erl388
-rw-r--r--lib/observer/src/observer_lib.erl395
-rw-r--r--lib/observer/src/observer_perf_wx.erl29
-rw-r--r--lib/observer/src/observer_pro_wx.erl107
-rw-r--r--lib/observer/src/observer_procinfo.erl235
-rw-r--r--lib/observer/src/observer_sys_wx.erl24
-rw-r--r--lib/observer/src/observer_trace_wx.erl7
-rw-r--r--lib/observer/src/observer_tv_table.erl123
-rw-r--r--lib/observer/src/observer_wx.erl48
-rw-r--r--lib/observer/test/crashdump_helper.erl62
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE.erl742
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms13135
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms13285
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms13085
-rw-r--r--lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms13035
-rw-r--r--lib/odbc/configure.in2
-rw-r--r--lib/public_key/doc/src/public_key.xml49
-rw-r--r--lib/public_key/include/public_key.hrl3
-rw-r--r--lib/runtime_tools/c_src/Makefile.in30
-rw-r--r--lib/runtime_tools/c_src/dyntrace.c3
-rw-r--r--lib/runtime_tools/src/observer_backend.erl15
-rw-r--r--lib/sasl/test/sasl_SUITE.erl93
-rw-r--r--lib/snmp/doc/src/notes.xml76
-rw-r--r--lib/snmp/src/app/snmp.appup.src12
-rw-r--r--lib/snmp/vsn.mk4
-rw-r--r--lib/ssh/src/ssh.erl4
-rw-r--r--lib/ssh/src/ssh_cli.erl15
-rw-r--r--lib/ssl/doc/src/ssl.xml4
-rw-r--r--lib/ssl/src/ssl.erl26
-rw-r--r--lib/ssl/src/ssl_connection.hrl2
-rw-r--r--lib/ssl/src/ssl_handshake.erl16
-rw-r--r--lib/ssl/src/ssl_internal.hrl6
-rw-r--r--lib/ssl/test/ssl_basic_SUITE.erl50
-rw-r--r--lib/ssl/test/ssl_test_lib.erl20
-rw-r--r--lib/ssl/test/ssl_to_openssl_SUITE.erl10
-rw-r--r--lib/stdlib/doc/src/unicode_usage.xml35
-rw-r--r--lib/stdlib/examples/erl_id_trans.erl35
-rw-r--r--lib/stdlib/src/Makefile1
-rw-r--r--lib/stdlib/src/erl_eval.erl39
-rw-r--r--lib/stdlib/src/erl_expand_records.erl20
-rw-r--r--lib/stdlib/src/erl_internal.erl5
-rw-r--r--lib/stdlib/src/erl_lint.erl79
-rw-r--r--lib/stdlib/src/erl_parse.yrl45
-rw-r--r--lib/stdlib/src/erl_scan.erl7
-rw-r--r--lib/stdlib/src/io_lib.erl16
-rw-r--r--lib/stdlib/src/io_lib_pretty.erl32
-rw-r--r--lib/stdlib/src/maps.erl198
-rw-r--r--lib/stdlib/src/ms_transform.erl2
-rw-r--r--lib/stdlib/src/stdlib.app.src1
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl10
-rw-r--r--lib/stdlib/test/erl_scan_SUITE.erl4
-rw-r--r--lib/stdlib/test/stdlib_SUITE.erl80
-rw-r--r--lib/syntax_tools/src/erl_syntax.erl36
-rw-r--r--lib/syntax_tools/src/erl_tidy.erl23
-rw-r--r--lib/typer/src/typer.erl28
256 files changed, 15561 insertions, 60429 deletions
diff --git a/lib/asn1/doc/src/asn1_ug.xml b/lib/asn1/doc/src/asn1_ug.xml
index 74c4aa9948..eb9f000e75 100644
--- a/lib/asn1/doc/src/asn1_ug.xml
+++ b/lib/asn1/doc/src/asn1_ug.xml
@@ -653,7 +653,7 @@ Day1 = saturday,
Bits1 ::= BIT STRING
Bits2 ::= BIT STRING {foo(0),bar(1),gnu(2),gnome(3),punk(14)}
</pre>
- <p>There are five different notations available for representation of
+ <p>There are two notations available for representation of
BIT STRING values in Erlang and as input to the encode functions.</p>
<list type="ordered">
<item>A bitstring. By default, a BIT STRING with no
@@ -661,43 +661,10 @@ Bits2 ::= BIT STRING {foo(0),bar(1),gnu(2),gnome(3),punk(14)}
<item>A list of atoms corresponding to atoms in the <c>NamedBitList</c>
in the BIT STRING definition. A BIT STRING with symbolic
names will always be decoded to this format.</item>
- <item>A list of binary digits (0 or 1). This format is always
- accepted as input to the encode functions. A BIT STRING will
- be decoded to this format if <em>legacy_bit_string</em> option
- has been given. <em>This format may be withdrawn in a future
- release.</em>
- </item>
- <item>As <c>{Unused,Binary}</c> where <c>Unused</c> denotes how
- many trailing zero-bits 0 to 7 that are unused in the least
- significant byte in <c>Binary</c>. This format is always
- accepted as input to the encode functions. A BIT STRING will
- be decoded to this format if <em>compact_bit_string</em> has
- been given. <em>This format may be withdrawn in a future
- release.</em>
- </item>
- <item>A hexadecimal number (or an integer). This format should be
- avoided, since it is easy to misinterpret a <c>BIT STRING</c>
- value in this format. <em>This format may be withdrawn in a future
- release.</em>
- </item>
</list>
- <note>
- <p>It is recommended to either use the bitstring format (for
- BIT STRINGs with no symbolic names) or a list of symbolic
- names (for BIT STRINGs with symbolic names). The other formats
- should be avoided since they may be withdrawn in a future
- release.
- </p>
- </note>
+ <p>Example:</p>
<pre>
Bits1Val1 = &lt;&lt;0:1,1:1,0:1,1:1,1:1&gt;&gt;,
-Bits1Val2 = 16#1A,
-Bits1Val3 = {3,&lt;&lt;0:1,1:1,0:1,1:1,1:1,0:3&gt;&gt;},
-Bits1Val4 = [0,1,0,1,1]
- </pre>
- <p>Note that <c>Bits1Val1</c>, <c>Bits1Val2</c>, <c>Bits1Val3</c>,
- and <c>Bits1Val1</c> denote the same value.</p>
- <pre>
Bits2Val1 = [gnu,punk],
Bits2Val2 = &lt;&lt;2#1110:4&gt;&gt;,
Bits2Val3 = [bar,gnu,gnome],
@@ -708,37 +675,60 @@ Bits2Val3 = [bar,gnu,gnome],
2 and 14 are set to 1 and the rest set to 0. The symbolic values
appear as a list of values. If a named value appears, which is not
specified in the type definition, a run-time error will occur.</p>
- <p>The compact notation equivalent to the empty BIT STRING is
- <c><![CDATA[{0,<<>>}]]></c>, which in the other notations is
- <c><![CDATA[<<>>]]></c>, <c>[]</c>, or
- <c>0</c>.</p>
<p>BIT STRINGS may also be sub-typed with, for example, a SIZE
specification:</p>
<pre>
Bits3 ::= BIT STRING (SIZE(0..31)) </pre>
<p>This means that no bit higher than 31 can ever be set.</p>
+
+ <section>
+ <title>Deprecated representations for BIT STRING</title>
+ <p>In addition to the representations described above, the
+ following deprecated representations are available if the
+ specification has been compiled with the
+ <c>legacy_erlang_types</c> option:</p>
+ <list type="ordered">
+ <item>A list of binary digits (0 or 1). This format is
+ accepted as input to the encode functions, and a BIT STRING
+ will be decoded to this format if the
+ <em>legacy_bit_string</em> option has been given.
+ </item>
+ <item>As <c>{Unused,Binary}</c> where <c>Unused</c> denotes
+ how many trailing zero-bits 0 to 7 that are unused in the
+ least significant byte in <c>Binary</c>. This format is
+ accepted as input to the encode functions, and a <c>BIT
+ STRING</c> will be decoded to this format if
+ <em>compact_bit_string</em> has been given.
+ </item>
+ <item>A hexadecimal number (or an integer). This format
+ should be avoided, since it is easy to misinterpret a BIT
+ STRING value in this format.
+ </item>
+ </list>
+ </section>
</section>
<section>
<marker id="OCTET STRING"></marker>
<title>OCTET STRING</title>
- <p>The OCTET STRING is the simplest of all ASN.1 types The OCTET STRING
- only moves or transfers e.g. binary files or other unstructured
- information complying to two rules.
- Firstly, the bytes consist of octets and secondly, encoding is
- not required.</p>
+ <p>The OCTET STRING is the simplest of all ASN.1 types. The
+ OCTET STRING only moves or transfers e.g. binary files or other
+ unstructured information complying to two rules. Firstly, the
+ bytes consist of octets and secondly, encoding is not
+ required.</p>
<p>It is possible to have the following ASN.1 type definitions:</p>
<pre>
O1 ::= OCTET STRING
O2 ::= OCTET STRING (SIZE(28)) </pre>
<p>With the following example assignments in Erlang:</p>
<pre>
-O1Val = [17,13,19,20,0,0,255,254],
-O2Val = "must be exactly 28 chars....", </pre>
- <p>Observe that <c>O1Val</c> is assigned a series of numbers between 0
- and 255 i.e. octets.
- <c>O2Val</c> is assigned using the string notation.
- </p>
+O1Val = &lt;&lt;17,13,19,20,0,0,255,254&gt;&gt;,
+O2Val = &lt;&lt;"must be exactly 28 chars...."&gt;&gt;,</pre>
+ <p>By default, an OCTET STRING is always represented as
+ an Erlang binary. If the specification has been compiled with
+ the <c>legacy_erlang_types</c> option, the encode functions
+ will accept both lists and binaries, and the decode functions
+ will decode an OCTET STRING to a list.</p>
</section>
<section>
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index ada2aace87..5871c8ad68 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -42,6 +42,17 @@
can be used in during development of applications which handles ASN.1
data (encoded as BER or PER).</p>
<note>
+ <p>By default in OTP 17, the representation of the BIT STRING
+ and OCTET STRING types as Erlang terms have changed. BIT
+ STRING values are now Erlang bitstrings and OCTET STRING values
+ are binaries. For details see <seealso
+ marker="asn1_ug#BIT STRING">BIT STRING</seealso> and <seealso
+ marker="asn1_ug#OCTET STRING">OCTET STRING</seealso> in User's
+ Guide.</p>
+ <p>To revert to the old representation of the types, use the
+ <c>legacy_erlang_types</c> option.</p>
+ </note>
+ <note>
<p>In R16, the options have been simplified. The back-end is chosen
using one of the options <c>ber</c>, <c>per</c>, or <c>uper</c>.
The options <c>optimize</c>, <c>nif</c>, and <c>driver</c> options
@@ -64,7 +75,7 @@
<v>Asn1module = atom() | string()</v>
<v>Options = [Option| OldOption]</v>
<v>Option = ber | per | uper | der | compact_bit_string |
- legacy_bit_string |
+ legacy_bit_string | legacy_erlang_types |
noobj | {n2n, EnumTypeName} |{outdir, Dir} | {i, IncludeDir} |
asn1config | undec_rest | no_ok_wrapper |
{macro_name_prefix, Prefix} | {record_name_prefix, Prefix} | verbose | warnings_as_errors</v>
@@ -163,6 +174,7 @@ File3.asn </pre>
BIT STRING type section in the Users Guide
</seealso>.
</p>
+ <p>This option implies the <c>legacy_erlang_types</c> option.</p>
</item>
<tag><c>legacy_bit_string</c></tag>
<item>
@@ -175,8 +187,19 @@ File3.asn </pre>
<seealso marker="asn1_ug#BIT STRING">
BIT STRING type section in the Users Guide
</seealso>.
+ <p>This option implies the <c>legacy_erlang_types</c> option.</p>
</p>
</item>
+ <tag><c>legacy_erlang_types</c></tag>
+ <item>
+ <p>Use the same Erlang types to represent BIT STRING and
+ OCTET STRING as in R16. For details see <seealso
+ marker="asn1_ug#BIT STRING">BIT STRING</seealso> and
+ <seealso marker="asn1_ug#OCTET STRING">OCTET
+ STRING</seealso> in User's Guide.</p>
+ <p><em>This option is not recommended for
+ new code.</em></p>
+ </item>
<tag><c>{n2n, EnumTypeName}</c></tag>
<item>
<p>
diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl
index f2e9606ccb..531a4935fe 100644
--- a/lib/asn1/src/asn1ct.erl
+++ b/lib/asn1/src/asn1ct.erl
@@ -40,7 +40,7 @@
maybe_rename_function/3,current_sindex/0,
set_current_sindex/1,maybe_saved_sindex/2,
parse_and_save/2,verbose/3,warning/3,warning/4,error/3]).
--export([get_bit_string_format/0]).
+-export([get_bit_string_format/0,use_legacy_types/0]).
-include("asn1_records.hrl").
-include_lib("stdlib/include/erl_compile.hrl").
@@ -841,6 +841,7 @@ delete_double_of_symbol1([],Acc) ->
generate({M,GenTOrV}, OutFile, EncodingRule, Options) ->
debug_on(Options),
setup_bit_string_format(Options),
+ setup_legacy_erlang_types(Options),
put(encoding_options,Options),
asn1ct_table:new(check_functions),
@@ -869,6 +870,31 @@ generate({M,GenTOrV}, OutFile, EncodingRule, Options) ->
asn1ct_table:delete(check_functions),
Result.
+setup_legacy_erlang_types(Opts) ->
+ F = case lists:member(legacy_erlang_types, Opts) of
+ false ->
+ case get_bit_string_format() of
+ bitstring ->
+ false;
+ compact ->
+ legacy_forced_info(compact_bit_string),
+ true;
+ legacy ->
+ legacy_forced_info(legacy_bit_string),
+ true
+ end;
+ true ->
+ true
+ end,
+ put(use_legacy_erlang_types, F).
+
+legacy_forced_info(Opt) ->
+ io:format("Info: The option 'legacy_erlang_types' "
+ "is implied by the '~s' option.\n", [Opt]).
+
+use_legacy_types() ->
+ get(use_legacy_erlang_types).
+
setup_bit_string_format(Opts) ->
Format = case {lists:member(compact_bit_string, Opts),
lists:member(legacy_bit_string, Opts)} of
@@ -1075,6 +1101,7 @@ remove_asn_flags(Options) ->
X /= optimize,
X /= compact_bit_string,
X /= legacy_bit_string,
+ X /= legacy_erlang_types,
X /= debug,
X /= asn1config,
X /= record_name_prefix].
diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl
index 0a13801e08..f94f3b56bc 100644
--- a/lib/asn1/src/asn1ct_check.erl
+++ b/lib/asn1/src/asn1ct_check.erl
@@ -2574,6 +2574,18 @@ normalize_bitstring(S, Value, Type)->
Bs
end.
+hstring_to_binary(L) ->
+ byte_align(hstring_to_bitstring(L)).
+
+bstring_to_binary(L) ->
+ byte_align(bstring_to_bitstring(L)).
+
+byte_align(Bs) ->
+ case bit_size(Bs) rem 8 of
+ 0 -> Bs;
+ N -> <<Bs/bitstring,0:(8-N)>>
+ end.
+
hstring_to_bitstring(L) ->
<< <<(hex_to_int(D)):4>> || D <- L >>.
@@ -2592,9 +2604,9 @@ hex_to_int(D) when $A =< D, D =< $F -> D - ($A - 10).
normalize_octetstring(S,Value,CType) ->
case Value of
{bstring,String} ->
- bstring_to_octetlist(String);
+ bstring_to_binary(String);
{hstring,String} ->
- hstring_to_octetlist(String);
+ hstring_to_binary(String);
Rec when is_record(Rec,'Externalvaluereference') ->
get_normalized_value(S,Value,CType,
fun normalize_octetstring/3,[]);
@@ -2616,35 +2628,6 @@ normalize_octetstring(S,Value,CType) ->
Value
end.
-
-bstring_to_octetlist([]) ->
- [];
-bstring_to_octetlist([H|T]) when H == $0 ; H == $1 ->
- bstring_to_octetlist(T,6,[(H - $0) bsl 7]).
-bstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H == $0; H == $1 ->
- bstring_to_octetlist(T, 7, [0,Hacc + (H -$0)| Tacc]);
-bstring_to_octetlist([H|T],BSL,[Hacc|Tacc]) when H == $0; H == $1 ->
- bstring_to_octetlist(T, BSL-1, [Hacc + ((H - $0) bsl BSL)| Tacc]);
-bstring_to_octetlist([],7,[0|Acc]) ->
- lists:reverse(Acc);
-bstring_to_octetlist([],_,Acc) ->
- lists:reverse(Acc).
-
-hstring_to_octetlist([]) ->
- [];
-hstring_to_octetlist(L) ->
- hstring_to_octetlist(L,4,[]).
-hstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H >= $A, H =< $F ->
- hstring_to_octetlist(T,4,[Hacc + (H - $A + 10)|Tacc]);
-hstring_to_octetlist([H|T],BSL,Acc) when H >= $A, H =< $F ->
- hstring_to_octetlist(T,0,[(H - $A + 10) bsl BSL|Acc]);
-hstring_to_octetlist([H|T],0,[Hacc|Tacc]) when H >= $0; H =< $9 ->
- hstring_to_octetlist(T,4,[Hacc + (H - $0)|Tacc]);
-hstring_to_octetlist([H|T],BSL,Acc) when H >= $0; H =< $9 ->
- hstring_to_octetlist(T,0,[(H - $0) bsl BSL|Acc]);
-hstring_to_octetlist([],_,Acc) ->
- lists:reverse(Acc).
-
normalize_objectidentifier(S, Value) ->
{ok,Val} = validate_objectidentifier(S, o_id, Value, []),
Val.
diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl
index c224f4c9fa..ed3f6f886e 100644
--- a/lib/asn1/src/asn1ct_constructed_per.erl
+++ b/lib/asn1/src/asn1ct_constructed_per.erl
@@ -450,8 +450,13 @@ dec_objset_default(N, C, LeadingAttr, false) ->
"{value,Bytes},"
"{unique_name_and_value,",{asis,LeadingAttr},",Id}}}).",nl,nl]);
dec_objset_default(N, _, _, true) ->
- emit([{asis,N},"(Bytes, Id) ->",nl,
- "Bytes.",nl,nl]).
+ emit([{asis,N},"(Bytes, Id) ->",nl|
+ case asn1ct:use_legacy_types() of
+ false ->
+ ["{asn1_OPENTYPE,Bytes}.",nl,nl];
+ true ->
+ ["Bytes.",nl,nl]
+ end]).
dec_objset_1(Erule, N, {Id,Obj}, RestFields, Typename) ->
emit([{asis,N},"(Bytes, ",{asis,Id},") ->",nl]),
@@ -906,26 +911,36 @@ def_values(#type{def=#'Externaltypereference'{module=Mod,type=Type}}, Def) ->
#typedef{typespec=T} = asn1_db:dbget(Mod, Type),
def_values(T, Def);
def_values(#type{def={'BIT STRING',[]}}, Bs) when is_bitstring(Bs) ->
- ListBs = [B || <<B:1>> <= Bs],
- IntBs = lists:foldl(fun(B, A) ->
- (A bsl 1) bor B
- end, 0, lists:reverse(ListBs)),
- Sz = bit_size(Bs),
- Compact = case 8 - Sz rem 8 of
- 8 ->
- {0,Bs};
- Unused ->
- {Unused,<<Bs:Sz/bits,0:Unused>>}
- end,
- [asn1_DEFAULT,Bs,Compact,ListBs,IntBs];
+ case asn1ct:use_legacy_types() of
+ false ->
+ [asn1_DEFAULT,Bs];
+ true ->
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ Sz = bit_size(Bs),
+ Compact = case 8 - Sz rem 8 of
+ 8 ->
+ {0,Bs};
+ Unused ->
+ {Unused,<<Bs:Sz/bits,0:Unused>>}
+ end,
+ [asn1_DEFAULT,Bs,Compact,ListBs,IntBs]
+ end;
def_values(#type{def={'BIT STRING',[_|_]=Ns}}, List) when is_list(List) ->
Bs = asn1ct_gen:named_bitstring_value(List, Ns),
- ListBs = [B || <<B:1>> <= Bs],
- IntBs = lists:foldl(fun(B, A) ->
- (A bsl 1) bor B
- end, 0, lists:reverse(ListBs)),
- Args = [List,Bs,ListBs,IntBs],
- {call,per_common,is_default_bitstring,Args};
+ As = case asn1ct:use_legacy_types() of
+ false ->
+ [List,Bs];
+ true ->
+ ListBs = [B || <<B:1>> <= Bs],
+ IntBs = lists:foldl(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, lists:reverse(ListBs)),
+ [List,Bs,ListBs,IntBs]
+ end,
+ {call,per_common,is_default_bitstring,As};
def_values(#type{def={'INTEGER',Ns}}, Def) ->
[asn1_DEFAULT,Def|case lists:keyfind(Def, 2, Ns) of
false -> [];
@@ -1059,8 +1074,17 @@ enc_objset_imm(Erule, Component, ObjSet, RestFieldNames, Extensible) ->
enc_obj(Erule, Obj, RestFieldNames, Aligned)] ||
{Key,Obj} <- ObjSet] ++
[['_',case Extensible of
- false -> E;
- true -> {put_bits,{var,"Val"},binary,[1]}
+ false ->
+ E;
+ true ->
+ case asn1ct:use_legacy_types() of
+ false ->
+ {call,per_common,open_type_to_binary,
+ [{var,"Val"}]};
+ true ->
+ {call,per_common,legacy_open_type_to_binary,
+ [{var,"Val"}]}
+ end
end]]}].
enc_obj(Erule, Obj, RestFieldNames0, Aligned) ->
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index 37b33194d0..71d870b4ce 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -790,7 +790,8 @@ gen_decode_constructed(Erules,Typename,InnerType,D) when is_record(D,typedef) ->
pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) ->
- emit(["-export([encoding_rule/0,bit_string_format/0]).",nl]),
+ emit(["-export([encoding_rule/0,bit_string_format/0,"
+ " legacy_erlang_types/0]).",nl]),
case Types of
[] -> ok;
_ ->
@@ -1022,7 +1023,9 @@ gen_info_functions(Erules) ->
emit(["encoding_rule() -> ",
{asis,Erules},".",nl,nl,
"bit_string_format() -> ",
- {asis,asn1ct:get_bit_string_format()},".",nl,nl]).
+ {asis,asn1ct:get_bit_string_format()},".",nl,nl,
+ "legacy_erlang_types() -> ",
+ {asis,asn1ct:use_legacy_types()},".",nl,nl]).
gen_decode_partial_incomplete(ber) ->
case {asn1ct:read_config_data(partial_incomplete_decode),
diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
index de81259fcb..bea0ec8968 100644
--- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
+++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl
@@ -206,10 +206,32 @@ gen_encode_prim(_Erules, #type{}=D, DoTag, Value) ->
{call,ber,encode_tags,
[DoTag,{curr,realval},{curr,realsize}]},nl,
"end"]);
+ {'BIT STRING',[]} ->
+ case asn1ct:use_legacy_types() of
+ false when BitStringConstraint =:= [] ->
+ call(encode_unnamed_bit_string, [Value,DoTag]);
+ false ->
+ call(encode_unnamed_bit_string,
+ [{asis,BitStringConstraint},Value,DoTag]);
+ true ->
+ call(encode_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,[]},DoTag])
+ end;
{'BIT STRING',NamedNumberList} ->
- call(encode_bit_string,
- [{asis,BitStringConstraint},Value,
- {asis,NamedNumberList},DoTag]);
+ case asn1ct:use_legacy_types() of
+ false when BitStringConstraint =:= [] ->
+ call(encode_named_bit_string,
+ [Value,{asis,NamedNumberList},DoTag]);
+ false ->
+ call(encode_named_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,NamedNumberList},DoTag]);
+ true ->
+ call(encode_bit_string,
+ [{asis,BitStringConstraint},Value,
+ {asis,NamedNumberList},DoTag])
+ end;
'NULL' ->
call(encode_null, [Value,DoTag]);
'OBJECT IDENTIFIER' ->
@@ -471,7 +493,6 @@ gen_dec_prim(_Erules, Att, BytesVar, DoTag, _TagIn, _Form, _OptOrMand) ->
_ -> ""
end,
NewTypeName = case Typename of
- 'OCTET STRING' -> restricted_string;
'NumericString' -> restricted_string;
'TeletexString' -> restricted_string;
'T61String' -> restricted_string;
@@ -529,6 +550,19 @@ gen_dec_prim(_Erules, Att, BytesVar, DoTag, _TagIn, _Form, _OptOrMand) ->
'RELATIVE-OID' ->
emit(["decode_relative_oid(",BytesVar,","]),
need(decode_relative_oid, 2);
+ 'OCTET STRING' ->
+ F = case asn1ct:use_legacy_types() of
+ false -> decode_octet_string;
+ true -> decode_restricted_string
+ end,
+ emit([{asis,F},"(",BytesVar,","]),
+ case Constraint of
+ [] ->
+ need(F, 2);
+ _ ->
+ emit([{asis,Constraint},","]),
+ need(F, 3)
+ end;
restricted_string ->
emit(["decode_restricted_string",AsBin,"(",BytesVar,","]),
case Constraint of
@@ -1090,13 +1124,11 @@ gen_objset_enc(Erules, ObjSetName, UniqueName,
%% See X.681 Annex E for the following case
gen_objset_enc(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj,Acc) ->
- emit(["'getenc_",ObjSetName,"'(_) ->",nl]),
- emit({indent(3),"fun(_, Val, _RestPrimFieldName) ->",nl}),
- emit({indent(6),"Len = case Val of",nl,indent(9),
- "Bin when is_binary(Bin) -> byte_size(Bin);",nl,indent(9),
- "_ -> length(Val)",nl,indent(6),"end,"}),
- emit({indent(6),"{Val,Len}",nl}),
- emit({indent(3),"end.",nl,nl}),
+ emit(["'getenc_",ObjSetName,"'(_) ->",nl,
+ indent(2),"fun(_, Val, _RestPrimFieldName) ->",nl]),
+ emit_enc_open_type(4),
+ emit([nl,
+ indent(2),"end.",nl,nl]),
Acc;
gen_objset_enc(_, ObjSetName, UniqueName, [], _, _, _, Acc) ->
emit_default_getenc(ObjSetName, UniqueName),
@@ -1158,13 +1190,8 @@ gen_inlined_enc_funs1(Fields, [{typefield,Name,_}|Rest], ObjSetName,
%% were no type in the table and we therefore generate
%% code that returns the input for application
%% treatment.
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Len = case Val of",nl,
- indent(15),"Bin when is_binary(Bin) -> "
- "byte_size(Bin);",nl,
- indent(15),"_ -> length(Val)",nl,
- indent(12),"end,",nl,
- indent(12),"{Val,Len}"]),
+ emit([indent(9),{asis,Name}," ->",nl]),
+ emit_enc_open_type(11),
{Acc0,0}
end,
gen_inlined_enc_funs1(Fields, Rest, ObjSetName, Sep, NthObj+NAdd, Acc);
@@ -1175,6 +1202,25 @@ gen_inlined_enc_funs1(_, [], _, _, NthObj, Acc) ->
indent(3),"end"]),
{Acc,NthObj}.
+emit_enc_open_type(I) ->
+ Indent = indent(I),
+ S = [Indent, "case Val of",nl,
+ Indent,indent(2),"{asn1_OPENTYPE,Bin} when is_binary(Bin) ->",nl,
+ Indent,indent(4),"{Bin,byte_size(Bin)}"|
+ case asn1ct:use_legacy_types() of
+ false ->
+ [nl,
+ Indent,"end"];
+ true ->
+ [";",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) ->",nl,
+ Indent,indent(4),"{Bin,byte_size(Bin)};",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),"{Val,length(Val)}",nl,
+ Indent, "end"]
+ end],
+ emit(S).
+
emit_inner_of_fun(TDef=#typedef{name={ExtMod,Name},typespec=Type},
InternalDefFunName) ->
OTag = Type#type.tag,
@@ -1258,14 +1304,9 @@ gen_objset_dec(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName,
_ClFields,_NthObj) ->
emit(["'getdec_",ObjSetName,"'(_) ->",nl]),
emit([indent(2),"fun(_,Bytes, _RestPrimFieldName) ->",nl]),
-
- emit([indent(4),"case Bytes of",nl,
- indent(6),"Bin when is_binary(Bin) -> ",nl,
- indent(8),"Bin;",nl,
- indent(6),"_ ->",nl,
- indent(8),{call,ber,ber_encode,["Bytes"]},nl,
- indent(4),"end",nl]),
- emit([indent(2),"end.",nl,nl]),
+ emit_dec_open_type(4),
+ emit([nl,
+ indent(2),"end.",nl,nl]),
ok;
gen_objset_dec(_, ObjSetName, UniqueName, [], _, _, _) ->
emit_default_getdec(ObjSetName, UniqueName),
@@ -1312,12 +1353,8 @@ gen_inlined_dec_funs1(Fields, [{typefield,Name,Prop}|Rest],
end,
0;
false ->
- emit([indent(9),{asis,Name}," ->",nl,
- indent(12),"Len = case Bytes of",nl,
- indent(15),"B when is_binary(B) -> byte_size(B);",nl,
- indent(15),"_ -> length(Bytes)",nl,
- indent(12),"end,",nl,
- indent(12),"{Bytes,[],Len}"]),
+ emit([indent(9),{asis,Name}," ->",nl]),
+ emit_dec_open_type(11),
0
end,
gen_inlined_dec_funs1(Fields, Rest, ObjSetName, Sep, NthObj+N);
@@ -1328,6 +1365,27 @@ gen_inlined_dec_funs1(_, [], _, _, NthObj) ->
indent(3),"end"]),
NthObj.
+emit_dec_open_type(I) ->
+ Indent = indent(I),
+ S = case asn1ct:use_legacy_types() of
+ false ->
+ [Indent, "case Bytes of",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) -> ",nl,
+ Indent,indent(4),"{asn1_OPENTYPE,Bin};",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),"{asn1_OPENTYPE,",
+ {call,ber,ber_encode,["Bytes"]},"}",nl,
+ Indent, "end"];
+ true ->
+ [Indent, "case Bytes of",nl,
+ Indent,indent(2),"Bin when is_binary(Bin) -> ",nl,
+ Indent,indent(4),"Bin;",nl,
+ Indent,indent(2),"_ ->",nl,
+ Indent,indent(4),{call,ber,ber_encode,["Bytes"]},nl,
+ Indent, "end"]
+ end,
+ emit(S).
+
emit_inner_of_decfun(#typedef{name={ExtName,Name},typespec=Type},Prop,
InternalDefFunName) ->
OTag = Type#type.tag,
diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl
index 7ba649c874..519ce9f054 100644
--- a/lib/asn1/src/asn1ct_gen_per.erl
+++ b/lib/asn1/src/asn1ct_gen_per.erl
@@ -132,7 +132,14 @@ gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) ->
ToBinary = {real_common,encode_real},
asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned);
{'BIT STRING',NNL} ->
- asn1ct_imm:per_enc_bit_string(Val, NNL, Constraint, Aligned);
+ case asn1ct:use_legacy_types() of
+ false ->
+ asn1ct_imm:per_enc_bit_string(Val, NNL,
+ Constraint, Aligned);
+ true ->
+ asn1ct_imm:per_enc_legacy_bit_string(Val, NNL,
+ Constraint, Aligned)
+ end;
'NULL' ->
asn1ct_imm:per_enc_null(Val, Aligned);
'OBJECT IDENTIFIER' ->
@@ -144,7 +151,13 @@ gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) ->
'BOOLEAN' ->
asn1ct_imm:per_enc_boolean(Val, Aligned);
'OCTET STRING' ->
- asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned);
+ case asn1ct:use_legacy_types() of
+ false ->
+ asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned);
+ true ->
+ asn1ct_imm:per_enc_legacy_octet_string(Val, Constraint,
+ Aligned)
+ end;
'ASN1_OPEN_TYPE' ->
case Constraint of
[#'Externaltypereference'{type=Tname}] ->
@@ -325,7 +338,10 @@ gen_dec_imm_1('GeneralizedTime', Constraint, Aligned) ->
gen_dec_imm_1('OCTET STRING', Constraint, Aligned) ->
SzConstr = asn1ct_imm:effective_constraint(bitstring, Constraint),
Imm = asn1ct_imm:per_dec_octet_string(SzConstr, Aligned),
- {convert,binary_to_list,Imm};
+ case asn1ct:use_legacy_types() of
+ false -> {convert,{binary,copy},Imm};
+ true -> {convert,binary_to_list,Imm}
+ end;
gen_dec_imm_1('TeletexString', _Constraint, Aligned) ->
gen_dec_restricted_string(Aligned);
gen_dec_imm_1('T61String', _Constraint, Aligned) ->
diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl
index c14f0b889f..fde39c674e 100644
--- a/lib/asn1/src/asn1ct_imm.erl
+++ b/lib/asn1/src/asn1ct_imm.erl
@@ -26,11 +26,13 @@
per_dec_octet_string/2,per_dec_open_type/1,per_dec_real/1,
per_dec_restricted_string/1]).
-export([per_dec_constrained/3,per_dec_normally_small_number/1]).
--export([per_enc_bit_string/4,per_enc_boolean/2,
+-export([per_enc_bit_string/4,per_enc_legacy_bit_string/4,
+ per_enc_boolean/2,
per_enc_choice/3,per_enc_enumerated/3,
per_enc_integer/3,per_enc_integer/4,
per_enc_null/2,
per_enc_k_m_string/4,per_enc_octet_string/3,
+ per_enc_legacy_octet_string/3,
per_enc_open_type/2,
per_enc_restricted_string/3,
per_enc_small_number/2]).
@@ -157,7 +159,35 @@ per_dec_restricted_string(Aligned) ->
%%% Encoding.
%%%
-per_enc_bit_string(Val0, [], Constraint0, Aligned) ->
+per_enc_bit_string(Val, [], Constraint0, Aligned) ->
+ {B,[[],Bits]} = mk_vars([], [bits]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ B ++ [{call,erlang,bit_size,[Val],Bits}|
+ per_enc_length(Val, 1, Bits, Constraint, Aligned, 'BIT STRING')];
+per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) ->
+ {B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]),
+ NNL = lists:keysort(2, NNL0),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ ExtraArgs = case constr_min_size(Constraint) of
+ no -> [];
+ Lb -> [Lb]
+ end,
+ ToBs = case ExtraArgs of
+ [] ->
+ {call,per_common,bs_drop_trailing_zeroes,[Val]};
+ [Lower] ->
+ {call,per_common,adjust_trailing_zeroes,[Val,Lower]}
+ end,
+ B ++ [{'try',
+ [bit_string_name2pos_fun(NNL, Val)],
+ {Positions,
+ [{call,per_common,bitstring_from_positions,
+ [Positions|ExtraArgs]}]},
+ [ToBs],Bs},
+ {call,erlang,bit_size,[Bs],Bits}|
+ per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')].
+
+per_enc_legacy_bit_string(Val0, [], Constraint0, Aligned) ->
{B,[Val,Bs,Bits]} = mk_vars(Val0, [bs,bits]),
Constraint = effective_constraint(bitstring, Constraint0),
ExtraArgs = case constr_min_size(Constraint) of
@@ -167,7 +197,7 @@ per_enc_bit_string(Val0, [], Constraint0, Aligned) ->
B ++ [{call,per_common,to_bitstring,[Val|ExtraArgs],Bs},
{call,erlang,bit_size,[Bs],Bits}|
per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')];
-per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) ->
+per_enc_legacy_bit_string(Val0, NNL0, Constraint0, Aligned) ->
{B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]),
NNL = lists:keysort(2, NNL0),
Constraint = effective_constraint(bitstring, Constraint0),
@@ -276,7 +306,13 @@ per_enc_open_type(Imm0, Aligned) ->
{call,erlang,byte_size,[Bin],Len}|
per_enc_length(Bin, 8, Len, Aligned)].
-per_enc_octet_string(Val0, Constraint0, Aligned) ->
+per_enc_octet_string(Bin, Constraint0, Aligned) ->
+ {B,[[],Len]} = mk_vars([], [len]),
+ Constraint = effective_constraint(bitstring, Constraint0),
+ B ++ [{call,erlang,byte_size,[Bin],Len}|
+ per_enc_length(Bin, 8, Len, Constraint, Aligned, 'OCTET STRING')].
+
+per_enc_legacy_octet_string(Val0, Constraint0, Aligned) ->
{B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]),
Constraint = effective_constraint(bitstring, Constraint0),
B ++ [{call,erlang,iolist_to_binary,[Val],Bin},
@@ -874,6 +910,9 @@ dcg_list_outside([{call,Fun,{V,Buf},{Dst,DstBuf}}|T]) ->
emit(["{",Dst,",",DstBuf,"} = "]),
Fun(V, Buf),
iter_dcg_list_outside(T);
+dcg_list_outside([{convert,{M,F},V,Dst}|T]) ->
+ emit([Dst," = ",{asis,M},":",{asis,F},"(",V,")"]),
+ iter_dcg_list_outside(T);
dcg_list_outside([{convert,Op,V,Dst}|T]) ->
emit([Dst," = ",Op,"(",V,")"]),
iter_dcg_list_outside(T);
diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl
index 862b3c4ea5..a86c963b9d 100644
--- a/lib/asn1/src/asn1ct_value.erl
+++ b/lib/asn1/src/asn1ct_value.erl
@@ -260,7 +260,11 @@ from_type_prim(M, D) ->
'BOOLEAN' ->
true;
'OCTET STRING' ->
- adjust_list(size_random(C),c_string(C,"OCTET STRING"));
+ S0 = adjust_list(size_random(C), c_string(C, "OCTET STRING")),
+ case M:legacy_erlang_types() of
+ false -> list_to_binary(S0);
+ true -> S0
+ end;
'NumericString' ->
adjust_list(size_random(C),c_string(C,"0123456789"));
'TeletexString' ->
diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl
index 583ff790b7..4bd814769f 100644
--- a/lib/asn1/src/asn1rtt_ber.erl
+++ b/lib/asn1/src/asn1rtt_ber.erl
@@ -29,6 +29,8 @@
decode_integer/2,decode_integer/3,
decode_named_integer/3,decode_named_integer/4,
encode_enumerated/2,decode_enumerated/3,
+ encode_unnamed_bit_string/2,encode_unnamed_bit_string/3,
+ encode_named_bit_string/3,encode_named_bit_string/4,
encode_bit_string/4,
decode_named_bit_string/3,
decode_compact_bit_string/3,
@@ -38,6 +40,7 @@
encode_relative_oid/2,decode_relative_oid/2,
encode_object_identifier/2,decode_object_identifier/2,
encode_restricted_string/2,
+ decode_octet_string/2,decode_octet_string/3,
decode_restricted_string/2,decode_restricted_string/3,
encode_universal_string/2,decode_universal_string/3,
encode_UTF8_string/2,decode_UTF8_string/2,
@@ -780,6 +783,55 @@ decode_enumerated1(Val, NamedNumberList) ->
{asn1_enum,Val}
end.
+%%============================================================================
+%% Bitstring value, ITU_T X.690 Chapter 8.6
+%%
+%% encode bitstring value
+%%============================================================================
+
+encode_unnamed_bit_string(Bits, TagIn) ->
+ Unused = (8 - (bit_size(Bits) band 7)) band 7,
+ Bin = <<Unused,Bits/bitstring,0:Unused>>,
+ encode_tags(TagIn, Bin, byte_size(Bin)).
+
+encode_unnamed_bit_string(C, Bits, TagIn) ->
+ NumBits = bit_size(Bits),
+ Unused = (8 - (NumBits band 7)) band 7,
+ Bin = <<Unused,Bits/bitstring,0:Unused>>,
+ case C of
+ {_Min,Max} ->
+ if
+ NumBits > Max ->
+ exit({error,{asn1,
+ {bitstring_length,
+ {{was,NumBits},{maximum,Max}}}}});
+ true ->
+ ok
+ end;
+ Size ->
+ if NumBits =< Size ->
+ ok;
+ true ->
+ exit({error,{asn1,
+ {bitstring_length,
+ {{was,NumBits},{should_be,Size}}}}})
+ end
+ end,
+ encode_tags(TagIn, Bin, byte_size(Bin)).
+
+encode_named_bit_string([H|_]=Bits, NamedBitList, TagIn) when is_atom(H) ->
+ encode_bit_string_named([], Bits, NamedBitList, TagIn);
+encode_named_bit_string([{bit,_}|_]=Bits, NamedBitList, TagIn) ->
+ encode_bit_string_named([], Bits, NamedBitList, TagIn);
+encode_named_bit_string(Bits, _NamedBitList, TagIn) when is_bitstring(Bits) ->
+ encode_unnamed_bit_string(Bits, TagIn).
+
+encode_named_bit_string(C, [H|_]=Bits, NamedBitList, TagIn) when is_atom(H) ->
+ encode_bit_string_named(C, Bits, NamedBitList, TagIn);
+encode_named_bit_string(C, [{bit,_}|_]=Bits, NamedBitList, TagIn) ->
+ encode_bit_string_named(C, Bits, NamedBitList, TagIn);
+encode_named_bit_string(C, Bits, _NamedBitList, TagIn) when is_bitstring(Bits) ->
+ encode_unnamed_bit_string(C, Bits, TagIn).
%%============================================================================
%% Bitstring value, ITU_T X.690 Chapter 8.6
@@ -1251,6 +1303,19 @@ encode_restricted_string(OctetList, TagIn) when is_list(OctetList) ->
encode_tags(TagIn, OctetList, length(OctetList)).
%%============================================================================
+%% decode OCTET STRING to binary
+%%============================================================================
+
+decode_octet_string(Tlv, TagsIn) ->
+ Bin = match_and_collect(Tlv, TagsIn),
+ binary:copy(Bin).
+
+decode_octet_string(Tlv, Range, TagsIn) ->
+ Bin0 = match_and_collect(Tlv, TagsIn),
+ Bin = binary:copy(Bin0),
+ check_restricted_string(Bin, byte_size(Bin), Range).
+
+%%============================================================================
%% decode Numeric Printable Teletex Videotex Visible IA5 Graphic General strings
%%============================================================================
diff --git a/lib/asn1/src/asn1rtt_ext.erl b/lib/asn1/src/asn1rtt_ext.erl
index 46adb2007d..f3eee1cdd5 100644
--- a/lib/asn1/src/asn1rtt_ext.erl
+++ b/lib/asn1/src/asn1rtt_ext.erl
@@ -38,7 +38,7 @@ transform_to_EXTERNAL1990([{'context-negotiation',Context_negot}|Rest], Acc) ->
transform_to_EXTERNAL1990([asn1_NOVALUE|Rest], Acc) ->
transform_to_EXTERNAL1990(Rest, [asn1_NOVALUE|Acc]);
transform_to_EXTERNAL1990([Data_val_desc,Data_value], Acc)
- when is_list(Data_value)->
+ when is_list(Data_value); is_binary(Data_value) ->
list_to_tuple(lists:reverse([{'octet-aligned',Data_value},
Data_val_desc|Acc]));
transform_to_EXTERNAL1990([Data_val_desc,Data_value], Acc)
diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl
index 3309e6a4ca..71fec411a0 100644
--- a/lib/asn1/src/asn1rtt_per_common.erl
+++ b/lib/asn1/src/asn1rtt_per_common.erl
@@ -37,8 +37,10 @@
bitstring_from_positions/1,bitstring_from_positions/2,
to_bitstring/1,to_bitstring/2,
to_named_bitstring/1,to_named_bitstring/2,
- is_default_bitstring/5,
- extension_bitmap/3]).
+ bs_drop_trailing_zeroes/1,adjust_trailing_zeroes/2,
+ is_default_bitstring/3,is_default_bitstring/5,
+ extension_bitmap/3,
+ open_type_to_binary/1,legacy_open_type_to_binary/1]).
-define('16K',16384).
@@ -272,6 +274,25 @@ to_named_bitstring(Val, Lb) ->
%% for correctness, not speed.
adjust_trailing_zeroes(to_bitstring(Val), Lb).
+is_default_bitstring(asn1_DEFAULT, _, _) ->
+ true;
+is_default_bitstring(Named, Named, _) ->
+ true;
+is_default_bitstring(Bs, _, Bs) ->
+ true;
+is_default_bitstring(Val, _, Def) when is_bitstring(Val) ->
+ Sz = bit_size(Def),
+ case Val of
+ <<Def:Sz/bitstring,T/bitstring>> ->
+ NumZeroes = bit_size(T),
+ case T of
+ <<0:NumZeroes>> -> true;
+ _ -> false
+ end;
+ _ ->
+ false
+ end.
+
is_default_bitstring(asn1_DEFAULT, _, _, _, _) ->
true;
is_default_bitstring({Unused,Bin}, V0, V1, V2, V3) when is_integer(Unused) ->
@@ -306,6 +327,16 @@ is_default_bitstring(_, _, _, _, _) -> false.
extension_bitmap(Val, Pos, Limit) ->
extension_bitmap(Val, Pos, Limit, 0).
+open_type_to_binary({asn1_OPENTYPE,Bin}) when is_binary(Bin) ->
+ Bin.
+
+legacy_open_type_to_binary({asn1_OPENTYPE,Bin}) when is_binary(Bin) ->
+ Bin;
+legacy_open_type_to_binary(Bin) when is_binary(Bin) ->
+ Bin;
+legacy_open_type_to_binary(List) when is_list(List) ->
+ List.
+
%%%
%%% Internal functions.
%%%
@@ -438,6 +469,8 @@ adjust_trailing_zeroes(Bs0, Lb) ->
bs_drop_trailing_zeroes(Bs) ->
bs_drop_trailing_zeroes(Bs, bit_size(Bs)).
+bs_drop_trailing_zeroes(Bs, 0) ->
+ Bs;
bs_drop_trailing_zeroes(Bs0, Sz0) when Sz0 < 8 ->
<<Byte:Sz0>> = Bs0,
Sz = Sz0 - ntz(Byte),
diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl
index 83bd66a631..3b34feb5a3 100644
--- a/lib/asn1/test/asn1_SUITE.erl
+++ b/lib/asn1/test/asn1_SUITE.erl
@@ -328,6 +328,10 @@ testCompactBitString(Config, Rule, Opts) ->
testPrimStrings(Config) ->
test(Config, fun testPrimStrings/3, [ber,{ber,[der]},per,uper]).
testPrimStrings(Config, Rule, Opts) ->
+ LegacyOpts = [legacy_erlang_types|Opts],
+ asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
+ [Rule|LegacyOpts]),
+ testPrimStrings_cases(Rule, LegacyOpts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config, [Rule|Opts]),
testPrimStrings_cases(Rule, Opts),
asn1_test_lib:compile_all(["PrimStrings", "BitStr"], Config,
@@ -432,7 +436,8 @@ testDef(Config, Rule, Opts) ->
testDEFAULT(Config) ->
test(Config, fun testDEFAULT/3, [ber,{ber,[der]},per,uper]).
testDEFAULT(Config, Rule, Opts) ->
- asn1_test_lib:compile_all(["Def","Default"], Config, [Rule|Opts]),
+ asn1_test_lib:compile_all(["Def","Default"], Config,
+ [legacy_erlang_types,Rule|Opts]),
testDef:main(Rule),
testSeqSetDefaultVal:main(Rule, Opts).
@@ -766,7 +771,10 @@ testParameterizedInfObj(Config) ->
testParameterizedInfObj(Config, Rule, Opts) ->
Files = ["Param","Param2"],
asn1_test_lib:compile_all(Files, Config, [Rule|Opts]),
- testParameterizedInfObj:main(Config, Rule).
+ testParameterizedInfObj:main(Config, Rule),
+ asn1_test_lib:compile("Param", Config,
+ [legacy_erlang_types,Rule|Opts]),
+ testParameterizedInfObj:param(Rule).
testFragmented(Config) ->
test(Config, fun testFragmented/3).
@@ -784,7 +792,8 @@ testMergeCompile(Config, Rule, Opts) ->
testobj(Config) -> test(Config, fun testobj/3).
testobj(Config, Rule, Opts) ->
- asn1_test_lib:compile("RANAP", Config, [Rule|Opts]),
+ asn1_test_lib:compile("RANAP", Config, [legacy_erlang_types,
+ Rule|Opts]),
asn1_test_lib:compile_erlang("testobj", Config, []),
ok = testobj:run(),
ok = testParameterizedInfObj:ranap(Rule).
@@ -811,7 +820,8 @@ testImport(Config, Rule, Opts) ->
testMegaco(Config) -> test(Config, fun testMegaco/3).
testMegaco(Config, Rule, Opts) ->
- {ok, Module1, Module2} = testMegaco:compile(Config, Rule, Opts),
+ {ok, Module1, Module2} = testMegaco:compile(Config, Rule,
+ [legacy_erlang_types|Opts]),
ok = testMegaco:main(Module1, Config),
ok = testMegaco:main(Module2, Config).
@@ -892,7 +902,8 @@ specialized_decodes(Config, Rule, Opts) ->
"PartialDecMyHTTP.asn",
"MEDIA-GATEWAY-CONTROL.asn",
"P-Record"],
- Config, [Rule, asn1config|Opts]),
+ Config,
+ [Rule,legacy_erlang_types,asn1config|Opts]),
test_partial_incomplete_decode:test(Config),
test_selective_decode:test().
@@ -1022,7 +1033,8 @@ test_x691(Config, Rule, Opts) ->
test_x691:cases(Rule),
%% OTP-7708.
- asn1_test_lib:compile("EUTRA-extract-55", Config, [Rule|Opts]),
+ asn1_test_lib:compile("EUTRA-extract-55", Config,
+ [legacy_erlang_types,Rule|Opts]),
%% OTP-7763.
Val = {'Seq',15,lists:duplicate(8, 0),[0],lists:duplicate(28, 0),15,true},
@@ -1128,21 +1140,21 @@ END
ok = asn1ct:compile(File, [{outdir, PrivDir}]).
-timer_compile(Config, Rule, Opts) ->
+timer_compile(Config, Rule) ->
asn1_test_lib:compile_all(["H235-SECURITY-MESSAGES", "H323-MESSAGES"],
- Config, [Rule|Opts]).
+ Config, [no_ok_wrapper,Rule]).
testTimer_ber(Config) ->
- timer_compile(Config,ber,[]),
- testTimer:go(Config,ber).
+ timer_compile(Config, ber),
+ testTimer:go().
testTimer_per(Config) ->
- timer_compile(Config,per,[]),
- testTimer:go(Config,per).
+ timer_compile(Config, per),
+ testTimer:go().
testTimer_uper(Config) ->
- timer_compile(Config,uper,[]),
- {comment,_} = testTimer:go(Config,uper).
+ timer_compile(Config, uper),
+ testTimer:go().
%% Test of multiple-line comment, OTP-8043
testComment(suite) -> [];
@@ -1200,8 +1212,8 @@ ticket_7407_code(FinalPadding) ->
eutra1(msg) ->
{'BCCH-BCH-Message',
- {'MasterInformationBlock',[0,1,0,1],[1,0,1,0],
- {'PHICH-Configuration',short,ffs},[1,0,1,0,0,0,0,0]}}.
+ {'MasterInformationBlock',<<2#0101:4>>,<<2#1010:4>>,
+ {'PHICH-Configuration',short,ffs},<<2#10100000>>}}.
eutra1(result, true) ->
<<90,80,0>>;
diff --git a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
index 06eba8b6eb..0bf4425263 100644
--- a/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
+++ b/lib/asn1/test/asn1_SUITE_data/TCAPPackage_msg.erl
@@ -47,7 +47,7 @@ val('TransactionPDU') ->
dialoguePortion=val('DialoguePortion'),
componentPortion=val('ComponentSequence')};
val('TransactionID') ->
- "OCTET STRING";
+ <<"OCTET STRING">>;
val('DialoguePortion') ->
#'DialoguePortion'{version=val('ProtocolVersion'),
applicationContext={integerApplicationId,12},
@@ -57,23 +57,23 @@ val('DialoguePortion') ->
val('Confidentiality') ->
#'Confidentiality'{confidentialityId={integerConfidentialityId,14}};
val('ProtocolVersion') ->
- "K";
+ <<"K">>;
val('UserInformation') ->
[val('EXTERNAL'),val('EXTERNAL')];
val('EXTERNAL') ->
#'EXTERNAL'{'direct-reference'={0,1,2},
- encoding={'single-ASN1-type',[1,2,3,4]}};
+ encoding={'single-ASN1-type',<<1,2,3,4>>}};
val('ComponentSequence') ->
[val('ComponentPDU',1),val('ComponentPDU',2),val('ComponentPDU',3)];
val('Invoke') ->
- #'Invoke'{componentIDs="AB",
+ #'Invoke'{componentIDs = <<"AB">>,
opcode={local,-2},
parameter=running};
val('ReturnResult') ->
- #'ReturnResult'{componentID="C",
+ #'ReturnResult'{componentID = <<"C">>,
parameter=[1,2,3,4]};
val('ReturnError') ->
- #'ReturnError'{componentID="D",
+ #'ReturnError'{componentID = <<"D">>,
errorCode={local,21},
parameter=true};
val('Abort') ->
@@ -87,8 +87,8 @@ val(Type) ->
check_result('PackageType',unidirectional,Res) ->
{unidirectional,
{'UniTransactionPDU',
- "OCTET STRING",
- {'DialoguePortion',"K",
+ <<"OCTET STRING">>,
+ {'DialoguePortion',<<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -96,14 +96,14 @@ check_result('PackageType',unidirectional,Res) ->
{'Confidentiality',
{integerConfidentialityId,14}}},
[{invokeLast,
- {_,"AB",{local,-2},running}},
- {returnResultLast,{_,"C",_}},
- {returnError,{_,"D",{local,21},true}}]}} = Res,
+ {_,<<"AB">>,{local,-2},running}},
+ {returnResultLast,{_,<<"C">>,_}},
+ {returnError,{_,<<"D">>,{local,21},true}}]}} = Res,
ok;
%% check_OT_val(OTVal);
check_result('PackageType',abort,Res)->
- {abort,{'Abort',"OCTET STRING",
- {'DialoguePortion',"K",
+ {abort,{'Abort',<<"OCTET STRING">>,
+ {'DialoguePortion',<<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -114,9 +114,9 @@ check_result('PackageType',abort,Res)->
ok;
%% check_OT_val(OTVal);
check_result('PackageType',response,Res) ->
- {response,{'TransactionPDU',"OCTET STRING",
+ {response,{'TransactionPDU',<<"OCTET STRING">>,
{'DialoguePortion',
- "K",
+ <<"K">>,
{integerApplicationId,12},
[_,%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal},
_],%{'EXTERNAL',{syntax,{0,1,2}},asn1_NOVALUE,OTVal}],
@@ -124,11 +124,11 @@ check_result('PackageType',response,Res) ->
{'Confidentiality',
{integerConfidentialityId,14}}},
[{invokeLast,
- {_,"AB",{local,-2},running}},
+ {_,<<"AB">>,{local,-2},running}},
{returnResultLast,
- {_,"C",_}},
+ {_,<<"C">>,_}},
{returnError,
- {_,"D",{local,21},true}}]}} = Res,
+ {_,<<"D">>,{local,21},true}}]}} = Res,
ok.
%% check_OT_val(OTVal).
diff --git a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
index 8e21e6ca84..a1e563f6be 100644
--- a/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
+++ b/lib/asn1/test/asn1_SUITE_data/extensionAdditionGroup.erl
@@ -67,8 +67,8 @@ run3(Erule) ->
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE,
- [[80,66,0,5,10,0,5,0,24,11,7,84,54,33,0,1,1,0,0,0,1,39,5,66,127,0,0,1],
- []],
+ [<<80,66,0,5,10,0,5,0,24,11,7,84,54,33,0,1,1,0,0,0,1,39,5,66,127,0,0,1>>,
+ <<>>],
{'RRC-RadioResourceConfigDedicated',
[{'RRC-SRB-ToAddMod',1,
{explicitValue,
diff --git a/lib/asn1/test/h323test.erl b/lib/asn1/test/h323test.erl
index 3baaa994ea..7577928493 100644
--- a/lib/asn1/test/h323test.erl
+++ b/lib/asn1/test/h323test.erl
@@ -42,7 +42,7 @@ alerting_val() ->
{'TerminalInfo',asn1_NOVALUE},
false,false},
asn1_NOVALUE,
- {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ {'CallIdentifier',<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE}.
@@ -57,18 +57,18 @@ connect_val() ->
{'Connect-UUIE',
{0,0,8,2250,0,2},
{ipAddress,
- {'TransportAddress_ipAddress',[136,225,41,58],1187}},
+ {'TransportAddress_ipAddress',<<136,225,41,58>>,1187}},
{'EndpointType',asn1_NOVALUE,
{'VendorIdentifier',
{'H221NonStandard',181,0,21324},
- [77,105,99,114,111,115,111,102,116,174,32,78,101,116,
- 77,101,100,116,105,110,103,174,0],
- [51,46,48,0]},
+ <<77,105,99,114,111,115,111,102,116,174,32,78,101,116,
+ 77,101,100,116,105,110,103,174,0>>,
+ <<51,46,48,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
{'TerminalInfo',asn1_NOVALUE},
false,false},
- [22,137,237,197,191,35,211,17,140,45,0,192,79,75,28,208],
- {'CallIdentifier',[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
+ <<22,137,237,197,191,35,211,17,140,45,0,192,79,75,28,208>>,
+ {'CallIdentifier',<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0>>},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}},
asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE},
asn1_NOVALUE}.
diff --git a/lib/asn1/test/testChoExtension.erl b/lib/asn1/test/testChoExtension.erl
index e54cbe825b..09e19ceebb 100644
--- a/lib/asn1/test/testChoExtension.erl
+++ b/lib/asn1/test/testChoExtension.erl
@@ -31,13 +31,13 @@ extension(_Rules) ->
%% A trick to encode with another compatible CHOICE type to test reception
%% extension alternative
- roundtrip('ChoExt1x', {str,"abc"}),
+ roundtrip('ChoExt1x', {str,<<"abc">>}),
roundtrip('ChoExt2', {bool,true}),
roundtrip('ChoExt2', {int,33}),
roundtrip('ChoExt3', {bool,true}),
roundtrip('ChoExt3', {int,33}),
- roundtrip('ChoExt4', {str,"abc"}),
+ roundtrip('ChoExt4', {str,<<"abc">>}),
roundtrip('ChoEmptyRoot', {bool,false}),
roundtrip('ChoEmptyRoot', {bool,true}),
diff --git a/lib/asn1/test/testChoExternal.erl b/lib/asn1/test/testChoExternal.erl
index 12abdbb2bc..0914d54f33 100644
--- a/lib/asn1/test/testChoExternal.erl
+++ b/lib/asn1/test/testChoExternal.erl
@@ -31,16 +31,16 @@ external(_Rules) ->
roundtrip('ChoXBool', {xboolImp,true}),
roundtrip('ChoXBool', {xboolExp,true}),
- roundtrip('NT', {os,"kalle"}),
- roundtrip('Exp', {os,"kalle"}),
- roundtrip('NTNT', {os,"kalle"}),
- roundtrip('NTExp', {os,"kalle"}),
- roundtrip('ExpNT', {os,"kalle"}),
- roundtrip('ExpExp', {os,"kalle"}),
- roundtrip('XNTNT', {os,"kalle"}),
- roundtrip('XNTExp', {os,"kalle"}),
- roundtrip('XExpNT', {os,"kalle"}),
- roundtrip('XExpExp', {os,"kalle"}),
+ roundtrip('NT', {os,<<"kalle">>}),
+ roundtrip('Exp', {os,<<"kalle">>}),
+ roundtrip('NTNT', {os,<<"kalle">>}),
+ roundtrip('NTExp', {os,<<"kalle">>}),
+ roundtrip('ExpNT', {os,<<"kalle">>}),
+ roundtrip('ExpExp', {os,<<"kalle">>}),
+ roundtrip('XNTNT', {os,<<"kalle">>}),
+ roundtrip('XNTExp', {os,<<"kalle">>}),
+ roundtrip('XExpNT', {os,<<"kalle">>}),
+ roundtrip('XExpExp', {os,<<"kalle">>}),
ok.
diff --git a/lib/asn1/test/testChoOptional.erl b/lib/asn1/test/testChoOptional.erl
index f5e77cb721..71a7346e3f 100644
--- a/lib/asn1/test/testChoOptional.erl
+++ b/lib/asn1/test/testChoOptional.erl
@@ -27,16 +27,20 @@
run() ->
roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho=asn1_NOVALUE}),
roundtrip('Seq1', #'Seq1'{bool=true,int=233,cho=asn1_NOVALUE}),
- roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={vsCho,"Vs Str"}}),
- roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"}}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,
+ cho={vsCho,"Vs Str"}}),
+ roundtrip('Seq1', #'Seq1'{bool=true,int=asn1_NOVALUE,
+ cho={ocStrCho,<<"Oct Str">>}}),
roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho=asn1_NOVALUE,bool=true}),
roundtrip('Seq2', #'Seq2'{int=233,cho=asn1_NOVALUE,bool=true}),
roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={vsCho,"Vs Str"},bool=true}),
- roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={ocStrCho,"Oct Str"},bool=true}),
+ roundtrip('Seq2', #'Seq2'{int=asn1_NOVALUE,cho={ocStrCho,<<"Oct Str">>},
+ bool=true}),
roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=asn1_NOVALUE,bool=true}),
roundtrip('Seq3', #'Seq3'{cho=asn1_NOVALUE,int=233,bool=true}),
roundtrip('Seq3', #'Seq3'{cho={vsCho,"Vs Str"},int=asn1_NOVALUE,bool=true}),
- roundtrip('Seq3', #'Seq3'{cho={ocStrCho,"Oct Str"},int=asn1_NOVALUE,bool=true}),
+ roundtrip('Seq3', #'Seq3'{cho={ocStrCho,<<"Oct Str">>},
+ int=asn1_NOVALUE,bool=true}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoRecursive.erl b/lib/asn1/test/testChoRecursive.erl
index 593b845949..ccd60c2897 100644
--- a/lib/asn1/test/testChoRecursive.erl
+++ b/lib/asn1/test/testChoRecursive.erl
@@ -31,13 +31,13 @@ recursive(_Rules) ->
roundtrip('ChoRec',
{something,
#'ChoRec_something'{a = 77,
- b = "some octets here",
+ b = <<"some octets here">>,
c = {nothing,'NULL'}}}),
roundtrip('ChoRec', {nothing,'NULL'}),
roundtrip('ChoRec2',
{something,
#'ChoRec2_something'{a = 77,
- b = "some octets here",
+ b = <<"some octets here">>,
c = {nothing,'NULL'}}}),
roundtrip('ChoRec2', {nothing,'NULL'}),
ok.
diff --git a/lib/asn1/test/testChoTypeRefCho.erl b/lib/asn1/test/testChoTypeRefCho.erl
index cd2672add0..636c301403 100644
--- a/lib/asn1/test/testChoTypeRefCho.erl
+++ b/lib/asn1/test/testChoTypeRefCho.erl
@@ -30,7 +30,7 @@ choice(_Rules) ->
roundtrip('ChoTRcho', {'choChoE-E',{choInt,88}}),
roundtrip('ChoChoInline', {bool1,true}),
roundtrip('ChoChoInline', {choCho,{bool,true}}),
- roundtrip('ChoChoInline', {choCho,{octStr,"kk"}}),
+ roundtrip('ChoChoInline', {choCho,{octStr,<<"kk">>}}),
roundtrip('ChoChoInline', {choCho,{int,55}}),
ok.
diff --git a/lib/asn1/test/testChoTypeRefPrim.erl b/lib/asn1/test/testChoTypeRefPrim.erl
index 8a2bc7bd8e..747baeddd8 100644
--- a/lib/asn1/test/testChoTypeRefPrim.erl
+++ b/lib/asn1/test/testChoTypeRefPrim.erl
@@ -25,18 +25,18 @@
prim(_Rules) ->
roundtrip('ChoTR', {bool,true}),
- roundtrip('ChoTR', {octStr,[11,12,13,14,15,16,17]}),
+ roundtrip('ChoTR', {octStr,<<11,12,13,14,15,16,17>>}),
roundtrip('ChoTR', {int,233}),
- roundtrip('ChoTR', {octStr,"Stringing in the rain"}),
- roundtrip('ChoTR2', {octStr,"A string"}),
- roundtrip('ChoTR2', {octStrI,"A string"}),
- roundtrip('ChoTR2', {octStrE,"A string"}),
- roundtrip('ChoTR2', {'octStr-I',"A string"}),
- roundtrip('ChoTR2', {'octStrI-I',"A string"}),
- roundtrip('ChoTR2', {'octStrE-I',"A string"}),
- roundtrip('ChoTR2', {'octStr-E',"A string"}),
- roundtrip('ChoTR2', {'octStrI-E',"A string"}),
- roundtrip('ChoTR2', {'octStrE-E',"A string"}),
+ roundtrip('ChoTR', {octStr,<<"Stringing in the rain">>}),
+ roundtrip('ChoTR2', {octStr,<<"A string">>}),
+ roundtrip('ChoTR2', {octStrI,<<"A string">>}),
+ roundtrip('ChoTR2', {octStrE,<<"A string">>}),
+ roundtrip('ChoTR2', {'octStr-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrI-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrE-I',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStr-E',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrI-E',<<"A string">>}),
+ roundtrip('ChoTR2', {'octStrE-E',<<"A string">>}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoTypeRefSeq.erl b/lib/asn1/test/testChoTypeRefSeq.erl
index 86c22619aa..91d0b45e89 100644
--- a/lib/asn1/test/testChoTypeRefSeq.erl
+++ b/lib/asn1/test/testChoTypeRefSeq.erl
@@ -28,15 +28,24 @@
-record('ChoSeqExp', {seqInt, seqOs}).
seq(_Rules) ->
- roundtrip('ChoTRseq', {choSeq,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {choSeqI,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {choSeqE,#'ChoSeq'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeq-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqI-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqE-I',#'ChoSeqImp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeq-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqI-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
- roundtrip('ChoTRseq', {'choSeqE-E',#'ChoSeqExp'{seqInt=88,seqOs="A string"}}),
+ roundtrip('ChoTRseq', {choSeq,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {choSeqI,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {choSeqE,#'ChoSeq'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeq-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqI-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqE-I',#'ChoSeqImp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeq-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqI-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
+ roundtrip('ChoTRseq', {'choSeqE-E',#'ChoSeqExp'{seqInt=88,
+ seqOs = <<"A string">>}}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testChoTypeRefSet.erl b/lib/asn1/test/testChoTypeRefSet.erl
index fd3d75cbcb..bd9068b53e 100644
--- a/lib/asn1/test/testChoTypeRefSet.erl
+++ b/lib/asn1/test/testChoTypeRefSet.erl
@@ -28,15 +28,24 @@
-record('ChoSetExp', {setInt, setOs}).
set(_Rules) ->
- roundtrip('ChoTRset', {choSet,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {choSetI,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {choSetE,#'ChoSet'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSet-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetI-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetE-I',#'ChoSetImp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSet-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetI-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
- roundtrip('ChoTRset', {'choSetE-E',#'ChoSetExp'{setInt=88,setOs="A string"}}),
+ roundtrip('ChoTRset', {choSet,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {choSetI,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {choSetE,#'ChoSet'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSet-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetI-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetE-I',#'ChoSetImp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSet-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetI-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
+ roundtrip('ChoTRset', {'choSetE-E',#'ChoSetExp'{setInt=88,
+ setOs = <<"A string">>}}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testConstraints.erl b/lib/asn1/test/testConstraints.erl
index 54ba748519..3ccf883bd6 100644
--- a/lib/asn1/test/testConstraints.erl
+++ b/lib/asn1/test/testConstraints.erl
@@ -208,14 +208,14 @@ int_constraints(Rules) ->
%% More SIZE Constraints
%%==========================================================
- roundtrip('FixedSize', "0123456789"),
- roundtrip('FixedSize2', "0123456789"),
- roundtrip('FixedSize2', "0123456789abcdefghij"),
+ roundtrip('FixedSize', <<"0123456789">>),
+ roundtrip('FixedSize2', <<"0123456789">>),
+ roundtrip('FixedSize2', <<"0123456789abcdefghij">>),
range_error(Rules, 'FixedSize', "short"),
range_error(Rules, 'FixedSize2', "short"),
- [roundtrip('VariableSize', lists:seq($A, $A+L-1)) ||
+ [roundtrip('VariableSize', list_to_binary(lists:seq($A, $A+L-1))) ||
L <- lists:seq(1, 10)],
roundtrip_enc('ShorterExt', "a", shorter_ext(Rules, "a")),
diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl
index 8d5fa07a5b..35b21f90a9 100644
--- a/lib/asn1/test/testFragmented.erl
+++ b/lib/asn1/test/testFragmented.erl
@@ -22,10 +22,10 @@
-export([main/1]).
main(_Erule) ->
- roundtrip('PDU', {'PDU',1,false,["abc","def"]}),
+ roundtrip('PDU', {'PDU',1,false,[<<"abc">>,<<"def">>]}),
B256 = lists:seq(0, 255),
K1 = lists:duplicate(4, B256),
- K8 = binary_to_list(iolist_to_binary(lists:duplicate(8, K1))),
+ K8 = iolist_to_binary(lists:duplicate(8, K1)),
roundtrip('PDU', {'PDU',1,false,[K8,K8]}),
roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8]}),
roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8]}),
diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl
index cd335e1023..311595cfda 100644
--- a/lib/asn1/test/testInfObj.erl
+++ b/lib/asn1/test/testInfObj.erl
@@ -49,7 +49,7 @@ main(_Erule) ->
roundtrip('RANAPextract1', 'InitiatingMessage2', Val3),
roundtrip('InfObj', 'MyPdu', {'MyPdu',42,12,false,"string"}),
- roundtrip('InfObj', 'MyPdu', {'MyPdu',{'Seq',1023,"hello"},
+ roundtrip('InfObj', 'MyPdu', {'MyPdu',{'Seq',1023,<<"hello">>},
42,true,"longer string"}),
roundtrip('InfObj', 'MyPdu', {'MyPdu',"75712346",43,true,"string"}),
@@ -110,11 +110,11 @@ main(_Erule) ->
enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,42,true,"abc"}),
+ {'Multiple-Optionals',1,42,true,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,asn1_NOVALUE,true,"abc"}),
+ {'Multiple-Optionals',1,asn1_NOVALUE,true,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
- {'Multiple-Optionals',1,42,asn1_NOVALUE,"abc"}),
+ {'Multiple-Optionals',1,42,asn1_NOVALUE,<<"abc">>}),
roundtrip('InfObj', 'Multiple-Optionals',
{'Multiple-Optionals',1,42,true,asn1_NOVALUE}),
roundtrip('InfObj', 'Multiple-Optionals',
diff --git a/lib/asn1/test/testMergeCompile.erl b/lib/asn1/test/testMergeCompile.erl
index 7cda71c441..b21897cfc2 100644
--- a/lib/asn1/test/testMergeCompile.erl
+++ b/lib/asn1/test/testMergeCompile.erl
@@ -30,12 +30,12 @@
main(Erule) ->
%% test of module MS.set.asn that tests OTP-4492: different tagdefault in
%% modules and types with same name in modules
- MSVal = {'Type4M2',8,true,three,"OCTET STRING"},
+ MSVal = {'Type4M2',8,true,three,<<"OCTET STRING">>},
asn1_test_lib:roundtrip('MS', 'Type4M2', MSVal),
%% test of RANAP.set.asn1
PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}],
- EncVal =
+ EncVal0 =
case Erule of
per ->
<<1,100>>;
@@ -44,6 +44,7 @@ main(Erule) ->
ber ->
<<2,1,1>>
end,
+ EncVal = {asn1_OPENTYPE,EncVal0},
PEVal2 = [{'ProtocolExtensionField',1,ignore,EncVal},
{'ProtocolExtensionField',2,reject,EncVal}],
Val2 =
@@ -142,7 +143,40 @@ test('InsertSubscriberDataArg') ->
ok.
test(mvrasn6,'InsertSubscriberDataArg') ->
- Val = {'InsertSubscriberDataArg',"IMSI","Address","C",serviceGranted,["abc","cde"],["tele","serv","ice"],asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,{'NAEA-PreferredCI',"NCC",asn1_NOVALUE},{'GPRSSubscriptionData','NULL',[{'PDP-Context',49,"PT","PDP-Address","QoS",'NULL',"APN",asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],asn1_NOVALUE},'NULL',onlyMSC,{'LSAInformation','NULL',accessOutsideLSAsAllowed,[{'LSAData',"LSA","L",'NULL',asn1_NOVALUE},{'LSAData',"LSA","L",'NULL',asn1_NOVALUE}],asn1_NOVALUE},'NULL',{'LCSInformation',["Addr","ess","string"],[{'LCS-PrivacyClass',"S","ExtSS",notifyLocationAllowed,[{'ExternalClient',{'LCSClientExternalID',"Addr",asn1_NOVALUE},asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],[broadcastService,anonymousLocation,targetMSsubscribedService],asn1_NOVALUE}],asn1_NOVALUE},100,"age",{'MC-SS-Info',"S","ExtSS",5,4,asn1_NOVALUE},"C",{'SGSN-CAMEL-SubscriptionInfo',{'GPRS-CSI',[{'GPRS-CamelTDPData',attach,13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},{'SMS-CSI',[{'SMS-CAMEL-TDP-DataList','sms-CollectedInfo',13,"Addr",continueTransaction,asn1_NOVALUE}],11,asn1_NOVALUE,'NULL','NULL'},asn1_NOVALUE},"ON"},
- {ok,Bytes} = 'Mvrasn6':encode('InsertSubscriberDataArg', Val),
- {ok,_} = 'Mvrasn6':decode('InsertSubscriberDataArg', Bytes),
+ Val = {'InsertSubscriberDataArg',<<"IMSI">>,<<"Address">>,<<"C">>,
+ serviceGranted,[<<"abc">>,<<"cde">>],
+ [<<"tele">>,<<"serv">>,<<"ice">>],
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE,
+ {'NAEA-PreferredCI',<<"NCC">>,asn1_NOVALUE},
+ {'GPRSSubscriptionData','NULL',
+ [{'PDP-Context',49,<<"PT">>,<<"PDP-Address">>,<<"QoS">>,
+ 'NULL',<<"APN">>,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],
+ asn1_NOVALUE},'NULL',onlyMSC,
+ {'LSAInformation','NULL',accessOutsideLSAsAllowed,
+ [{'LSAData',<<"LSA">>,<<"L">>,'NULL',asn1_NOVALUE},
+ {'LSAData',<<"LSA">>,<<"L">>,'NULL',asn1_NOVALUE}],
+ asn1_NOVALUE},'NULL',
+ {'LCSInformation',[<<"Addr">>,<<"ess">>,<<"string">>],
+ [{'LCS-PrivacyClass',<<"S">>,<<"ExtSS">>,notifyLocationAllowed,
+ [{'ExternalClient',
+ {'LCSClientExternalID',<<"Addr">>,asn1_NOVALUE},
+ asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}],
+ [broadcastService,anonymousLocation,targetMSsubscribedService],
+ asn1_NOVALUE}],asn1_NOVALUE},
+ 100,<<"age">>,
+ {'MC-SS-Info',<<"S">>,<<"ExtSS">>,5,4,asn1_NOVALUE},
+ <<"C">>,
+ {'SGSN-CAMEL-SubscriptionInfo',
+ {'GPRS-CSI',
+ [{'GPRS-CamelTDPData',attach,13,<<"Addr">>,
+ continueTransaction,asn1_NOVALUE}],
+ 11,asn1_NOVALUE,'NULL','NULL'},
+ {'SMS-CSI',
+ [{'SMS-CAMEL-TDP-Data','sms-CollectedInfo',
+ 13,<<"Addr">>,continueTransaction,asn1_NOVALUE}],
+ 11,asn1_NOVALUE,'NULL','NULL'},
+ asn1_NOVALUE},
+ <<"ON">>},
+ asn1_test_lib:roundtrip('Mvrasn6', 'InsertSubscriberDataArg', Val),
ok.
diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl
index f3b4f9b170..2fe900792d 100644
--- a/lib/asn1/test/testParameterizedInfObj.erl
+++ b/lib/asn1/test/testParameterizedInfObj.erl
@@ -20,7 +20,7 @@
-module(testParameterizedInfObj).
--export([main/2,ranap/1]).
+-export([main/2,param/1,ranap/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -36,31 +36,29 @@ main(Config, Erule) ->
param2(Config, Erule).
param(Erule) ->
- PERVal = #'AllocationOrRetentionPriority'
- {priorityLevel = true,
- iE_Extensions =
- [#'ProtocolExtensionField'{id=14,
- criticality=reject,
- extensionValue= <<0>>},
- #'ProtocolExtensionField'{id=2,
- criticality=ignore,
- extensionValue= <<1>>}]},
- BERVal = #'AllocationOrRetentionPriority'
- {priorityLevel = true,
- iE_Extensions =
- [#'ProtocolExtensionField'{id=14,
- criticality=reject,
- extensionValue= <<2,1,0>>},
- #'ProtocolExtensionField'{id=2,
- criticality=ignore,
- extensionValue= <<2,1,1>>}]},
- case Erule of
- ber ->
- roundtrip('AllocationOrRetentionPriority', BERVal);
- per ->
- roundtrip('AllocationOrRetentionPriority', PERVal);
- uper ->
- roundtrip('AllocationOrRetentionPriority', PERVal)
+ Exts0 = case Erule of
+ ber ->
+ %% As implemented, the open type must contain
+ %% valid BER-encoded data.
+ [{14,<<2,1,0>>},{2,<<2,1,0>>}];
+ _ ->
+ %% The PER decoder will not look inside the open type.
+ [{14,<<0>>},{2,<<"anything goes">>}]
+ end,
+ case 'Param':legacy_erlang_types() of
+ false ->
+ Exts = [#'ProtocolExtensionField'{id=Id,
+ criticality=reject,
+ extensionValue={asn1_OPENTYPE,
+ Eval}} ||
+ {Id,Eval} <- Exts0],
+ aor_roundtrip(Exts);
+ true ->
+ Exts = [#'ProtocolExtensionField'{id=Id,
+ criticality=reject,
+ extensionValue=Eval} ||
+ {Id,Eval} <- Exts0],
+ aor_roundtrip(Exts)
end,
%% test code for OTP-4242, ValueFromObject
@@ -72,8 +70,13 @@ param(Erule) ->
{error,_Reason2} = 'Param':decode('OS2',[4,4,1,2,3,4]),
{ok,_Val4} = 'Param':decode('OS1',[4,2,1,2]);
_ -> %per/uper
- roundtrip('OS1', [1,2]),
- {error,_Reason3} = 'Param':encode('OS1', [1,2,3,4])
+ case 'Param':legacy_erlang_types() of
+ false ->
+ roundtrip('OS1', <<1,2>>),
+ {error,_Reason3} = 'Param':encode('OS1', <<1,2,3,4>>);
+ true ->
+ ok
+ end
end,
roundtrip('Scl', {'Scl',42,{a,9738654}}),
@@ -82,6 +85,11 @@ param(Erule) ->
ok.
+aor_roundtrip(Exts) ->
+ Val = #'AllocationOrRetentionPriority'{priorityLevel = true,
+ iE_Extensions = Exts},
+ roundtrip('AllocationOrRetentionPriority', Val).
+
roundtrip(T, V) ->
asn1_test_lib:roundtrip('Param', T, V).
@@ -102,11 +110,11 @@ ranap(_Erule) ->
param2(Config, Erule) ->
roundtrip2('HandoverRequired',
{'HandoverRequired',
- [{'ProtocolIE-Field',1,"ABC"},
+ [{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,577799}]}),
Enc = roundtrip2('HandoverRequired',
{'HandoverRequired',
- [{'ProtocolIE-Field',1,"ABC"},
+ [{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,-42},
{'ProtocolIE-Field',100,533},
{'ProtocolIE-Field',101,true}]}),
@@ -127,17 +135,19 @@ param2(Config, Erule) ->
[{i,DataDir},{outdir,CaseDir},Erule]),
%% Decompile extended data.
- {ok,{'HandoverRequired',[{'ProtocolIE-Field',1,"ABC"},
+ {ok,{'HandoverRequired',[{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,-42},
- {'ProtocolIE-Field',100,Open100},
- {'ProtocolIE-Field',101,Open101}]}} =
+ {'ProtocolIE-Field',100,
+ {asn1_OPENTYPE,Open100}},
+ {'ProtocolIE-Field',101,
+ {asn1_OPENTYPE,Open101}}]}} =
'Param2':decode('HandoverRequired', Enc),
true = is_binary(Open100),
true = is_binary(Open101),
%% Test single root.
roundtrip2('SingleRoot',
- {'SingleRoot',[{'ProtocolIE-Field',1,"ABC"},
+ {'SingleRoot',[{'ProtocolIE-Field',1,<<"ABC">>},
{'ProtocolIE-Field',2,9999}]}),
ok.
diff --git a/lib/asn1/test/testPrimExternal.erl b/lib/asn1/test/testPrimExternal.erl
index 07a1de931f..a03760976d 100644
--- a/lib/asn1/test/testPrimExternal.erl
+++ b/lib/asn1/test/testPrimExternal.erl
@@ -45,6 +45,6 @@ external(_Rules) ->
'XExpNT',
'XExpImp',
'XExpExp'],
- _ = [asn1_test_lib:roundtrip('PrimExternal', T, "kalle") ||
+ _ = [asn1_test_lib:roundtrip('PrimExternal', T, <<"kalle">>) ||
T <- Types],
ok.
diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl
index 2fe0780701..3262d61a4d 100644
--- a/lib/asn1/test/testPrimStrings.erl
+++ b/lib/asn1/test/testPrimStrings.erl
@@ -34,14 +34,11 @@
fragmented(Rules) ->
Lens = fragmented_lengths(),
- fragmented_octet_string(Rules, Lens),
- case Rules of
- per ->
- %% NYI.
- ok;
- _ ->
- fragmented_strings(Lens)
- end.
+ case 'PrimStrings':legacy_erlang_types() of
+ false -> fragmented_octet_string(Rules, Lens);
+ true -> ok
+ end,
+ fragmented_strings(Lens).
fragmented_strings(Lens) ->
Types = ['Ns','Ps','Ps11','Vis','IA5'],
@@ -74,33 +71,37 @@ bit_string(Rules, Opts) ->
%% Bs1 ::= BIT STRING
%%==========================================================
- bs_roundtrip('Bs1', 0, <<>>),
- bs_roundtrip('Bs1', 4, <<1:3>>),
- bs_roundtrip('Bs1', 15, <<15:4>>),
- bs_roundtrip('Bs1', 255, <<255:8>>),
-
- bs_roundtrip('Bs1', 256, [0,0,0,0,0,0,0,0,1]),
- bs_roundtrip('Bs1', 257, [1,0,0,0,0,0,0,0,1]),
- bs_roundtrip('Bs1', 444, [0,0,1,1,1,1,0,1,1]),
-
- {ok,Enc1} = 'PrimStrings':encode('Bs1', 12345678901234567890),
- {ok,_} = 'PrimStrings':decode('Bs1', Enc1),
+ bs_roundtrip('Bs1', <<>>),
+ bs_roundtrip('Bs1', <<1:3>>),
+ bs_roundtrip('Bs1', <<15:4>>),
+ bs_roundtrip('Bs1', <<2#010010:6>>),
+ bs_roundtrip('Bs1', <<2#11111111:8>>),
+ bs_roundtrip('Bs1', <<2#100000000:9>>),
+ bs_roundtrip('Bs1', <<2#100000001:9>>),
+ bs_roundtrip('Bs1', <<2#001111011:9>>),
+ bs_roundtrip('Bs1', <<2#0100101111100010011:19>>),
- bs_roundtrip('Bs1', [1,1,1,1,1,1,1,1]),
- bs_roundtrip('Bs1', [0,1,0,0,1,0]),
- bs_roundtrip('Bs1', [1,0,0,0,0,0,0,0,0]),
- bs_roundtrip('Bs1', [0,1,0,0,1,0,1,1,1,1,1,0,0,0,1,0,0,1,1]),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+ ok;
+ true ->
+ {ok,Enc1} = 'PrimStrings':encode('Bs1', 12345678901234567890),
+ {ok,_} = 'PrimStrings':decode('Bs1', Enc1)
+ end,
case {Rules,Opts} of
- {ber,[]} ->
+ {ber,[legacy_erlang_types]} ->
bs_decode('Bs1', <<35,8,3,2,0,73,3,2,4,32>>,
[0,1,0,0,1,0,0,1,0,0,1,0]),
bs_decode('Bs1', <<35,9,3,2,0,234,3,3,7,156,0>>,
[1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0]),
bs_decode('Bs1', <<35,128,3,2,0,234,3,3,7,156,0,0,0>>,
[1,1,1,0,1,0,1,0,1,0,0,1,1,1,0,0,0]);
- _ ->
+ {ber,[]} ->
+ %% XXX
+ ok;
+ {_,_} ->
%% DER, PER, UPER
consistent_def_enc('BsDef1',
[2#111101,
@@ -120,30 +121,39 @@ bit_string(Rules, Opts) ->
%%==========================================================
roundtrip('Bs2', [mo,tu,fr]),
- roundtrip('Bs2', [0,1,1,0,0,1,0], [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110011:7>>, [mo,tu,fr,sa]),
%%==========================================================
%% Bs3 ::= BIT STRING {su(0), mo(1), tu(2), we(3), th(4), fr(5), sa(6) } (SIZE (1..7))
%%==========================================================
roundtrip('Bs3', [mo,tu,fr]),
- bs_roundtrip('Bs3', [0,1,1,0,0,1,0], [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#0110010:7>>, [mo,tu,fr]),
+ bs_roundtrip('Bs2', <<2#0110011:7>>, [mo,tu,fr,sa]),
+ bs_roundtrip('Bs3', <<2#011001:6>>, [mo,tu,fr]),
+ bs_roundtrip('Bs3', <<2#11:2>>, [su,mo]),
%%==========================================================
%% Bs7 ::= BIT STRING (SIZE (24))
%%==========================================================
- bs_roundtrip('Bs7', 53245,
- [1,0,1,1,1,1,1,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0]),
- bs_roundtrip('Bs7', [1,0,1,0],
- [1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]),
+ bs_roundtrip('Bs7', <<23563:24>>),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+%% {error,_} = 'PrimStrings':encode('Bs7', <<2#1010:4>>);
+ ok;
+ true ->
+ ok
+ end,
%%==========================================================
%% BsPri ::= [PRIVATE 61] BIT STRING
%%==========================================================
- bs_roundtrip('BsPri', 45, [1,0,1,1,0,1]),
- bs_roundtrip('BsPri', 211, [1,1,0,0,1,0,1,1]),
+ bs_roundtrip('BsPri', <<2#101101:6>>),
+ bs_roundtrip('BsPri', <<2#11001011:8>>),
case Rules of
ber ->
@@ -164,8 +174,8 @@ bit_string(Rules, Opts) ->
%% BsExpPri ::= [PRIVATE 61] EXPLICIT BIT STRING
%%==========================================================
- bs_roundtrip('BsExpPri', 45, [1,0,1,1,0,1]),
- bs_roundtrip('BsExpPri', 211, [1,1,0,0,1,0,1,1]),
+ bs_roundtrip('BsExpPri', <<2#101101:6>>),
+ bs_roundtrip('BsExpPri', <<2#11001011:8>>),
case Rules of
ber ->
@@ -186,14 +196,14 @@ bit_string(Rules, Opts) ->
%% veteran(2), collegeGraduate(3)}, test case for OTP-5710
%%==========================================================
- {ok,Bytes54} = 'BitStr':encode('PersonalStatus', []),
+ {ok,Bytes54} = 'BitStr':encode('PersonalStatus', <<>>),
{ok,[]} = 'BitStr':decode('PersonalStatus', Bytes54),
%%==========================================================
%% BS5932 ::= BIT STRING (SIZE (5..MAX))
%% test case for OTP-5932
%%==========================================================
- bs_roundtrip('BSMAX', [1,0,1,0,1]),
+ bs_roundtrip('BSMAX', <<2#10101:5>>),
case Rules of
ber ->
{error,_} = 'PrimStrings':encode('BSMAX', [1,0,1]);
@@ -207,28 +217,35 @@ bit_string(Rules, Opts) ->
%% BS1024 ::= BIT STRING (SIZE (1024))
%% test case for OTP-7602
%%==========================================================
- BSmaker =
- fun(_F,S,S,_,Acc) ->
- Acc;
- (F,Ix,S,{A,B},Acc) ->
- F(F,Ix+1,S,{B,A},[A|Acc])
- end,
-
- BSList255 = BSmaker(BSmaker,0,255,{1,0},[]),
- bs_roundtrip('BS255', BSList255),
- BSList256 = BSmaker(BSmaker,0,256,{1,0},[]),
- bs_roundtrip('BS256', BSList256),
- BSList1024 = BSmaker(BSmaker,0,1024,{1,0},[]),
- bs_roundtrip('BS1024', BSList1024),
- bs_roundtrip('TransportLayerAddress', [0,1,1,0]),
+ bs_roundtrip('BS255', random_bits(255)),
+ bs_roundtrip('BS256', random_bits(256)),
+ bs_roundtrip('BS1024', random_bits(1024)),
+
+ bs_roundtrip('TransportLayerAddress', <<2#0110:4>>),
case Rules of
ber -> ok;
_ -> per_bs_strings()
end.
-consistent_def_enc(Type, Vs) ->
+random_bits(N) ->
+ Seed = integer_to_list(erlang:phash2(erlang:now())),
+ random_bits(<<>>, N, Seed).
+
+random_bits(Bin, N, Seed) ->
+ RandomBits = erlang:md5(Seed),
+ Bits = bit_size(RandomBits),
+ if
+ Bits < N ->
+ random_bits(<<Bin/bitstring,RandomBits/bitstring>>,
+ N-Bits, RandomBits);
+ true ->
+ <<LastBits:N/bitstring,_/bitstring>> = RandomBits,
+ <<Bin/bitstring,LastBits/bitstring>>
+ end.
+
+consistent_def_enc(Type, Vs0) ->
M = 'PrimStrings',
{ok,Enc} = M:encode(Type, {Type,asn1_DEFAULT}),
{ok,Val} = M:decode(Type, Enc),
@@ -241,6 +258,13 @@ consistent_def_enc(Type, Vs) ->
{legacy,{_,Bs}} when is_list(Bs) -> ok
end,
+ %% If this is not the legacy format, only bitstrings are
+ %% allowed.
+ Vs = case M:legacy_erlang_types() of
+ false -> [V || V <- Vs0, is_bitstring(V)];
+ true -> Vs0
+ end,
+
%% All values should be recognized and encoded as the
%% the default value (i.e. not encoded at all).
_ = [{ok,Enc} = M:encode(Type, {Type,V}) || V <- Vs],
@@ -252,18 +276,9 @@ consistent_def_enc(Type, Vs) ->
%% a SIZE constraint).
per_bs_strings() ->
- bs_roundtrip('Bs3', [0,0,1,0,0,0,0], [tu]),
bs_roundtrip('Bs3', <<2#0010000:7>>, [tu]),
- bs_roundtrip('Bs3', {1,<<2#00100000:8>>}, [tu]),
-
- bs_roundtrip('Bs4', [0,1,1,0,0,1,0], [mo,tu,fr]),
bs_roundtrip('Bs4', <<2#0110010:7>>, [mo,tu,fr]),
- bs_roundtrip('Bs4', {1,<<2#01100100:8>>}, [mo,tu,fr]),
-
- bs_roundtrip('Bs4', [0,1,1,0,0,0,0], [mo,tu]),
bs_roundtrip('Bs4', <<2#011:3,0:32>>, [mo,tu]),
- bs_roundtrip('Bs4', {5,<<2#011:3,0:32,0:5>>}, [mo,tu]),
-
[per_trailing_zeroes(B) || B <- lists:seq(0, 255)],
ok.
@@ -279,10 +294,6 @@ per_trailing_zeroes(Byte) ->
{bit,LastBitPos} -> LastBitPos+1
end,
- %% List of zeroes and ones.
- named_roundtrip(L, Pos, ExpectedSz),
- named_roundtrip(L++[0,0,0,0,0], Pos, ExpectedSz),
-
%% Bitstrings.
Bs = << <<B:1>> || B <- L >>,
Sz = bit_size(Bs),
@@ -290,14 +301,22 @@ per_trailing_zeroes(Byte) ->
Bin = <<Bs:Sz/bits,0:16,0:7>>,
named_roundtrip(Bin, Pos, ExpectedSz),
- %% Compact bitstring.
- named_roundtrip({7,Bin}, Pos, ExpectedSz),
+ case 'PrimStrings':legacy_erlang_types() of
+ false ->
+ ok;
+ true ->
+ %% List of zeroes and ones.
+ named_roundtrip(L, Pos, ExpectedSz),
+ named_roundtrip(L++[0,0,0,0,0], Pos, ExpectedSz),
- %% Integer bitstring (obsolete).
- IntBs = intlist_to_integer(L, 0, 0),
- named_roundtrip(IntBs, Pos, ExpectedSz),
+ %% Compact bitstring.
+ named_roundtrip({7,Bin}, Pos, ExpectedSz),
- ok.
+ %% Integer bitstring (obsolete).
+ IntBs = intlist_to_integer(L, 0, 0),
+ named_roundtrip(IntBs, Pos, ExpectedSz),
+ ok
+ end.
make_bit_list(0) -> [];
make_bit_list(B) -> [B band 1|make_bit_list(B bsr 1)].
@@ -331,61 +350,62 @@ octet_string(Rules) ->
%% Os ::= OCTET STRING
%%==========================================================
+ Legacy = 'PrimStrings':legacy_erlang_types(),
case Rules of
- ber ->
- {ok,"Jones"} =
+ ber when not Legacy ->
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
- {ok,"Jones"} =
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
- {ok,"Jones"} =
+ {ok,<<"Jones">>} =
'PrimStrings':decode('Os', <<36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
ok;
_ ->
ok
end,
- roundtrip('Os', [47,23,99,255,1]),
- roundtrip('OsCon', [47,23,99,255,1]),
- roundtrip('OsPri', [47,23,99,255,1]),
- roundtrip('OsApp', [47,23,99,255,1]),
+ os_roundtrip('Os', <<47,23,99,255,1>>),
+ os_roundtrip('OsCon', <<47,23,99,255,1>>),
+ os_roundtrip('OsPri', <<47,23,99,255,1>>),
+ os_roundtrip('OsApp', <<47,23,99,255,1>>),
- roundtrip('OsExpCon', [47,23,99,255,1]),
- roundtrip('OsExpPri', [47,23,99,255,1]),
- roundtrip('OsExpApp', [47,23,99,255,1]),
+ os_roundtrip('OsExpCon', <<47,23,99,255,1>>),
+ os_roundtrip('OsExpPri', <<47,23,99,255,1>>),
+ os_roundtrip('OsExpApp', <<47,23,99,255,1>>),
- roundtrip('Os', []),
- roundtrip('OsApp', []),
- roundtrip('OsExpApp',[]),
+ os_roundtrip('Os', <<>>),
+ os_roundtrip('OsApp', <<>>),
+ os_roundtrip('OsExpApp', <<>>),
- OsR = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890",
+ OsR = <<"12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890">>,
- roundtrip('Os', OsR),
- roundtrip('OsCon', OsR),
- roundtrip('OsExpApp', OsR),
+ os_roundtrip('Os', OsR),
+ os_roundtrip('OsCon', OsR),
+ os_roundtrip('OsExpApp', OsR),
case Rules of
- ber ->
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,7,4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,11,36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,13,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
- {ok,"Jones"} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
- {ok,"JonesJones"} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
+ ber when not Legacy ->
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,7,4,5,16#4A,16#6F,16#6E,16#65,16#73>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,11,36,9,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,13,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0>>),
+ {ok,<<"Jones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
+ {ok,<<"JonesJones">>} = 'PrimStrings':decode('OsExpApp', <<127,62,128,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,36,128,4,3,16#4A,16#6F,16#6E,4,2,16#65,16#73,0,0,0,0>>),
ok;
-
- _->
+ _ ->
ok
end,
S255 = lists:seq(1, 255),
- Strings = {type,true,"","1","12","345",true,
- S255,[$a|S255],[$a,$b|S255],397},
- p_roundtrip('OsFixedStrings', Strings),
- p_roundtrip('OsFixedStringsExt', Strings),
- p_roundtrip('OsVarStringsExt', Strings),
+ Strings = {type,true,<<"">>,<<"1">>,<<"12">>,<<"345">>,true,
+ list_to_binary(S255),list_to_binary([$a|S255]),
+ list_to_binary([$a,$b|S255]),397},
+ p_os_roundtrip('OsFixedStrings', Strings),
+ p_os_roundtrip('OsFixedStringsExt', Strings),
+ p_os_roundtrip('OsVarStringsExt', Strings),
ShortenedStrings = shorten_by_two(Strings),
- p_roundtrip('OsFixedStringsExt', ShortenedStrings),
- p_roundtrip('OsVarStringsExt', ShortenedStrings),
+ p_os_roundtrip('OsFixedStringsExt', ShortenedStrings),
+ p_os_roundtrip('OsVarStringsExt', ShortenedStrings),
ok.
fragmented_octet_string(Erules, Lens) ->
@@ -414,13 +434,14 @@ fragmented_octet_string(Erules, Types, L) ->
ok.
enc_frag(Erules, Type, Value) ->
- {ok,Encoded} = 'PrimStrings':encode(Type, Value),
+ M = 'PrimStrings',
+ {ok,Encoded} = M:encode(Type, Value),
case Erules of
ber ->
Encoded;
_ ->
%% Validate encoding with our own encoder.
- Encoded = enc_frag_1(<<>>, list_to_binary(Value))
+ Encoded = enc_frag_1(<<>>, Value)
end.
enc_frag_1(Res, Bin0) ->
@@ -439,12 +460,12 @@ enc_frag_1(Res, Bin0) ->
end.
make_value(L) ->
- make_value(L, 0, []).
+ make_value(L, 0, <<>>).
make_value(0, _, Acc) ->
Acc;
make_value(N, Byte, Acc) when Byte =< 255 ->
- make_value(N-1, Byte+7, [Byte|Acc]);
+ make_value(N-1, Byte+7, <<Acc/binary,Byte:8>>);
make_value(N, Byte, Acc) ->
make_value(N, Byte band 16#FF, Acc).
@@ -742,10 +763,32 @@ utf8_string(_Rules) ->
shorten_by_two(Tuple) ->
L = [case E of
[_,_|T] -> T;
+ <<_:16,T/binary>> -> T;
_ -> E
end || E <- tuple_to_list(Tuple)],
list_to_tuple(L).
+p_os_roundtrip(Type, Value0) ->
+ Value = setelement(1, Value0, Type),
+ p_os_roundtrip_1(Type, Value).
+
+p_os_roundtrip_1(Type, Value) ->
+ M = 'PrimStrings',
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Value);
+ true ->
+ {ok,Encoded} = M:encode(Type, Value),
+ Es0 = tuple_to_list(Value),
+ Es1 = [if
+ is_binary(E) -> binary_to_list(E);
+ true -> E
+ end || E <- Es0],
+ ListValue = list_to_tuple(Es1),
+ {ok,Encoded} = M:encode(Type, ListValue),
+ {ok,ListValue} = M:decode(Type, Encoded)
+ end.
+
p_roundtrip(Type, Value0) ->
Value = setelement(1, Value0, Type),
roundtrip(Type, Value).
@@ -759,15 +802,57 @@ roundtrip(Type, Value, Expected) ->
bs_roundtrip(Type, Value) ->
bs_roundtrip(Type, Value, Value).
-bs_roundtrip(Type, Value, Expected) ->
+os_roundtrip(Type, Bin) when is_binary(Bin) ->
M = 'PrimStrings',
- {ok,Encoded} = M:encode(Type, Value),
- {ok,Encoded} = M:encode(Type, Expected),
- case M:decode(Type, Encoded) of
- {ok,Expected} ->
- ok;
- {ok,Other} ->
- Expected = convert(Other, Expected)
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Bin);
+ true ->
+ {ok,Encoded} = M:encode(Type, Bin),
+ List = binary_to_list(Bin),
+ {ok,Encoded} = M:encode(Type, List),
+ {ok,List} = M:decode(Type, Encoded)
+ end.
+
+bs_roundtrip(Type, Value, Expected) when is_bitstring(Value) ->
+ M = 'PrimStrings',
+ case M:legacy_erlang_types() of
+ false ->
+ asn1_test_lib:roundtrip(M, Type, Value, Expected);
+ true ->
+ {ok,Encoded} = M:encode(Type, Value),
+ BitList = [B || <<B:1>> <= Value],
+ {ok,Encoded} = M:encode(Type, BitList),
+ case BitList of
+ [] ->
+ {ok,Encoded} = M:encode(Type, 0);
+ [_|_] ->
+ case lists:last(BitList) of
+ 1 ->
+ Int = lists:foldr(fun(B, A) ->
+ (A bsl 1) bor B
+ end, 0, BitList),
+ {ok,Encoded} = M:encode(Type, Int);
+ 0 ->
+ %% This BIT STRING cannot be represented
+ %% as an integer.
+ ok
+ end
+ end,
+ Compact = case bit_size(Value) of
+ Bits when Bits rem 8 =:= 0 ->
+ {0,Value};
+ Bits ->
+ Unused = 8 - Bits rem 8,
+ {Unused,<<Value:Bits/bitstring,0:Unused>>}
+ end,
+ {ok,Encoded} = M:encode(Type, Compact),
+ case M:decode(Type, Encoded) of
+ {ok,Expected} ->
+ ok;
+ {ok,Other} ->
+ Expected = convert(Other, Expected)
+ end
end.
bs_decode(Type, Encoded, Expected) ->
diff --git a/lib/asn1/test/testSeqExtension.erl b/lib/asn1/test/testSeqExtension.erl
index 8473459c36..c16e9fcd4c 100644
--- a/lib/asn1/test/testSeqExtension.erl
+++ b/lib/asn1/test/testSeqExtension.erl
@@ -44,7 +44,7 @@ main(Erule, DataDir, Opts) ->
roundtrip('SeqExt4', #'SeqExt4'{bool=true,int=12345}),
roundtrip('SeqExt4', #'SeqExt4'{bool=false,int=123456}),
- roundtrip('SeqExt5', #'SeqExt5'{name="Arne",shoesize=47}),
+ roundtrip('SeqExt5', #'SeqExt5'{name = <<"Arne">>,shoesize=47}),
%% Encode a value with this version of the specification.
BigInt = 128638468966,
@@ -52,7 +52,7 @@ main(Erule, DataDir, Opts) ->
s2=#'SeqExt2'{bool=true,int=2345},
s3=#'SeqExt3'{bool=false,int=17},
s4=#'SeqExt4'{bool=true,int=38739739},
- s5=#'SeqExt5'{name="Arne",shoesize=47},
+ s5=#'SeqExt5'{name = <<"Arne">>,shoesize=47},
s6=#'SeqExt6'{i1=531,i2=601,i3=999,
i4=777,i5=11953,
i6=13553,i7=77777},
diff --git a/lib/asn1/test/testSeqExternal.erl b/lib/asn1/test/testSeqExternal.erl
index a8e0902244..0b1d305054 100644
--- a/lib/asn1/test/testSeqExternal.erl
+++ b/lib/asn1/test/testSeqExternal.erl
@@ -29,15 +29,15 @@
-record('SeqXSet3',{bool, int, set}).
main(_Rules) ->
- roundtrip('XNTNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XImpNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XExpNT', #'XSeqNT'{os="kalle",bool=true}),
- roundtrip('XNTImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XImpImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XExpImp', #'XSeqImp'{os="kalle",bool=true}),
- roundtrip('XNTExp', #'XSeqExp'{os="kalle",bool=true}),
- roundtrip('XImpExp', #'XSeqExp'{os="kalle",bool=true}),
- roundtrip('XExpExp', #'XSeqExp'{os="kalle",bool=true}),
+ roundtrip('XNTNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpNT', #'XSeqNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpImp', #'XSeqImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpExp', #'XSeqExp'{os = <<"kalle">>,bool=true}),
roundtrip('SeqXSet1',
#'SeqXSet1'{set=#'XSet1'{bool1=true,int1=77,
set1=#'XSetIn'{boolIn=false,intIn=88}},
diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl
index 7f8f4079b4..25059d6052 100644
--- a/lib/asn1/test/testSeqOf.erl
+++ b/lib/asn1/test/testSeqOf.erl
@@ -85,10 +85,10 @@ main(_Rules) ->
seq43=SeqIn3}),
roundtrip('Seq5', {'Seq5',true,[],77}),
- roundtrip('Seq5', {'Seq5',true,[""],77}),
- roundtrip('Seq5', {'Seq5',true,["a"],77}),
- roundtrip('Seq5', {'Seq5',true,["ab"],77}),
- roundtrip('Seq5', {'Seq5',true,["abc"],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"a">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"ab">>],77}),
+ roundtrip('Seq5', {'Seq5',true,[<<"abc">>],77}),
roundtrip('Seq6', {'Seq6',[],[],101}),
roundtrip('Seq6', {'Seq6',[],[7],101}),
@@ -100,15 +100,15 @@ main(_Rules) ->
roundtrip('Seq8', {'Seq8',[],37}),
roundtrip('Seq9', {'Seq9',true,[],97}),
- roundtrip('Seq9', {'Seq9',true,[""],97}),
- roundtrip('Seq9', {'Seq9',true,["x"],97}),
- roundtrip('Seq9', {'Seq9',true,["xy"],97}),
- roundtrip('Seq9', {'Seq9',true,["xyz"],97}),
-
- roundtrip('Seq10', {'Seq10',true,[""],97}),
- roundtrip('Seq10', {'Seq10',true,["a"],97}),
- roundtrip('Seq10', {'Seq10',true,["a","b"],97}),
- roundtrip('Seq10', {'Seq10',true,["a","b","c"],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"x">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"xy">>],97}),
+ roundtrip('Seq9', {'Seq9',true,[<<"xyz">>],97}),
+
+ roundtrip('Seq10', {'Seq10',true,[<<"">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>,<<"b">>],97}),
+ roundtrip('Seq10', {'Seq10',true,[<<"a">>,<<"b">>,<<"c">>],97}),
roundtrip('SeqEmp', #'SeqEmp'{seq1=[#'Empty'{}]}),
diff --git a/lib/asn1/test/testSeqOfExternal.erl b/lib/asn1/test/testSeqOfExternal.erl
index 2e60f441c1..38b9f0ce7c 100644
--- a/lib/asn1/test/testSeqOfExternal.erl
+++ b/lib/asn1/test/testSeqOfExternal.erl
@@ -29,50 +29,59 @@
main(_Rules) ->
roundtrip('NTNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpNT',
- [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
+ [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
roundtrip('NTImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpImp',
- [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
+ [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
roundtrip('NTExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('ImpExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('ExpExp',
- [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
+ [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpNT',
- [#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]),
+ [#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpImp',
- [#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]),
+ [#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]),
roundtrip('XNTExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
roundtrip('XImpExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
roundtrip('XExpExp',
- [#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]),
+ [#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqOfTag.erl b/lib/asn1/test/testSeqOfTag.erl
index 38c1dcb90f..f66e29e91d 100644
--- a/lib/asn1/test/testSeqOfTag.erl
+++ b/lib/asn1/test/testSeqOfTag.erl
@@ -44,47 +44,47 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SeqTagNt', #'SeqTagNt'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagNtI', #'SeqTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagNtE', #'SeqTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagI', #'SeqTagI'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagII', #'SeqTagII'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagIE', #'SeqTagIE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagE', #'SeqTagE'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SeqTagEI', #'SeqTagEI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SeqTagEE', #'SeqTagEE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
+ roundtrip('SeqTagNt', #'SeqTagNt'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagNtI', #'SeqTagNtI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagNtE', #'SeqTagNtE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagI', #'SeqTagI'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagII', #'SeqTagII'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagIE', #'SeqTagIE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagE', #'SeqTagE'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagEI', #'SeqTagEI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SeqTagEE', #'SeqTagEE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXNt',
- #'SeqTagXNt'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}]}),
+ #'SeqTagXNt'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXI',
- #'SeqTagXI'{ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}]}),
+ #'SeqTagXI'{ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagXE',
- #'SeqTagXE'{xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagXE'{xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagImpX',
- #'SeqTagImpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}],
- ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}],
- xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagImpX'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
roundtrip('SeqTagExpX',
- #'SeqTagExpX'{xnt=[#'XSeqNT'{os="kalle",bool=true},
- #'XSeqNT'{os="kalle",bool=true}],
- ximp=[#'XSeqImp'{os="kalle",bool=true},
- #'XSeqImp'{os="kalle",bool=true}],
- xexp=[#'XSeqExp'{os="kalle",bool=true},
- #'XSeqExp'{os="kalle",bool=true}]}),
+ #'SeqTagExpX'{xnt=[#'XSeqNT'{os = <<"kalle">>,bool=true},
+ #'XSeqNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSeqImp'{os = <<"kalle">>,bool=true},
+ #'XSeqImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSeqExp'{os = <<"kalle">>,bool=true},
+ #'XSeqExp'{os = <<"kalle">>,bool=true}]}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqPrim.erl b/lib/asn1/test/testSeqPrim.erl
index 46bac77910..7f3ef86ac5 100644
--- a/lib/asn1/test/testSeqPrim.erl
+++ b/lib/asn1/test/testSeqPrim.erl
@@ -36,9 +36,9 @@ main(_Rules) ->
roundtrip('Seq', #'Seq'{bool=false,boolCon=true,boolPri=false,boolApp=true,
boolExpCon=false,boolExpPri=true,boolExpApp=false}),
roundtrip('Empty', #'Empty'{}),
- roundtrip('Big', #'Big'{os1=lists:duplicate(120, 16#A5),
- os2=lists:duplicate(128, 16#A7),
- os3=lists:duplicate(17777, 16#F5)}),
+ roundtrip('Big', #'Big'{os1=list_to_binary(lists:duplicate(120, 16#A5)),
+ os2=list_to_binary(lists:duplicate(128, 16#A7)),
+ os3=list_to_binary(lists:duplicate(17777, 16#F5))}),
ok.
roundtrip(Type, Value) ->
diff --git a/lib/asn1/test/testSeqSetDefaultVal.erl b/lib/asn1/test/testSeqSetDefaultVal.erl
index 044099199f..79992a0a94 100644
--- a/lib/asn1/test/testSeqSetDefaultVal.erl
+++ b/lib/asn1/test/testSeqSetDefaultVal.erl
@@ -162,7 +162,7 @@ main(Rule, Opts) ->
{#'SeqOS'{},
[{#'SeqOS'.a,
[asn1_DEFAULT,
- [172]]}]},
+ <<172>>]}]},
{#'SeqOI'{},
[{#'SeqOI'.a,
@@ -314,17 +314,10 @@ der() ->
c=[second], d = <<>>}),
roundtrip(<<48,0>>, 'SeqOS',
- #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
- roundtrip(<<48,0>>,
- 'SeqOS',
- #'SeqOS'{a=172,b=43168,c='NULL'},
- #'SeqOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ #'SeqOS'{a = <<172>>,b = <<16#A8,16#A0>>,c='NULL'}),
- roundtrip(<<49,0>>, 'SetOS', #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
- roundtrip(<<49,0>>,
- 'SetOS',
- #'SetOS'{a=172,b=43168,c='NULL'},
- #'SetOS'{a=[172],b=[16#A8,16#A0],c='NULL'}),
+ roundtrip(<<49,0>>, 'SetOS',
+ #'SetOS'{a = <<172>>,b = <<16#A8,16#A0>>,c='NULL'}),
roundtrip(<<48,0>>,
'SeqOI',
diff --git a/lib/asn1/test/testSeqTag.erl b/lib/asn1/test/testSeqTag.erl
index 2f127b3e97..6bacca6808 100644
--- a/lib/asn1/test/testSeqTag.erl
+++ b/lib/asn1/test/testSeqTag.erl
@@ -35,24 +35,24 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SeqTag', #'SeqTag'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagImp', #'SeqTagImp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagExp', #'SeqTagExp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SeqTagX', #'SeqTagX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
- roundtrip('SeqTagImpX', #'SeqTagImpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
- roundtrip('SeqTagExpX', #'SeqTagExpX'{xnt=#'XSeqNT'{os="kalle",bool=true},
- ximp=#'XSeqImp'{os="kalle",bool=true},
- xexp=#'XSeqExp'{os="kalle",bool=true}}),
+ roundtrip('SeqTag', #'SeqTag'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagImp', #'SeqTagImp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagExp', #'SeqTagExp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagX', #'SeqTagX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagImpX', #'SeqTagImpX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SeqTagExpX', #'SeqTagExpX'{xnt=#'XSeqNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSeqImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSeqExp'{os = <<"kalle">>,bool=true}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefCho.erl b/lib/asn1/test/testSeqTypeRefCho.erl
index b008bc46b8..1a921c6f38 100644
--- a/lib/asn1/test/testSeqTypeRefCho.erl
+++ b/lib/asn1/test/testSeqTypeRefCho.erl
@@ -28,10 +28,10 @@
main(_Rules) ->
roundtrip('SeqTRcho',
- #'SeqTRcho'{'seqCho' = {choOs,"A string 1"},
- 'seqChoE' = {choOs,"A string 3"},
- 'seqCho-E' = {choOs,"A string 7"},
- 'seqChoE-E' = {choOs,"A string 9"}}),
+ #'SeqTRcho'{'seqCho' = {choOs,<<"A string 1">>},
+ 'seqChoE' = {choOs,<<"A string 3">>},
+ 'seqCho-E' = {choOs,<<"A string 7">>},
+ 'seqChoE-E' = {choOs,<<"A string 9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefPrim.erl b/lib/asn1/test/testSeqTypeRefPrim.erl
index b63882ae99..d66d1ebcfe 100644
--- a/lib/asn1/test/testSeqTypeRefPrim.erl
+++ b/lib/asn1/test/testSeqTypeRefPrim.erl
@@ -26,15 +26,15 @@
main(_Rules) ->
roundtrip('SeqTR',
- #'SeqTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}),
+ #'SeqTR'{'octStr' = <<"A string 1">>,
+ 'octStrI' = <<"A string 2">>,
+ 'octStrE' = <<"A string 3">>,
+ 'octStr-I' = <<"A string 4">>,
+ 'octStrI-I' = <<"A string 5">>,
+ 'octStrE-I' = <<"A string 6">>,
+ 'octStr-E' = <<"A string 7">>,
+ 'octStrI-E' = <<"A string 8">>,
+ 'octStrE-E' = <<"A string 9">>}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefSeq.erl b/lib/asn1/test/testSeqTypeRefSeq.erl
index fc2e0a67c9..3288511f0a 100644
--- a/lib/asn1/test/testSeqTypeRefSeq.erl
+++ b/lib/asn1/test/testSeqTypeRefSeq.erl
@@ -71,15 +71,15 @@ main(_Rules) ->
seqS2=#'SeqSTag_seqS2'{b2=true,i2=22},
seqS3=#'SeqSTag_seqS3'{b3=true,i3=33}}),
roundtrip('SeqTRseq',
- #'SeqTRseq'{seqSeq=#'SeqSeq'{seqInt=2,seqOs="A1"},
- seqSeqI=#'SeqSeq'{seqInt=2,seqOs="A2"},
- seqSeqE=#'SeqSeq'{seqInt=2,seqOs="A3"},
- 'seqSeq-I'=#'SeqSeqImp'{seqInt=2,seqOs="A4"},
- 'seqSeqI-I'=#'SeqSeqImp'{seqInt=2,seqOs="A5"},
- 'seqSeqE-I'=#'SeqSeqImp'{seqInt=2,seqOs="A6"},
- 'seqSeq-E'=#'SeqSeqExp'{seqInt=2,seqOs="A7"},
- 'seqSeqI-E'=#'SeqSeqExp'{seqInt=2,seqOs="A8"},
- 'seqSeqE-E'=#'SeqSeqExp'{seqInt=2,seqOs="A9"}}),
+ #'SeqTRseq'{seqSeq=#'SeqSeq'{seqInt=2,seqOs = <<"A1">>},
+ seqSeqI=#'SeqSeq'{seqInt=2,seqOs = <<"A2">>},
+ seqSeqE=#'SeqSeq'{seqInt=2,seqOs = <<"A3">>},
+ 'seqSeq-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A4">>},
+ 'seqSeqI-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A5">>},
+ 'seqSeqE-I'=#'SeqSeqImp'{seqInt=2,seqOs = <<"A6">>},
+ 'seqSeq-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A7">>},
+ 'seqSeqI-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A8">>},
+ 'seqSeqE-E'=#'SeqSeqExp'{seqInt=2,seqOs = <<"A9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSeqTypeRefSet.erl b/lib/asn1/test/testSeqTypeRefSet.erl
index 911a4b7a47..d73423284b 100644
--- a/lib/asn1/test/testSeqTypeRefSet.erl
+++ b/lib/asn1/test/testSeqTypeRefSet.erl
@@ -32,15 +32,15 @@
main(_Rules) ->
roundtrip('SeqTRset',
- #'SeqTRset'{seqSet=#'SeqSet'{setInt=2,setOs="A1"},
- seqSetI=#'SeqSet'{setInt=2,setOs="A2"},
- seqSetE=#'SeqSet'{setInt=2,setOs="A3"},
- 'seqSet-I'=#'SeqSetImp'{setInt=2,setOs="A4"},
- 'seqSetI-I'=#'SeqSetImp'{setInt=2,setOs="A5"},
- 'seqSetE-I'=#'SeqSetImp'{setInt=2,setOs="A6"},
- 'seqSet-E'=#'SeqSetExp'{setInt=2,setOs="A7"},
- 'seqSetI-E'=#'SeqSetExp'{setInt=2,setOs="A8"},
- 'seqSetE-E'=#'SeqSetExp'{setInt=2,setOs="A9"}}),
+ #'SeqTRset'{seqSet=#'SeqSet'{setInt=2,setOs = <<"A1">>},
+ seqSetI=#'SeqSet'{setInt=2,setOs = <<"A2">>},
+ seqSetE=#'SeqSet'{setInt=2,setOs = <<"A3">>},
+ 'seqSet-I'=#'SeqSetImp'{setInt=2,setOs = <<"A4">>},
+ 'seqSetI-I'=#'SeqSetImp'{setInt=2,setOs = <<"A5">>},
+ 'seqSetE-I'=#'SeqSetImp'{setInt=2,setOs = <<"A6">>},
+ 'seqSet-E'=#'SeqSetExp'{setInt=2,setOs = <<"A7">>},
+ 'seqSetI-E'=#'SeqSetExp'{setInt=2,setOs = <<"A8">>},
+ 'seqSetE-E'=#'SeqSetExp'{setInt=2,setOs = <<"A9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetExternal.erl b/lib/asn1/test/testSetExternal.erl
index e17d7053aa..626adc5822 100644
--- a/lib/asn1/test/testSetExternal.erl
+++ b/lib/asn1/test/testSetExternal.erl
@@ -28,15 +28,15 @@
-record('SetXSeq3',{bool, int, seq}).
main(_Rules) ->
- roundtrip('XNTNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XImpNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XExpNT', #'XSetNT'{os="kalle",bool=true}),
- roundtrip('XNTImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XImpImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XExpImp', #'XSetImp'{os="kalle",bool=true}),
- roundtrip('XNTExp', #'XSetExp'{os="kalle",bool=true}),
- roundtrip('XImpExp', #'XSetExp'{os="kalle",bool=true}),
- roundtrip('XExpExp', #'XSetExp'{os="kalle",bool=true}),
+ roundtrip('XNTNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpNT', #'XSetNT'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpImp', #'XSetImp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XNTExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XImpExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
+ roundtrip('XExpExp', #'XSetExp'{os = <<"kalle">>,bool=true}),
roundtrip('SetXSeq1', #'SetXSeq1'{seq=#'XSeq1'{bool1=true,int1=77,
seq1=#'XSeqIn'{boolIn=false,intIn=88}},
bool=true,int=66}),
diff --git a/lib/asn1/test/testSetOf.erl b/lib/asn1/test/testSetOf.erl
index 54c42c1f21..0f82a14625 100644
--- a/lib/asn1/test/testSetOf.erl
+++ b/lib/asn1/test/testSetOf.erl
@@ -121,9 +121,9 @@ main(_Rules) ->
#'SetIn'{boolIn=false,intIn=125},
#'SetIn'{boolIn=false,intIn=225}]}),
- roundtrip('SetOs', ["First","Second","Third"]),
- roundtrip('SetOsImp', ["First","Second","Third"]),
- roundtrip('SetOsExp', ["First","Second","Third"]),
+ roundtrip('SetOs', [<<"First">>,<<"Second">>,<<"Third">>]),
+ roundtrip('SetOsImp', [<<"First">>,<<"Second">>,<<"Third">>]),
+ roundtrip('SetOsExp', [<<"First">>,<<"Second">>,<<"Third">>]),
roundtrip('SetEmp', #'SetEmp'{set1=[#'Empty'{}]}),
ok.
diff --git a/lib/asn1/test/testSetOfExternal.erl b/lib/asn1/test/testSetOfExternal.erl
index a380ba5ac1..cc5fe10710 100644
--- a/lib/asn1/test/testSetOfExternal.erl
+++ b/lib/asn1/test/testSetOfExternal.erl
@@ -28,24 +28,42 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('NTNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('ImpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('ExpNT', [#'NT'{os="kalle",bool=true},#'NT'{os="kalle",bool=true}]),
- roundtrip('NTImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('ImpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('ExpImp', [#'Imp'{os="kalle",bool=true},#'Imp'{os="kalle",bool=true}]),
- roundtrip('NTExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('ImpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('ExpExp', [#'Exp'{os="kalle",bool=true},#'Exp'{os="kalle",bool=true}]),
- roundtrip('XNTNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XImpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XExpNT', [#'XSetNT'{os="kalle",bool=true},#'XSetNT'{os="kalle",bool=true}]),
- roundtrip('XNTImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XImpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XExpImp', [#'XSetImp'{os="kalle",bool=true},#'XSetImp'{os="kalle",bool=true}]),
- roundtrip('XNTExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
- roundtrip('XImpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
- roundtrip('XExpExp', [#'XSetExp'{os="kalle",bool=true},#'XSetExp'{os="kalle",bool=true}]),
+ roundtrip('NTNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpNT', [#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('NTImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpImp', [#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('NTExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ImpExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('ExpExp', [#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpNT', [#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpImp', [#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XNTExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XImpExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
+ roundtrip('XExpExp', [#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetOfTag.erl b/lib/asn1/test/testSetOfTag.erl
index 81bc467abb..0d656f05a6 100644
--- a/lib/asn1/test/testSetOfTag.erl
+++ b/lib/asn1/test/testSetOfTag.erl
@@ -42,42 +42,42 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SetTagNt', #'SetTagNt'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagNtI', #'SetTagNtI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagNtE', #'SetTagNtE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagI', #'SetTagI'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagII', #'SetTagII'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagIE', #'SetTagIE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagE', #'SetTagE'{nt=[#'NT'{os="kalle",bool=true},
- #'NT'{os="kalle",bool=true}]}),
- roundtrip('SetTagEI', #'SetTagEI'{imp=[#'Imp'{os="kalle",bool=true},
- #'Imp'{os="kalle",bool=true}]}),
- roundtrip('SetTagEE', #'SetTagEE'{exp=[#'Exp'{os="kalle",bool=true},
- #'Exp'{os="kalle",bool=true}]}),
- roundtrip('SetTagXNt', #'SetTagXNt'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}]}),
- roundtrip('SetTagXI', #'SetTagXI'{ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}]}),
- roundtrip('SetTagXE', #'SetTagXE'{xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
- roundtrip('SetTagImpX', #'SetTagImpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}],
- ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}],
- xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
- roundtrip('SetTagExpX', #'SetTagExpX'{xnt=[#'XSetNT'{os="kalle",bool=true},
- #'XSetNT'{os="kalle",bool=true}],
- ximp=[#'XSetImp'{os="kalle",bool=true},
- #'XSetImp'{os="kalle",bool=true}],
- xexp=[#'XSetExp'{os="kalle",bool=true},
- #'XSetExp'{os="kalle",bool=true}]}),
+ roundtrip('SetTagNt', #'SetTagNt'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagNtI', #'SetTagNtI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagNtE', #'SetTagNtE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagI', #'SetTagI'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagII', #'SetTagII'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagIE', #'SetTagIE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagE', #'SetTagE'{nt=[#'NT'{os = <<"kalle">>,bool=true},
+ #'NT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagEI', #'SetTagEI'{imp=[#'Imp'{os = <<"kalle">>,bool=true},
+ #'Imp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagEE', #'SetTagEE'{exp=[#'Exp'{os = <<"kalle">>,bool=true},
+ #'Exp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXNt', #'SetTagXNt'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXI', #'SetTagXI'{ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagXE', #'SetTagXE'{xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=[#'XSetNT'{os = <<"kalle">>,bool=true},
+ #'XSetNT'{os = <<"kalle">>,bool=true}],
+ ximp=[#'XSetImp'{os = <<"kalle">>,bool=true},
+ #'XSetImp'{os = <<"kalle">>,bool=true}],
+ xexp=[#'XSetExp'{os = <<"kalle">>,bool=true},
+ #'XSetExp'{os = <<"kalle">>,bool=true}]}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTag.erl b/lib/asn1/test/testSetTag.erl
index 5863a149b9..fa1d84f50d 100644
--- a/lib/asn1/test/testSetTag.erl
+++ b/lib/asn1/test/testSetTag.erl
@@ -34,24 +34,24 @@
-record('Exp',{os, bool}).
main(_Rules) ->
- roundtrip('SetTag', #'SetTag'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagImp', #'SetTagImp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagExp', #'SetTagExp'{nt=#'NT'{os="kalle",bool=true},
- imp=#'Imp'{os="kalle",bool=true},
- exp=#'Exp'{os="kalle",bool=true}}),
- roundtrip('SetTagX', #'SetTagX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
- roundtrip('SetTagImpX', #'SetTagImpX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
- roundtrip('SetTagExpX', #'SetTagExpX'{xnt=#'XSetNT'{os="kalle",bool=true},
- ximp=#'XSetImp'{os="kalle",bool=true},
- xexp=#'XSetExp'{os="kalle",bool=true}}),
+ roundtrip('SetTag', #'SetTag'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagImp', #'SetTagImp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagExp', #'SetTagExp'{nt=#'NT'{os = <<"kalle">>,bool=true},
+ imp=#'Imp'{os = <<"kalle">>,bool=true},
+ exp=#'Exp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagX', #'SetTagX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagImpX', #'SetTagImpX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
+ roundtrip('SetTagExpX', #'SetTagExpX'{xnt=#'XSetNT'{os = <<"kalle">>,bool=true},
+ ximp=#'XSetImp'{os = <<"kalle">>,bool=true},
+ xexp=#'XSetExp'{os = <<"kalle">>,bool=true}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefCho.erl b/lib/asn1/test/testSetTypeRefCho.erl
index 8d62f45bfa..97bbd557e0 100644
--- a/lib/asn1/test/testSetTypeRefCho.erl
+++ b/lib/asn1/test/testSetTypeRefCho.erl
@@ -29,10 +29,10 @@
main(_Rules) ->
roundtrip('SetTRcho',
- #'SetTRcho'{'setCho' = {choOs,"A string 1"},
- 'setChoE' = {choOs,"A string 3"},
- 'setCho-E' = {choOs,"A string 7"},
- 'setChoE-E' = {choOs,"A string 9"}}),
+ #'SetTRcho'{'setCho' = {choOs,<<"A string 1">>},
+ 'setChoE' = {choOs,<<"A string 3">>},
+ 'setCho-E' = {choOs,<<"A string 7">>},
+ 'setChoE-E' = {choOs,<<"A string 9">>}}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefPrim.erl b/lib/asn1/test/testSetTypeRefPrim.erl
index cc2e157e68..d441fb789d 100644
--- a/lib/asn1/test/testSetTypeRefPrim.erl
+++ b/lib/asn1/test/testSetTypeRefPrim.erl
@@ -28,15 +28,15 @@
main(_Rules) ->
roundtrip('SetTR',
- #'SetTR'{'octStr' = "A string 1",
- 'octStrI' = "A string 2",
- 'octStrE' = "A string 3",
- 'octStr-I' = "A string 4",
- 'octStrI-I' = "A string 5",
- 'octStrE-I' = "A string 6",
- 'octStr-E' = "A string 7",
- 'octStrI-E' = "A string 8",
- 'octStrE-E' = "A string 9"}),
+ #'SetTR'{'octStr' = <<"A string 1">>,
+ 'octStrI' = <<"A string 2">>,
+ 'octStrE' = <<"A string 3">>,
+ 'octStr-I' = <<"A string 4">>,
+ 'octStrI-I' = <<"A string 5">>,
+ 'octStrE-I' = <<"A string 6">>,
+ 'octStr-E' = <<"A string 7">>,
+ 'octStrI-E' = <<"A string 8">>,
+ 'octStrE-E' = <<"A string 9">>}),
ok.
roundtrip(T, V) ->
diff --git a/lib/asn1/test/testSetTypeRefSeq.erl b/lib/asn1/test/testSetTypeRefSeq.erl
index 17af5c2922..a2b5f5745e 100644
--- a/lib/asn1/test/testSetTypeRefSeq.erl
+++ b/lib/asn1/test/testSetTypeRefSeq.erl
@@ -30,23 +30,23 @@
main(_Rules) ->
roundtrip('SetTRseq',
- #'SetTRseq'{'setSeq' = #'SetSeq'{seqOs = "A1",
+ #'SetTRseq'{'setSeq' = #'SetSeq'{seqOs = <<"A1">>,
seqInt = 2},
- 'setSeqI' = #'SetSeq'{seqOs = "A2",
+ 'setSeqI' = #'SetSeq'{seqOs = <<"A2">>,
seqInt = 2},
- 'setSeqE' = #'SetSeq'{seqOs = "A3",
+ 'setSeqE' = #'SetSeq'{seqOs = <<"A3">>,
seqInt = 2},
- 'setSeq-I' = #'SetSeqImp'{seqOs = "A4",
+ 'setSeq-I' = #'SetSeqImp'{seqOs = <<"A4">>,
seqInt = 2},
- 'setSeqI-I' = #'SetSeqImp'{seqOs = "A5",
+ 'setSeqI-I' = #'SetSeqImp'{seqOs = <<"A5">>,
seqInt = 2},
- 'setSeqE-I' = #'SetSeqImp'{seqOs = "A6",
+ 'setSeqE-I' = #'SetSeqImp'{seqOs = <<"A6">>,
seqInt = 2},
- 'setSeq-E' = #'SetSeqExp'{seqOs = "A7",
+ 'setSeq-E' = #'SetSeqExp'{seqOs = <<"A7">>,
seqInt = 2},
- 'setSeqI-E' = #'SetSeqExp'{seqOs = "A8",
+ 'setSeqI-E' = #'SetSeqExp'{seqOs = <<"A8">>,
seqInt = 2},
- 'setSeqE-E' = #'SetSeqExp'{seqOs = "A9",
+ 'setSeqE-E' = #'SetSeqExp'{seqOs = <<"A9">>,
seqInt = 2}}),
ok.
diff --git a/lib/asn1/test/testSetTypeRefSet.erl b/lib/asn1/test/testSetTypeRefSet.erl
index 8786e0fb4d..80a6be58c9 100644
--- a/lib/asn1/test/testSetTypeRefSet.erl
+++ b/lib/asn1/test/testSetTypeRefSet.erl
@@ -71,15 +71,15 @@ main(_Rules) ->
setS2=#'SetSTag_setS2'{b2=true,i2=22},
setS3=#'SetSTag_setS3'{b3=true,i3=33}}),
roundtrip('SetTRset',
- #'SetTRset'{setSet=#'SetSet'{setInt=2,setOs="A1"},
- setSetI=#'SetSet'{setInt=2,setOs="A2"},
- setSetE=#'SetSet'{setInt=2,setOs="A3"},
- 'setSet-I'=#'SetSetImp'{setInt=2,setOs="A4"},
- 'setSetI-I'=#'SetSetImp'{setInt=2,setOs="A5"},
- 'setSetE-I'=#'SetSetImp'{setInt=2,setOs="A6"},
- 'setSet-E'=#'SetSetExp'{setInt=2,setOs="A7"},
- 'setSetI-E'=#'SetSetExp'{setInt=2,setOs="A8"},
- 'setSetE-E'=#'SetSetExp'{setInt=2,setOs="A9"}}),
+ #'SetTRset'{setSet=#'SetSet'{setInt=2,setOs = <<"A1">>},
+ setSetI=#'SetSet'{setInt=2,setOs = <<"A2">>},
+ setSetE=#'SetSet'{setInt=2,setOs = <<"A3">>},
+ 'setSet-I'=#'SetSetImp'{setInt=2,setOs = <<"A4">>},
+ 'setSetI-I'=#'SetSetImp'{setInt=2,setOs = <<"A5">>},
+ 'setSetE-I'=#'SetSetImp'{setInt=2,setOs = <<"A6">>},
+ 'setSet-E'=#'SetSetExp'{setInt=2,setOs = <<"A7">>},
+ 'setSetI-E'=#'SetSetExp'{setInt=2,setOs = <<"A8">>},
+ 'setSetE-E'=#'SetSetExp'{setInt=2,setOs = <<"A9">>}}),
ok.
diff --git a/lib/asn1/test/testTimer.erl b/lib/asn1/test/testTimer.erl
index 0f02bab6e0..89bc2b463d 100644
--- a/lib/asn1/test/testTimer.erl
+++ b/lib/asn1/test/testTimer.erl
@@ -18,163 +18,141 @@
%%
%%
-module(testTimer).
--export([go/2]).
+-export([go/0]).
-include_lib("test_server/include/test_server.hrl").
-define(times, 5000).
val() ->
- _Value = {'H323-UserInformation',{'H323-UU-PDU',
- {callProceeding,
- {'CallProceeding-UUIE',
- {0,8,222},
- {'EndpointType',
- {'NonStandardParameter',
- {object,{0,9,237}},
- "O"},
- {'VendorIdentifier',
- {'H221NonStandard',62,63,16282},
- "OC",
- "OC"},
- {'GatekeeperInfo',
- {'NonStandardParameter',
- {object,{0,10,260}},
- "O"}},
- {'GatewayInfo',
- [{h320,
- {'H320Caps',
- {'NonStandardParameter',
- {object,{0,11,282}},
- "O"},
- [{'DataRate',
- {'NonStandardParameter',
- {object,
- {0,11,295}},
- "O"},
- 1290470518,
- 78}],
- [{'SupportedPrefix',
- {'NonStandardParameter',
- {object,
- {0,12,312}},
- "O"},
- {'h323-ID',"BM"}}]}}],
- {'NonStandardParameter',
- {object,{0,13,326}},
- "O"}},
- {'McuInfo',
- {'NonStandardParameter',
- {object,{1,13,340,340}},
- "OC"}},
- {'TerminalInfo',
- {'NonStandardParameter',
- {object,{1,14,353,354}},
- "OC"}},
- true,
- true},
- {ipxAddress,
- {'TransportAddress_ipxAddress',
- "OCTET ",
- "OCTE",
- "OC"}},
- {'CallIdentifier',"OCTET STRINGOCTE"},
- {noSecurity,'NULL'},
- [{'ClearToken',
- 1667517741,
- "BM",
- {'DHset',[1],[1],[1]},
- "OCTET STR",
- -26430296,
- {'TypedCertificate',
- {1,16,405,406},
- "OC"},
- "BMP",
- {'NonStandardParameter',
- {1,16,414,415},
- "OC"}},
- {'ClearToken',
- 1817656756,
- "BMP",
- {'DHset',[1],[1],[1]},
- "OCTET STRI",
- -16356110,
- {'TypedCertificate',
- {1,17,442,443},
- "OC"},
- "BMP",
- {'NonStandardParameter',
- {1,18,452,452},
- "OC"}}],
- [{cryptoGKPwdEncr,
- {'CryptoH323Token_cryptoGKPwdEncr',
- {1,18,467,467},
- {'Params',-7477016,"OCTET ST"},
- "OC"}},
- {cryptoGKPwdEncr,
- {'CryptoH323Token_cryptoGKPwdEncr',
- {1,19,486,486},
- {'Params',-2404513,"OCTET ST"},
- []}}],
- []}},
- {'NonStandardParameter',{object,{0,3,84}},[]},
- [],
- true,
- [],
- []},
- {'H323-UserInformation_user-data',24,"O"}}.
+ {'H323-UserInformation',{'H323-UU-PDU',
+ {callProceeding,
+ {'CallProceeding-UUIE',
+ {0,8,222},
+ {'EndpointType',
+ {'NonStandardParameter',
+ {object,{0,9,237}},
+ <<"O">>},
+ {'VendorIdentifier',
+ {'H221NonStandard',62,63,16282},
+ <<"OC">>,
+ <<"OC">>},
+ {'GatekeeperInfo',
+ {'NonStandardParameter',
+ {object,{0,10,260}},
+ <<"O">>}},
+ {'GatewayInfo',
+ [{h320,
+ {'H320Caps',
+ {'NonStandardParameter',
+ {object,{0,11,282}},
+ <<"O">>},
+ [{'DataRate',
+ {'NonStandardParameter',
+ {object,
+ {0,11,295}},
+ <<"O">>},
+ 1290470518,
+ 78}],
+ [{'SupportedPrefix',
+ {'NonStandardParameter',
+ {object,
+ {0,12,312}},
+ <<"O">>},
+ {'h323-ID',"BM"}}]}}],
+ {'NonStandardParameter',
+ {object,{0,13,326}},
+ <<"O">>}},
+ {'McuInfo',
+ {'NonStandardParameter',
+ {object,{1,13,340,340}},
+ <<"OC">>}},
+ {'TerminalInfo',
+ {'NonStandardParameter',
+ {object,{1,14,353,354}},
+ <<"OC">>}},
+ true,
+ true},
+ {ipxAddress,
+ {'TransportAddress_ipxAddress',
+ <<"OCTET ">>,
+ <<"OCTE">>,
+ <<"OC">>}},
+ {'CallIdentifier',<<"OCTET STRINGOCTE">>},
+ {noSecurity,'NULL'},
+ [{'ClearToken',
+ 1667517741,
+ "BM",
+ {'DHset',<<1:1>>,<<1:1>>,<<1:1>>},
+ <<"OCTET STR">>,
+ -26430296,
+ {'TypedCertificate',
+ {1,16,405,406},
+ <<"OC">>},
+ "BMP",
+ {'NonStandardParameter',
+ {1,16,414,415},
+ <<"OC">>}},
+ {'ClearToken',
+ 1817656756,
+ "BMP",
+ {'DHset',<<1:1>>,<<1:1>>,<<1:1>>},
+ <<"OCTET STRI">>,
+ -16356110,
+ {'TypedCertificate',
+ {1,17,442,443},
+ <<"OC">>},
+ "BMP",
+ {'NonStandardParameter',
+ {1,18,452,452},
+ <<"OC">>}}],
+ [{cryptoGKPwdEncr,
+ {'CryptoH323Token_cryptoGKPwdEncr',
+ {1,18,467,467},
+ {'Params',-7477016,<<"OCTET ST">>},
+ <<"OC">>}},
+ {cryptoGKPwdEncr,
+ {'CryptoH323Token_cryptoGKPwdEncr',
+ {1,19,486,486},
+ {'Params',-2404513,<<"OCTET ST">>},
+ <<>>}}],
+ []}},
+ {'NonStandardParameter',{object,{0,3,84}},<<>>},
+ [],
+ true,
+ [],
+ []},
+ {'H323-UserInformation_user-data',24,<<"O">>}}.
-go(Config, _Enc) ->
- ?line true = code:add_patha(?config(priv_dir,Config)),
-
+go() ->
Module = 'H323-MESSAGES',
Type = 'H323-UserInformation',
Value = val(),
- {ok,Bytes} = asn1rt:encode(Module,Type,Value),
+ Bytes = Module:encode(Type, Value),
+ Value = Module:decode(Type, Bytes),
- CompileOptions = compile_options(),
-
{ValWr,done} = timer:tc(fun() -> encode(?times, Module, Type, Value) end),
- ?line io:format("ASN1 encode ~p: ~p micro~n", [CompileOptions, ValWr / ?times]),
+ io:format("ASN.1 encoding: ~p micro~n", [ValWr / ?times]),
done = decode(2, Module, Type, Bytes),
{ValRead,done} = timer:tc(fun() -> decode(?times, Module, Type, Bytes) end),
- ?line io:format("ASN1 decode ~p: ~p micro~n", [CompileOptions, ValRead /?times]),
-
+ io:format("ASN.1 decoding: ~p micro~n", [ValRead /?times]),
- ?line Comment = "encode: "++integer_to_list(round(ValWr/?times))++
- " micro, decode: "++integer_to_list(round(ValRead /?times))++
- " micro. " ++ CompileOptions,
+ Comment = "encode: "++integer_to_list(round(ValWr/?times)) ++
+ " micro, decode: "++integer_to_list(round(ValRead /?times)) ++
+ " micro. [" ++ atom_to_list(Module:encoding_rule()) ++ "]",
{comment,Comment}.
encode(0, _Module,_Type,_Value) ->
done;
encode(N, Module,Type,Value) ->
- ?line {ok,B} = asn1rt:encode(Module,Type,Value),
- _B2 = if
- is_list(B) -> list_to_binary(B);
- true -> B
- end,
- encode(N-1, Module,Type,Value).
+ Module:encode(Type, Value),
+ encode(N-1, Module, Type, Value).
decode(0, _Module, _Type, _Value) ->
done;
decode(N, Module, Type, Value) ->
- {ok,_B} = asn1rt:decode(Module, Type, Value),
+ Module:decode(Type, Value),
decode(N-1, Module, Type, Value).
-
-compile_options() ->
- {ok,Info} = asn1rt:info('H323-MESSAGES'),
- case lists:keyfind(options, 1, Info) of
- {_,Opts0} ->
- Opts1 = [X || X <- Opts0,
- (X =:= ber orelse
- X =:= per orelse
- X =:= uper)],
- lists:flatten(io_lib:format("~p", [Opts1]));
- _ ->
- "[]"
- end.
-
diff --git a/lib/asn1/test/testTypeValueNotation.erl b/lib/asn1/test/testTypeValueNotation.erl
index b46d7177f5..2b5f3f74c1 100644
--- a/lib/asn1/test/testTypeValueNotation.erl
+++ b/lib/asn1/test/testTypeValueNotation.erl
@@ -24,7 +24,7 @@
-record('Seq', {octstr, int, bool, enum, bitstr, null, oid, vstr}).
main(_Rule, _Option) ->
- Value = #'Seq'{octstr = [1, 2, 3, 4],
+ Value = #'Seq'{octstr = <<1,2,3,4>>,
int = 12,
bool = true,
enum = a,
diff --git a/lib/compiler/src/beam_a.erl b/lib/compiler/src/beam_a.erl
index c590c5e35b..3dfa67a771 100644
--- a/lib/compiler/src/beam_a.erl
+++ b/lib/compiler/src/beam_a.erl
@@ -88,6 +88,10 @@ rename_instr({bs_private_append=I,F,Sz,U,Src,Flags,Dst}) ->
{bs_init,F,{I,U,Flags},none,[Sz,Src],Dst};
rename_instr(bs_init_writable=I) ->
{bs_init,{f,0},I,1,[{x,0}],{x,0}};
+rename_instr({put_map_assoc,Fail,S,D,R,L}) ->
+ {put_map,Fail,assoc,S,D,R,L};
+rename_instr({put_map_exact,Fail,S,D,R,L}) ->
+ {put_map,Fail,exact,S,D,R,L};
rename_instr({select_val=I,Reg,Fail,{list,List}}) ->
{select,I,Reg,Fail,List};
rename_instr({select_tuple_arity=I,Reg,Fail,{list,List}}) ->
diff --git a/lib/compiler/src/beam_block.erl b/lib/compiler/src/beam_block.erl
index 402fbe2e2e..3723cc19e1 100644
--- a/lib/compiler/src/beam_block.erl
+++ b/lib/compiler/src/beam_block.erl
@@ -152,6 +152,10 @@ collect({get_tuple_element,S,I,D}) -> {set,[D],[S],{get_tuple_element,I}};
collect({set_tuple_element,S,D,I}) -> {set,[],[S,D],{set_tuple_element,I}};
collect({get_list,S,D1,D2}) -> {set,[D1,D2],[S],get_list};
collect(remove_message) -> {set,[],[],remove_message};
+collect({put_map,F,Op,S,D,R,{list,Puts}}) ->
+ {set,[D],[S|Puts],{alloc,R,{put_map,Op,F}}};
+collect({get_map_element,F,S,K,D}) ->
+ {set,[D],[S],{get_map_element,K,F}};
collect({'catch',R,L}) -> {set,[R],[],{'catch',L}};
collect(fclearerror) -> {set,[],[],fclearerror};
collect({fcheckerror,{f,0}}) -> {set,[],[],fcheckerror};
@@ -236,6 +240,7 @@ move_allocates_2(Alloc, [], Acc) ->
alloc_may_pass({set,_,_,{alloc,_,_}}) -> false;
alloc_may_pass({set,_,_,{set_tuple_element,_}}) -> false;
+alloc_may_pass({set,_,_,{get_map_element,_,_}}) -> false;
alloc_may_pass({set,_,_,put_list}) -> false;
alloc_may_pass({set,_,_,put}) -> false;
alloc_may_pass({set,_,_,_}) -> true.
@@ -383,6 +388,7 @@ gen_init(Fs, Regs, Y, Acc) ->
init_yreg([{set,_,_,{bif,_,_}}|_], Reg) -> Reg;
init_yreg([{set,_,_,{alloc,_,{gc_bif,_,_}}}|_], Reg) -> Reg;
+init_yreg([{set,_,_,{alloc,_,{put_map,_,_}}}|_], Reg) -> Reg;
init_yreg([{set,Ds,_,_}|Is], Reg) -> init_yreg(Is, add_yregs(Ds, Reg));
init_yreg(_Is, Reg) -> Reg.
diff --git a/lib/compiler/src/beam_clean.erl b/lib/compiler/src/beam_clean.erl
index 9d89e21a4e..55f985ad0e 100644
--- a/lib/compiler/src/beam_clean.erl
+++ b/lib/compiler/src/beam_clean.erl
@@ -234,6 +234,36 @@ replace([{bs_init,{f,Lbl},Info,Live,Ss,Dst}|Is], Acc, D) when Lbl =/= 0 ->
replace(Is, [{bs_init,{f,label(Lbl, D)},Info,Live,Ss,Dst}|Acc], D);
replace([{bs_put,{f,Lbl},Info,Ss}|Is], Acc, D) when Lbl =/= 0 ->
replace(Is, [{bs_put,{f,label(Lbl, D)},Info,Ss}|Acc], D);
+replace([{bs_init2,{f,Lbl},Sz,Words,R,F,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_init2,{f,label(Lbl, D)},Sz,Words,R,F,Dst}|Acc], D);
+replace([{bs_init_bits,{f,Lbl},Sz,Words,R,F,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_init_bits,{f,label(Lbl, D)},Sz,Words,R,F,Dst}|Acc], D);
+replace([{bs_put_integer,{f,Lbl},Bits,Unit,Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_put_integer,{f,label(Lbl, D)},Bits,Unit,Fl,Val}|Acc], D);
+replace([{bs_put_utf8=I,{f,Lbl},Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Fl,Val}|Acc], D);
+replace([{bs_put_utf16=I,{f,Lbl},Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Fl,Val}|Acc], D);
+replace([{bs_put_utf32=I,{f,Lbl},Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Fl,Val}|Acc], D);
+replace([{bs_put_binary,{f,Lbl},Bits,Unit,Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_put_binary,{f,label(Lbl, D)},Bits,Unit,Fl,Val}|Acc], D);
+replace([{bs_put_float,{f,Lbl},Bits,Unit,Fl,Val}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_put_float,{f,label(Lbl, D)},Bits,Unit,Fl,Val}|Acc], D);
+replace([{bs_add,{f,Lbl},Src,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{bs_add,{f,label(Lbl, D)},Src,Dst}|Acc], D);
+replace([{bs_append,{f,Lbl},_,_,_,_,_,_,_}=I0|Is], Acc, D) when Lbl =/= 0 ->
+ I = setelement(2, I0, {f,label(Lbl, D)}),
+ replace(Is, [I|Acc], D);
+replace([{bs_utf8_size=I,{f,Lbl},Src,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Src,Dst}|Acc], D);
+replace([{bs_utf16_size=I,{f,Lbl},Src,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Src,Dst}|Acc], D);
+replace([{put_map=I,{f,Lbl},Op,Src,Dst,Live,List}|Is], Acc, D)
+ when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Op,Src,Dst,Live,List}|Acc], D);
+replace([{get_map_element=I,{f,Lbl},Src,Key,Dst}|Is], Acc, D) when Lbl =/= 0 ->
+ replace(Is, [{I,{f,label(Lbl, D)},Src,Key,Dst}|Acc], D);
replace([I|Is], Acc, D) ->
replace(Is, [I|Acc], D);
replace([], Acc, _) -> Acc.
diff --git a/lib/compiler/src/beam_disasm.erl b/lib/compiler/src/beam_disasm.erl
index 1a8bbcee22..e0d0d0fd1d 100644
--- a/lib/compiler/src/beam_disasm.erl
+++ b/lib/compiler/src/beam_disasm.erl
@@ -365,6 +365,10 @@ disasm_instr(B, Bs, Atoms, Literals) ->
disasm_select_inst(select_val, Bs, Atoms, Literals);
select_tuple_arity ->
disasm_select_inst(select_tuple_arity, Bs, Atoms, Literals);
+ put_map_assoc ->
+ disasm_map_inst(put_map_assoc, Bs, Atoms, Literals);
+ put_map_exact ->
+ disasm_map_inst(put_map_exact, Bs, Atoms, Literals);
_ ->
try decode_n_args(Arity, Bs, Atoms, Literals) of
{Args, RestBs} ->
@@ -395,6 +399,17 @@ disasm_select_inst(Inst, Bs, Atoms, Literals) ->
{List, RestBs} = decode_n_args(Len, Bs4, Atoms, Literals),
{{Inst, [X,F,{Z,U,List}]}, RestBs}.
+disasm_map_inst(Inst, Bs0, Atoms, Literals) ->
+ {F, Bs1} = decode_arg(Bs0, Atoms, Literals),
+ {S, Bs2} = decode_arg(Bs1, Atoms, Literals),
+ {X, Bs3} = decode_arg(Bs2, Atoms, Literals),
+ {N, Bs4} = decode_arg(Bs3, Atoms, Literals),
+ {Z, Bs5} = decode_arg(Bs4, Atoms, Literals),
+ {U, Bs6} = decode_arg(Bs5, Atoms, Literals),
+ {u, Len} = U,
+ {List, RestBs} = decode_n_args(Len, Bs6, Atoms, Literals),
+ {{Inst, [F,S,X,N,{Z,U,List}]}, RestBs}.
+
%%-----------------------------------------------------------------------
%% decode_arg([Byte]) -> {Arg, [Byte]}
%%
@@ -421,7 +436,7 @@ decode_arg([B|Bs]) ->
decode_arg([B|Bs0], Atoms, Literals) ->
Tag = decode_tag(B band 2#111),
- ?NO_DEBUG('Tag = ~p, B = ~p, Bs = ~p~n', [Tag, B, Bs]),
+ ?NO_DEBUG('Tag = ~p, B = ~p, Bs = ~p~n', [Tag, B, Bs0]),
case Tag of
z ->
decode_z_tagged(Tag, B, Bs0, Literals);
@@ -1119,6 +1134,27 @@ resolve_inst({line,[Index]},_,_,_) ->
{line,resolve_arg(Index)};
%%
+%% R17A.
+%%
+resolve_inst({put_map_assoc,Args},_,_,_) ->
+ [FLbl,Src,Dst,{u,N},{{z,1},{u,_Len},List0}] = Args,
+ List = resolve_args(List0),
+ {put_map_assoc,FLbl,Src,Dst,N,{list,List}};
+
+resolve_inst({put_map_exact,Args},_,_,_) ->
+ [FLbl,Src,Dst,{u,N},{{z,1},{u,_Len},List0}] = Args,
+ List = resolve_args(List0),
+ {put_map_exact,FLbl,Src,Dst,N,{list,List}};
+
+resolve_inst({is_map,Args0},_,_,_) ->
+ [FLbl|Args] = resolve_args(Args0),
+ {test, is_map, FLbl, Args};
+
+resolve_inst({get_map_element,Args},_,_,_) ->
+ [FLbl,Src,Key,Dst] = resolve_args(Args),
+ {get_map_element,FLbl,Src,Key,Dst};
+
+%%
%% Catches instructions that are not yet handled.
%%
resolve_inst(X,_,_,_) -> ?exit({resolve_inst,X}).
diff --git a/lib/compiler/src/beam_flatten.erl b/lib/compiler/src/beam_flatten.erl
index 5603a677e8..534bc6d954 100644
--- a/lib/compiler/src/beam_flatten.erl
+++ b/lib/compiler/src/beam_flatten.erl
@@ -61,6 +61,10 @@ norm({set,[],[S],put}) -> {put,S};
norm({set,[D],[S],{get_tuple_element,I}}) -> {get_tuple_element,S,I,D};
norm({set,[],[S,D],{set_tuple_element,I}}) -> {set_tuple_element,S,D,I};
norm({set,[D1,D2],[S],get_list}) -> {get_list,S,D1,D2};
+norm({set,[D],[S|Puts],{alloc,R,{put_map,Op,F}}}) ->
+ {put_map,F,Op,S,D,R,{list,Puts}};
+norm({set,[D],[S],{get_map_element,K,F}}) ->
+ {get_map_element,F,S,K,D};
norm({set,[],[],remove_message}) -> remove_message;
norm({set,[],[],fclearerror}) -> fclearerror;
norm({set,[],[],fcheckerror}) -> {fcheckerror,{f,0}}.
diff --git a/lib/compiler/src/beam_jump.erl b/lib/compiler/src/beam_jump.erl
index d57fb80ac2..1f720b94c3 100644
--- a/lib/compiler/src/beam_jump.erl
+++ b/lib/compiler/src/beam_jump.erl
@@ -527,6 +527,10 @@ ulbl({bs_init,Lbl,_,_,_,_}, Used) ->
mark_used(Lbl, Used);
ulbl({bs_put,Lbl,_,_}, Used) ->
mark_used(Lbl, Used);
+ulbl({put_map,Lbl,_Op,_Src,_Dst,_Live,_List}, Used) ->
+ mark_used(Lbl, Used);
+ulbl({get_map_element,Lbl,_Src,_Key,_Dst}, Used) ->
+ mark_used(Lbl, Used);
ulbl(_, Used) -> Used.
mark_used({f,0}, Used) -> Used;
diff --git a/lib/compiler/src/beam_split.erl b/lib/compiler/src/beam_split.erl
index cacaaebffe..638a4826ea 100644
--- a/lib/compiler/src/beam_split.erl
+++ b/lib/compiler/src/beam_split.erl
@@ -49,6 +49,13 @@ split_block([{set,[R],As,{bif,N,{f,Lbl}=Fail}}|Is], Bl, Acc) when Lbl =/= 0 ->
split_block([{set,[R],As,{alloc,Live,{gc_bif,N,{f,Lbl}=Fail}}}|Is], Bl, Acc)
when Lbl =/= 0 ->
split_block(Is, [], [{gc_bif,N,Fail,Live,As,R}|make_block(Bl, Acc)]);
+split_block([{set,[D],[S|Puts],{alloc,R,{put_map,Op,{f,Lbl}=Fail}}}|Is],
+ Bl, Acc) when Lbl =/= 0 ->
+ split_block(Is, [], [{put_map,Fail,Op,S,D,R,{list,Puts}}|
+ make_block(Bl, Acc)]);
+split_block([{set,[D],[S],{get_map_element,K,{f,Lbl}=Fail}}|Is], Bl, Acc)
+ when Lbl =/= 0 ->
+ split_block(Is, [], [{get_map_element,Fail,S,K,D}|make_block(Bl, Acc)]);
split_block([{set,[R],[],{'catch',L}}|Is], Bl, Acc) ->
split_block(Is, [], [{'catch',R,L}|make_block(Bl, Acc)]);
split_block([{set,[],[],{line,_}=Line}|Is], Bl, Acc) ->
diff --git a/lib/compiler/src/beam_utils.erl b/lib/compiler/src/beam_utils.erl
index 36f3200d11..a3f16cfa8f 100644
--- a/lib/compiler/src/beam_utils.erl
+++ b/lib/compiler/src/beam_utils.erl
@@ -152,6 +152,7 @@ bif_to_test(is_function, [_]=Ops, Fail) -> {test,is_function,Fail,Ops};
bif_to_test(is_function, [_,_]=Ops, Fail) -> {test,is_function2,Fail,Ops};
bif_to_test(is_integer, [_]=Ops, Fail) -> {test,is_integer,Fail,Ops};
bif_to_test(is_list, [_]=Ops, Fail) -> {test,is_list,Fail,Ops};
+bif_to_test(is_map, [_]=Ops, Fail) -> {test,is_map,Fail,Ops};
bif_to_test(is_number, [_]=Ops, Fail) -> {test,is_number,Fail,Ops};
bif_to_test(is_pid, [_]=Ops, Fail) -> {test,is_pid,Fail,Ops};
bif_to_test(is_port, [_]=Ops, Fail) -> {test,is_port,Fail,Ops};
diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl
index 48f5135aca..97f84da08f 100644
--- a/lib/compiler/src/beam_validator.erl
+++ b/lib/compiler/src/beam_validator.erl
@@ -865,9 +865,29 @@ valfun_4({bs_final,{f,Fail},Dst}, Vst0) ->
valfun_4({bs_final2,Src,Dst}, Vst0) ->
assert_term(Src, Vst0),
set_type_reg(binary, Dst, Vst0);
+%% Map instructions.
+valfun_4({put_map_assoc,{f,Fail},Src,Dst,Live,{list,List}}, Vst) ->
+ verify_put_map(Fail, Src, Dst, Live, List, Vst);
+valfun_4({put_map_exact,{f,Fail},Src,Dst,Live,{list,List}}, Vst) ->
+ verify_put_map(Fail, Src, Dst, Live, List, Vst);
+valfun_4({get_map_element,{f,Fail},Src,Key,Dst}, Vst0) ->
+ assert_term(Src, Vst0),
+ assert_term(Key, Vst0),
+ Vst = branch_state(Fail, Vst0),
+ set_type_reg(term, Dst, Vst);
valfun_4(_, _) ->
error(unknown_instruction).
+verify_put_map(Fail, Src, Dst, Live, List, Vst0) ->
+ verify_live(Live, Vst0),
+ verify_y_init(Vst0),
+ [assert_term(Term, Vst0) || Term <- List],
+ assert_term(Src, Vst0),
+ Vst1 = heap_alloc(0, Vst0),
+ Vst2 = branch_state(Fail, Vst1),
+ Vst = prune_x_regs(Live, Vst2),
+ set_type_reg(term, Dst, Vst).
+
%%
%% Common code for validating bs_get* instructions.
%%
diff --git a/lib/compiler/src/beam_z.erl b/lib/compiler/src/beam_z.erl
index 8c6b0c916d..9953a48710 100644
--- a/lib/compiler/src/beam_z.erl
+++ b/lib/compiler/src/beam_z.erl
@@ -74,6 +74,10 @@ undo_rename({bs_init,F,{I,Extra,U,Flags},Live,[Sz,Src],Dst}) ->
{I,F,Sz,Extra,Live,U,Src,Flags,Dst};
undo_rename({bs_init,_,bs_init_writable=I,_,_,_}) ->
I;
+undo_rename({put_map,Fail,assoc,S,D,R,L}) ->
+ {put_map_assoc,Fail,S,D,R,L};
+undo_rename({put_map,Fail,exact,S,D,R,L}) ->
+ {put_map_exact,Fail,S,D,R,L};
undo_rename({select,I,Reg,Fail,List}) ->
{I,Reg,Fail,{list,List}};
undo_rename(I) -> I.
diff --git a/lib/compiler/src/cerl.erl b/lib/compiler/src/cerl.erl
index 4b74d60e9f..60a8559950 100644
--- a/lib/compiler/src/cerl.erl
+++ b/lib/compiler/src/cerl.erl
@@ -120,7 +120,16 @@
update_c_bitstr/5, update_c_bitstr/6, ann_c_bitstr/5,
ann_c_bitstr/6, is_c_bitstr/1, bitstr_val/1, bitstr_size/1,
bitstr_bitsize/1, bitstr_unit/1, bitstr_type/1,
- bitstr_flags/1]).
+ bitstr_flags/1,
+
+ %% keep map exports here for now
+ map_es/1,
+ update_c_map/2,
+ ann_c_map/2,
+ map_pair_op/1,map_pair_key/1,map_pair_val/1,
+ update_c_map_pair/4,
+ ann_c_map_pair/4
+ ]).
-export_type([c_binary/0, c_call/0, c_clause/0, c_cons/0, c_fun/0, c_literal/0,
c_module/0, c_tuple/0, c_values/0, c_var/0, cerl/0, var_name/0]).
@@ -145,6 +154,8 @@
-type c_let() :: #c_let{}.
-type c_letrec() :: #c_letrec{}.
-type c_literal() :: #c_literal{}.
+-type c_map() :: #c_map{}.
+-type c_map_pair() :: #c_map_pair{}.
-type c_module() :: #c_module{}.
-type c_primop() :: #c_primop{}.
-type c_receive() :: #c_receive{}.
@@ -155,9 +166,10 @@
-type c_var() :: #c_var{}.
-type cerl() :: c_alias() | c_apply() | c_binary() | c_bitstr()
- | c_call() | c_case() | c_catch() | c_clause() | c_cons()
+ | c_call() | c_case() | c_catch() | c_clause() | c_cons()
| c_fun() | c_let() | c_letrec() | c_literal()
- | c_module() | c_primop() | c_receive() | c_seq()
+ | c_map() | c_map_pair()
+ | c_module() | c_primop() | c_receive() | c_seq()
| c_try() | c_tuple() | c_values() | c_var().
%% =====================================================================
@@ -250,8 +262,8 @@
-type ctype() :: 'alias' | 'apply' | 'binary' | 'bitrst' | 'call' | 'case'
| 'catch' | 'clause' | 'cons' | 'fun' | 'let' | 'letrec'
- | 'literal' | 'module' | 'primop' | 'receive' | 'seq' | 'try'
- | 'tuple' | 'values' | 'var'.
+ | 'literal' | 'map' | 'module' | 'primop' | 'receive' | 'seq'
+ | 'try' | 'tuple' | 'values' | 'var'.
-spec type(cerl()) -> ctype().
@@ -268,6 +280,8 @@ type(#c_fun{}) -> 'fun';
type(#c_let{}) -> 'let';
type(#c_letrec{}) -> letrec;
type(#c_literal{}) -> literal;
+type(#c_map{}) -> map;
+type(#c_map_pair{}) -> map_pair;
type(#c_module{}) -> module;
type(#c_primop{}) -> primop;
type(#c_receive{}) -> 'receive';
@@ -1558,6 +1572,34 @@ ann_make_list(_, [], Node) ->
%% ---------------------------------------------------------------------
+%% maps
+
+-spec map_es(c_map()) -> [cerl()].
+
+map_es(#c_map{es = Es}) ->
+ Es.
+
+ann_c_map(As, Es) ->
+ #c_map{es = Es, anno = As }.
+
+update_c_map(Old, Es) ->
+ #c_map{es = Es, anno = get_ann(Old)}.
+
+map_pair_key(#c_map_pair{key=K}) -> K.
+map_pair_val(#c_map_pair{val=V}) -> V.
+map_pair_op(#c_map_pair{op=Op}) -> Op.
+
+-spec ann_c_map_pair([term()], cerl(), cerl(), cerl()) ->
+ c_map_pair().
+
+ann_c_map_pair(As,Op,K,V) ->
+ #c_map_pair{op=Op, key = K, val=V, anno = As}.
+
+update_c_map_pair(Old,Op,K,V) ->
+ #c_map_pair{op=Op, key=K, val=V, anno = get_ann(Old)}.
+
+
+%% ---------------------------------------------------------------------
%% @spec c_tuple(Elements::[cerl()]) -> cerl()
%%
@@ -2945,6 +2987,10 @@ pat_vars(Node, Vs) ->
pat_vars(cons_hd(Node), pat_vars(cons_tl(Node), Vs));
tuple ->
pat_list_vars(tuple_es(Node), Vs);
+ map ->
+ pat_list_vars(map_es(Node), Vs);
+ map_pair ->
+ pat_list_vars([map_pair_op(Node),map_pair_key(Node),map_pair_val(Node)],Vs);
binary ->
pat_list_vars(binary_segments(Node), Vs);
bitstr ->
@@ -3803,7 +3849,6 @@ data_type(#c_cons{}) ->
data_type(#c_tuple{}) ->
tuple.
-
%% @spec data_es(Node::cerl()) -> [cerl()]
%%
%% @doc Returns the list of subtrees of a data constructor node. If
@@ -3835,7 +3880,6 @@ data_es(#c_cons{hd = H, tl = T}) ->
data_es(#c_tuple{es = Es}) ->
Es.
-
%% @spec data_arity(Node::cerl()) -> integer()
%%
%% @doc Returns the number of subtrees of a data constructor
@@ -3892,7 +3936,6 @@ ann_make_data(As, {atomic, V}, []) -> #c_literal{val = V, anno = As};
ann_make_data(As, cons, [H, T]) -> ann_c_cons(As, H, T);
ann_make_data(As, tuple, Es) -> ann_c_tuple(As, Es).
-
%% @spec update_data(Old::cerl(), Type::dtype(),
%% Elements::[cerl()]) -> cerl()
%% @see make_data/2
@@ -4022,6 +4065,10 @@ subtrees(T) ->
[[cons_hd(T)], [cons_tl(T)]];
tuple ->
[tuple_es(T)];
+ map ->
+ [map_es(T)];
+ map_pair ->
+ [[map_pair_op(T)],[map_pair_key(T)],[map_pair_val(T)]];
'let' ->
[let_vars(T), [let_arg(T)], [let_body(T)]];
seq ->
diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl
index c6de63c69f..3837b57750 100644
--- a/lib/compiler/src/cerl_inline.erl
+++ b/lib/compiler/src/cerl_inline.erl
@@ -63,7 +63,11 @@
receive_clauses/1, receive_timeout/1, seq_arg/1,
seq_body/1, set_ann/2, try_arg/1, try_body/1, try_vars/1,
try_evars/1, try_handler/1, tuple_es/1, tuple_arity/1,
- type/1, values_es/1, var_name/1]).
+ type/1, values_es/1, var_name/1,
+ map_es/1, update_c_map/2,
+ update_c_map_pair/4,
+ map_pair_op/1, map_pair_key/1, map_pair_val/1
+ ]).
-import(lists, [foldl/3, foldr/3, mapfoldl/3, reverse/1]).
@@ -128,6 +132,8 @@ weight(call) -> 3; % Assume remote-calls as efficient as `apply'.
weight(primop) -> 2; % Assume more efficient than `apply'.
weight(binary) -> 4; % Initialisation base cost.
weight(bitstr) -> 3; % Coding/decoding a value; like a primop.
+weight(map) -> 4; % Initialisation base cost.
+weight(map_pair) -> 3; % Coding/decoding a value; like a primop.
weight(module) -> 1. % Like a letrec with a constant body
%% These "reference" structures are used for variables and function
@@ -333,6 +339,8 @@ i(E, Ctxt, Ren, Env, S0) ->
i_catch(E, Ctxt, Ren, Env, S);
binary ->
i_binary(E, Ren, Env, S);
+ map ->
+ i_map(E, Ctxt, Ren, Env, S);
module ->
i_module(E, Ctxt, Ren, Env, S)
end
@@ -1324,6 +1332,25 @@ i_bitstr(E, Ren, Env, S) ->
S3 = count_size(weight(bitstr), S2),
{update_c_bitstr(E, Val, Size, Unit, Type, Flags), S3}.
+i_map(E, Ctx, Ren, Env, S) ->
+ %% Visit the segments for value.
+ {Es, S1} = mapfoldl(fun (E, S) ->
+ i_map_pair(E, Ctx, Ren, Env, S)
+ end,
+ S, map_es(E)),
+ S2 = count_size(weight(map), S1),
+ {update_c_map(E, Es), S2}.
+
+i_map_pair(E, Ctx, Ren, Env, S) ->
+ %% It is not necessary to visit the Op and Key fields,
+ %% since these are always literals.
+ {Val, S1} = i(map_pair_val(E), Ctx, Ren, Env, S),
+ Op = map_pair_op(E),
+ Key = map_pair_key(E),
+ S2 = count_size(weight(map_pair), S1),
+ {update_c_map_pair(E, Op, Key, Val), S2}.
+
+
%% This is a simplified version of `i_pattern', for lists of parameter
%% variables only. It does not modify the state.
@@ -1383,6 +1410,14 @@ i_pattern(E, Ren, Env, Ren0, Env0, S) ->
S, binary_segments(E)),
S2 = count_size(weight(binary), S1),
{update_c_binary(E, Es), S2};
+ map ->
+ {Es, S1} = mapfoldl(fun (E, S) ->
+ i_map_pair_pattern(E, Ren, Env,
+ Ren0, Env0, S)
+ end,
+ S, map_es(E)),
+ S2 = count_size(weight(map), S1),
+ {update_c_map(E, Es), S2};
_ ->
case is_literal(E) of
true ->
@@ -1416,6 +1451,15 @@ i_bitstr_pattern(E, Ren, Env, Ren0, Env0, S) ->
S3 = count_size(weight(bitstr), S2),
{update_c_bitstr(E, Val, Size, Unit, Type, Flags), S3}.
+i_map_pair_pattern(E, Ren, Env, Ren0, Env0, S) ->
+ %% It is not necessary to visit the Op it is always a literal.
+ %% Same goes for Key
+ {Val, S1} = i_pattern(map_pair_val(E), Ren, Env, Ren0, Env0, S),
+ Op = map_pair_op(E), %% should be 'exact' literal
+ Key = map_pair_key(E),
+ S2 = count_size(weight(map_pair), S1),
+ {update_c_map_pair(E, Op, Key, Val), S2}.
+
%% ---------------------------------------------------------------------
%% Other central inlining functions
diff --git a/lib/compiler/src/cerl_trees.erl b/lib/compiler/src/cerl_trees.erl
index 1e3755025f..2542841eef 100644
--- a/lib/compiler/src/cerl_trees.erl
+++ b/lib/compiler/src/cerl_trees.erl
@@ -55,7 +55,15 @@
update_c_let/4, update_c_letrec/3, update_c_module/5,
update_c_primop/3, update_c_receive/4, update_c_seq/3,
update_c_try/6, update_c_tuple/2, update_c_tuple_skel/2,
- update_c_values/2, values_es/1, var_name/1]).
+ update_c_values/2, values_es/1, var_name/1,
+
+ map_es/1,
+ ann_c_map/2,
+ update_c_map/2,
+ map_pair_key/1,map_pair_val/1,map_pair_op/1,
+ ann_c_map_pair/4,
+ update_c_map_pair/4
+ ]).
%% ---------------------------------------------------------------------
@@ -129,6 +137,12 @@ map_1(F, T) ->
map(F, cons_tl(T)));
tuple ->
update_c_tuple_skel(T, map_list(F, tuple_es(T)));
+ map ->
+ update_c_map(T, map_list(F, map_es(T)));
+ map_pair ->
+ update_c_map_pair(T, map(F, map_pair_op(T)),
+ map(F, map_pair_key(T)),
+ map(F, map_pair_val(T)));
'let' ->
update_c_let(T, map_list(F, let_vars(T)),
map(F, let_arg(T)),
@@ -235,6 +249,14 @@ fold_1(F, S, T) ->
fold(F, fold(F, S, cons_hd(T)), cons_tl(T));
tuple ->
fold_list(F, S, tuple_es(T));
+ map ->
+ fold_list(F, S, map_es(T));
+ map_pair ->
+ fold(F,
+ fold(F,
+ fold(F, S, map_pair_op(T)),
+ map_pair_key(T)),
+ map_pair_val(T));
'let' ->
fold(F, fold(F, fold_list(F, S, let_vars(T)),
let_arg(T)),
@@ -349,6 +371,14 @@ mapfold(F, S0, T) ->
tuple ->
{Ts, S1} = mapfold_list(F, S0, tuple_es(T)),
F(update_c_tuple_skel(T, Ts), S1);
+ map ->
+ {Ts, S1} = mapfold_list(F, S0, map_es(T)),
+ F(update_c_map(T, Ts), S1);
+ map_pair ->
+ {Op, S1} = mapfold(F, S0, map_pair_op(T)),
+ {Key, S2} = mapfold(F, S1, map_pair_key(T)),
+ {Val, S3} = mapfold(F, S2, map_pair_val(T)),
+ F(update_c_map_pair(T,Op,Key,Val), S3);
'let' ->
{Vs, S1} = mapfold_list(F, S0, let_vars(T)),
{A, S2} = mapfold(F, S1, let_arg(T)),
@@ -488,6 +518,10 @@ variables(T, S) ->
variables(cons_tl(T), S));
tuple ->
vars_in_list(tuple_es(T), S);
+ map ->
+ vars_in_list(map_es(T), S);
+ map_pair ->
+ vars_in_list([map_pair_op(T),map_pair_key(T), map_pair_val(T)], S);
'let' ->
Vs = variables(let_body(T), S),
Vs1 = var_list_names(let_vars(T)),
@@ -688,6 +722,16 @@ label(T, N, Env) ->
{Ts, N1} = label_list(tuple_es(T), N, Env),
{As, N2} = label_ann(T, N1),
{ann_c_tuple_skel(As, Ts), N2};
+ map ->
+ {Ts, N1} = label_list(map_es(T), N, Env),
+ {As, N2} = label_ann(T, N1),
+ {ann_c_map(As, Ts), N2};
+ map_pair ->
+ {Op, N1} = label(map_pair_op(T), N, Env),
+ {Val, N2} = label(map_pair_key(T), N1, Env),
+ {Key, N3} = label(map_pair_val(T), N2, Env),
+ {As, N4} = label_ann(T, N3),
+ {ann_c_map_pair(As,Op,Key,Val), N4};
'let' ->
{A, N1} = label(let_arg(T), N, Env),
{Vs, N2, Env1} = label_vars(let_vars(T), N1, Env),
diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl
index 3db7ffc4d2..0bb4de6f17 100644
--- a/lib/compiler/src/compile.erl
+++ b/lib/compiler/src/compile.erl
@@ -230,12 +230,25 @@ format_error({undef_parse_transform,M}) ->
format_error({core_transform,M,R}) ->
io_lib:format("error in core transform '~s': ~tp", [M, R]);
format_error({crash,Pass,Reason}) ->
- io_lib:format("internal error in ~p;\ncrash reason: ~tp", [Pass,Reason]);
+ io_lib:format("internal error in ~p;\ncrash reason: ~ts", [Pass,format_error_reason(Reason)]);
format_error({bad_return,Pass,Reason}) ->
- io_lib:format("internal error in ~p;\nbad return value: ~tp", [Pass,Reason]);
+ io_lib:format("internal error in ~p;\nbad return value: ~ts", [Pass,format_error_reason(Reason)]);
format_error({module_name,Mod,Filename}) ->
- io_lib:format("Module name '~s' does not match file name '~ts'",
- [Mod,Filename]).
+ io_lib:format("Module name '~s' does not match file name '~ts'", [Mod,Filename]).
+
+format_error_reason({Reason, Stack}) when is_list(Stack) ->
+ StackFun = fun
+ (escript, run, 2) -> true;
+ (escript, start, 1) -> true;
+ (init, start_it, 1) -> true;
+ (init, start_em, 1) -> true;
+ (_Mod, _Fun, _Arity) -> false
+ end,
+ FormatFun = fun (Term, _) -> io_lib:format("~tp", [Term]) end,
+ [io_lib:format("~tp", [Reason]),"\n\n",
+ lib:format_stacktrace(1, erlang:get_stacktrace(), StackFun, FormatFun)];
+format_error_reason(Reason) ->
+ io_lib:format("~tp", [Reason]).
%% The compile state record.
-record(compile, {filename="" :: file:filename(),
diff --git a/lib/compiler/src/core_lib.erl b/lib/compiler/src/core_lib.erl
index 824be9ff7f..f506901099 100644
--- a/lib/compiler/src/core_lib.erl
+++ b/lib/compiler/src/core_lib.erl
@@ -105,6 +105,10 @@ vu_expr(V, #c_cons{hd=H,tl=T}) ->
vu_expr(V, H) orelse vu_expr(V, T);
vu_expr(V, #c_tuple{es=Es}) ->
vu_expr_list(V, Es);
+vu_expr(V, #c_map{es=Es}) ->
+ vu_expr_list(V, Es);
+vu_expr(V, #c_map_pair{key=Key,val=Val}) ->
+ vu_expr_list(V, [Key,Val]);
vu_expr(V, #c_binary{segments=Ss}) ->
vu_seg_list(V, Ss);
vu_expr(V, #c_fun{vars=Vs,body=B}) ->
diff --git a/lib/compiler/src/core_lint.erl b/lib/compiler/src/core_lint.erl
index 67d37ff1fc..36165245a6 100644
--- a/lib/compiler/src/core_lint.erl
+++ b/lib/compiler/src/core_lint.erl
@@ -254,6 +254,10 @@ gexpr(#c_cons{hd=H,tl=T}, Def, _Rt, St) ->
gexpr_list([H,T], Def, St);
gexpr(#c_tuple{es=Es}, Def, _Rt, St) ->
gexpr_list(Es, Def, St);
+gexpr(#c_map{es=Es}, Def, _Rt, St) ->
+ gexpr_list(Es, Def, St);
+gexpr(#c_map_pair{key=K,val=V}, Def, _Rt, St) ->
+ gexpr_list([K,V], Def, St);
gexpr(#c_binary{segments=Ss}, Def, _Rt, St) ->
gbitstr_list(Ss, Def, St);
gexpr(#c_seq{arg=Arg,body=B}, Def, Rt, St0) ->
@@ -278,6 +282,7 @@ gexpr(#c_case{arg=Arg,clauses=Cs}, Def, Rt, St0) ->
St1 = gbody(Arg, Def, PatCount, St0),
clauses(Cs, Def, PatCount, Rt, St1);
gexpr(_Core, _, _, St) ->
+ %%io:fwrite("clint gexpr: ~p~n", [_Core]),
add_error({illegal_guard,St#lint.func}, St).
%% gexpr_list([Expr], Defined, State) -> State.
@@ -303,6 +308,10 @@ expr(#c_cons{hd=H,tl=T}, Def, _Rt, St) ->
expr_list([H,T], Def, St);
expr(#c_tuple{es=Es}, Def, _Rt, St) ->
expr_list(Es, Def, St);
+expr(#c_map{es=Es}, Def, _Rt, St) ->
+ expr_list(Es, Def, St);
+expr(#c_map_pair{key=K,val=V},Def,_Rt,St) ->
+ expr_list([K,V],Def,St);
expr(#c_binary{segments=Ss}, Def, _Rt, St) ->
bitstr_list(Ss, Def, St);
expr(#c_fun{vars=Vs,body=B}, Def, Rt, St0) ->
@@ -355,7 +364,7 @@ expr(#c_try{arg=A,vars=Vs,body=B,evars=Evs,handler=H}, Def, Rt, St0) ->
{Ens,St5} = variable_list(Evs, St4),
body(H, union(Ens, Def), Rt, St5);
expr(_Other, _, _, St) ->
- %%io:fwrite("clint: ~p~n", [_Other]),
+ %%io:fwrite("clint expr: ~p~n", [_Other]),
add_error({illegal_expr,St#lint.func}, St).
%% expr_list([Expr], Defined, State) -> State.
@@ -454,13 +463,19 @@ pattern(#c_cons{hd=H,tl=T}, Def, Ps, St) ->
pattern_list([H,T], Def, Ps, St);
pattern(#c_tuple{es=Es}, Def, Ps, St) ->
pattern_list(Es, Def, Ps, St);
+pattern(#c_map{es=Es}, Def, Ps, St) ->
+ pattern_list(Es, Def, Ps, St);
+pattern(#c_map_pair{op=#c_literal{val=exact},key=K,val=V},Def,Ps,St) ->
+ pattern_list([K,V],Def,Ps,St);
pattern(#c_binary{segments=Ss}, Def, Ps, St0) ->
St = pat_bin_tail_check(Ss, St0),
pat_bin(Ss, Def, Ps, St);
pattern(#c_alias{var=V,pat=P}, Def, Ps, St0) ->
{Vvs,St1} = variable(V, Ps, St0),
pattern(P, Def, union(Vvs, Ps), St1);
-pattern(_, _, Ps, St) -> {Ps,add_error({not_pattern,St#lint.func}, St)}.
+pattern(_Other, _, Ps, St) ->
+ %%io:fwrite("clint pattern: ~p~n", [_Other]),
+ {Ps,add_error({not_pattern,St#lint.func}, St)}.
pat_var(N, _Def, Ps, St) ->
case is_element(N, Ps) of
diff --git a/lib/compiler/src/core_parse.hrl b/lib/compiler/src/core_parse.hrl
index 0b8f4d8895..d54715ef59 100644
--- a/lib/compiler/src/core_parse.hrl
+++ b/lib/compiler/src/core_parse.hrl
@@ -96,3 +96,12 @@
-record(c_values, {anno=[], es}). % es :: [Tree]
-record(c_var, {anno=[], name :: cerl:var_name()}).
+
+-record(c_map_pair, {anno=[],
+ op :: #c_literal{val::'assoc'} | #c_literal{val::'exact'},
+ key,
+ val}).
+
+-record(c_map, {anno=[],
+ var=#c_literal{val=[]} :: #c_var{} | #c_literal{},
+ es :: [#c_map_pair{}]}).
diff --git a/lib/compiler/src/core_parse.yrl b/lib/compiler/src/core_parse.yrl
index 4e98a8c2da..b8db0f683a 100644
--- a/lib/compiler/src/core_parse.yrl
+++ b/lib/compiler/src/core_parse.yrl
@@ -21,6 +21,8 @@
%% Have explicit productions for annotated phrases named anno_XXX.
%% This just does an XXX and adds the annotation.
+Expect 1.
+
Nonterminals
module_definition module_export module_attribute module_defs
@@ -44,6 +46,9 @@ receive_expr timeout try_expr
sequence catch_expr
variable clause clause_pattern
+map_expr map_pairs map_pair map_pair_assoc map_pair_exact
+map_pattern map_pair_patterns map_pair_pattern
+
annotation anno_fun anno_expression anno_expressions
anno_variable anno_variables anno_pattern anno_patterns
anno_function_name
@@ -53,7 +58,7 @@ Terminals
%% Separators
-'(' ')' '{' '}' '[' ']' '|' ',' '->' '=' '/' '<' '>' ':' '-|' '#'
+'(' ')' '{' '}' '[' ']' '|' ',' '->' '=' '/' '<' '>' ':' '-|' '#' '~' '::'
%% Keywords (atoms are assumed to always be single-quoted).
@@ -166,6 +171,7 @@ anno_patterns -> anno_pattern : ['$1'].
other_pattern -> atomic_pattern : '$1'.
other_pattern -> tuple_pattern : '$1'.
+other_pattern -> map_pattern : '$1'.
other_pattern -> cons_pattern : '$1'.
other_pattern -> binary_pattern : '$1'.
other_pattern -> anno_variable '=' anno_pattern :
@@ -176,6 +182,16 @@ atomic_pattern -> atomic_literal : '$1'.
tuple_pattern -> '{' '}' : c_tuple([]).
tuple_pattern -> '{' anno_patterns '}' : c_tuple('$2').
+map_pattern -> '~' '{' '}' '~' : #c_map{es=[]}.
+map_pattern -> '~' '{' map_pair_patterns '}' '~' :
+ #c_map{es=lists:sort('$3')}.
+
+map_pair_patterns -> map_pair_pattern : ['$1'].
+map_pair_patterns -> map_pair_pattern ',' map_pair_patterns : ['$1' | '$3'].
+
+map_pair_pattern -> '~' '<' anno_pattern ',' anno_pattern '>' :
+ #c_map_pair{op=#c_literal{val=exact},key='$3',val='$5'}.
+
cons_pattern -> '[' anno_pattern tail_pattern :
#c_cons{hd='$2',tl='$3'}.
@@ -240,6 +256,7 @@ single_expression -> primop_expr : '$1'.
single_expression -> try_expr : '$1'.
single_expression -> sequence : '$1'.
single_expression -> catch_expr : '$1'.
+single_expression -> map_expr : '$1'.
literal -> atomic_literal : '$1'.
literal -> tuple_literal : '$1'.
@@ -267,6 +284,22 @@ tail_literal -> ',' literal tail_literal : #c_cons{hd='$2',tl='$3'}.
tuple -> '{' '}' : c_tuple([]).
tuple -> '{' anno_expressions '}' : c_tuple('$2').
+map_expr -> '~' '{' '}' '~' : #c_map{es=[]}.
+map_expr -> '~' '{' map_pairs '}' '~' : #c_map{es='$3'}.
+map_expr -> variable '~' '{' '}' '~' : #c_map{var='$1',es=[]}.
+map_expr -> variable '~' '{' map_pairs '}' '~' : #c_map{var='$1',es='$4'}.
+
+map_pairs -> map_pair : ['$1'].
+map_pairs -> map_pair ',' map_pairs : ['$1' | '$3'].
+
+map_pair -> map_pair_assoc : '$1'.
+map_pair -> map_pair_exact : '$1'.
+
+map_pair_assoc -> '::' '<' anno_expression ',' anno_expression'>' :
+ #c_map_pair{op=#c_literal{val=assoc},key='$3',val='$5'}.
+map_pair_exact -> '~' '<' anno_expression ',' anno_expression'>' :
+ #c_map_pair{op=#c_literal{val=exact},key='$3',val='$5'}.
+
cons -> '[' anno_expression tail : c_cons('$2', '$3').
tail -> ']' : #c_literal{val=[]}.
@@ -381,3 +414,5 @@ Erlang code.
tok_val(T) -> element(3, T).
tok_line(T) -> element(2, T).
+
+%% vim: syntax=erlang
diff --git a/lib/compiler/src/core_pp.erl b/lib/compiler/src/core_pp.erl
index 1f91a52be3..faa26ec6df 100644
--- a/lib/compiler/src/core_pp.erl
+++ b/lib/compiler/src/core_pp.erl
@@ -161,6 +161,27 @@ format_1(#c_tuple{es=Es}, Ctxt) ->
format_hseq(Es, ",", add_indent(Ctxt, 1), fun format/2),
$}
];
+format_1(#c_map{var=#c_var{}=Var,es=Es}, Ctxt) ->
+ [format_1(Var, Ctxt),
+ "~{",
+ format_hseq(Es, ",", add_indent(Ctxt, 1), fun format/2),
+ "}~"
+ ];
+format_1(#c_map{es=Es}, Ctxt) ->
+ ["~{",
+ format_hseq(Es, ",", add_indent(Ctxt, 1), fun format/2),
+ "}~"
+ ];
+format_1(#c_map_pair{op=#c_literal{val=assoc},key=K,val=V}, Ctxt) ->
+ ["::<",
+ format_hseq([K,V], ",", add_indent(Ctxt, 1), fun format/2),
+ ">"
+ ];
+format_1(#c_map_pair{op=#c_literal{val=exact},key=K,val=V}, Ctxt) ->
+ ["~<",
+ format_hseq([K,V], ",", add_indent(Ctxt, 1), fun format/2),
+ ">"
+ ];
format_1(#c_cons{hd=H,tl=T}, Ctxt) ->
Txt = ["["|format(H, add_indent(Ctxt, 1))],
[Txt|format_list_tail(T, add_indent(Ctxt, width(Txt, Ctxt)))];
diff --git a/lib/compiler/src/core_scan.erl b/lib/compiler/src/core_scan.erl
index a4fe920258..b7799b373a 100644
--- a/lib/compiler/src/core_scan.erl
+++ b/lib/compiler/src/core_scan.erl
@@ -271,6 +271,8 @@ scan1("->" ++ Cs, Toks, Pos) ->
scan1(Cs, [{'->',Pos}|Toks], Pos);
scan1("-|" ++ Cs, Toks, Pos) ->
scan1(Cs, [{'-|',Pos}|Toks], Pos);
+scan1("::" ++ Cs, Toks, Pos) ->
+ scan1(Cs, [{'::',Pos}|Toks], Pos);
scan1([C|Cs], Toks, Pos) -> %Punctuation character
P = list_to_atom([C]),
scan1(Cs, [{P,Pos}|Toks], Pos);
diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab
index ebc9b1c85b..79b467f949 100755
--- a/lib/compiler/src/genop.tab
+++ b/lib/compiler/src/genop.tab
@@ -528,3 +528,11 @@ BEAM_FORMAT_NUMBER=0
# R15A
153: line/1
+
+# R16
+
+154: put_map_assoc/5
+155: put_map_exact/5
+156: is_map/2
+157: has_map_field/3
+158: get_map_element/4
diff --git a/lib/compiler/src/sys_core_dsetel.erl b/lib/compiler/src/sys_core_dsetel.erl
index f6696992b9..60d83763f8 100644
--- a/lib/compiler/src/sys_core_dsetel.erl
+++ b/lib/compiler/src/sys_core_dsetel.erl
@@ -102,6 +102,13 @@ visit(Env, #c_literal{}=R) ->
visit(Env0, #c_tuple{es=Es0}=R) ->
{Es1,Env1} = visit_list(Env0, Es0),
{R#c_tuple{es=Es1}, Env1};
+visit(Env0, #c_map{es=Es0}=R) ->
+ {Es1,Env1} = visit_list(Env0, Es0),
+ {R#c_map{es=Es1}, Env1};
+visit(Env0, #c_map_pair{key=K0,val=V0}=R) ->
+ {K,Env1} = visit(Env0, K0),
+ {V,Env2} = visit(Env1, V0),
+ {R#c_map_pair{key=K,val=V}, Env2};
visit(Env0, #c_cons{hd=H0,tl=T0}=R) ->
{H1,Env1} = visit(Env0, H0),
{T1,Env2} = visit(Env1, T0),
@@ -212,6 +219,11 @@ visit_pat(Env0, #c_var{name=V}, Vs) ->
{[V|Vs], dict:store(V, 0, Env0)};
visit_pat(Env0, #c_tuple{es=Es}, Vs) ->
visit_pats(Es, Env0, Vs);
+visit_pat(Env0, #c_map{es=Es}, Vs) ->
+ visit_pats(Es, Env0, Vs);
+visit_pat(Env0, #c_map_pair{op=#c_literal{val=exact},key=V,val=K}, Vs0) ->
+ {Vs1, Env1} = visit_pat(Env0, V, Vs0),
+ visit_pat(Env1, K, Vs1);
visit_pat(Env0, #c_cons{hd=H,tl=T}, Vs0) ->
{Vs1, Env1} = visit_pat(Env0, H, Vs0),
visit_pat(Env1, T, Vs1);
diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl
index a388960312..1cdbac5693 100644
--- a/lib/compiler/src/sys_core_fold.erl
+++ b/lib/compiler/src/sys_core_fold.erl
@@ -246,6 +246,16 @@ expr(#c_tuple{anno=Anno,es=Es0}=Tuple, Ctxt, Sub) ->
value ->
ann_c_tuple(Anno, Es)
end;
+expr(#c_map{var=V0,es=Es0}=Map, Ctxt, Sub) ->
+ Es = pair_list(Es0, Ctxt, Sub),
+ case Ctxt of
+ effect ->
+ add_warning(Map, useless_building),
+ expr(make_effect_seq(Es, Sub), Ctxt, Sub);
+ value ->
+ V = expr(V0, Ctxt, Sub),
+ Map#c_map{var=V,es=Es}
+ end;
expr(#c_binary{segments=Ss}=Bin0, Ctxt, Sub) ->
%% Warn for useless building, but always build the binary
%% anyway to preserve a possible exception.
@@ -408,6 +418,16 @@ expr(#c_try{anno=A,arg=E0,vars=Vs0,body=B0,evars=Evs0,handler=H0}=Try, _, Sub0)
expr_list(Es, Ctxt, Sub) ->
[expr(E, Ctxt, Sub) || E <- Es].
+pair_list(Es, Ctxt, Sub) ->
+ [pair(E, Ctxt, Sub) || E <- Es].
+
+pair(#c_map_pair{key=K,val=V}, effect, Sub) ->
+ make_effect_seq([K,V], Sub);
+pair(#c_map_pair{key=K0,val=V0}=Pair, value=Ctxt, Sub) ->
+ K = expr(K0, Ctxt, Sub),
+ V = expr(V0, Ctxt, Sub),
+ Pair#c_map_pair{key=K,val=V}.
+
bitstr_list(Es, Sub) ->
[bitstr(E, Sub) || E <- Es].
@@ -677,7 +697,7 @@ useless_call(effect, #c_call{anno=Anno,
useless_call(_, _) -> no.
%% make_effect_seq([Expr], Sub) -> #c_seq{}|void()
-%% Convert a list of epressions evaluated in effect context to a chain of
+%% Convert a list of expressions evaluated in effect context to a chain of
%% #c_seq{}. The body in the innermost #c_seq{} will be void().
%% Anything that will not have any effect will be thrown away.
@@ -1500,6 +1520,9 @@ pattern(#c_cons{anno=Anno,hd=H0,tl=T0}, Isub, Osub0) ->
pattern(#c_tuple{anno=Anno,es=Es0}, Isub, Osub0) ->
{Es1,Osub1} = pattern_list(Es0, Isub, Osub0),
{ann_c_tuple(Anno, Es1),Osub1};
+pattern(#c_map{anno=Anno,es=Es0}=Map, Isub, Osub0) ->
+ {Es1,Osub1} = map_pair_pattern_list(Es0, Isub, Osub0),
+ {Map#c_map{anno=Anno,es=Es1},Osub1};
pattern(#c_binary{segments=V0}=Pat, Isub, Osub0) ->
{V1,Osub1} = bin_pattern_list(V0, Isub, Osub0),
{Pat#c_binary{segments=V1},Osub1};
@@ -1509,6 +1532,15 @@ pattern(#c_alias{var=V0,pat=P0}=Pat, Isub, Osub0) ->
Osub = update_types(V1, [P1], Osub2),
{Pat#c_alias{var=V1,pat=P1},Osub}.
+map_pair_pattern_list(Ps0, Isub, Osub0) ->
+ {Ps,{_,Osub}} = mapfoldl(fun map_pair_pattern/2, {Isub,Osub0}, Ps0),
+ {Ps,Osub}.
+
+map_pair_pattern(#c_map_pair{op=#c_literal{val=exact},key=K0,val=V0}=Pair, {Isub,Osub0}) ->
+ {K,Osub1} = pattern(K0, Isub, Osub0),
+ {V,Osub} = pattern(V0, Isub, Osub1),
+ {Pair#c_map_pair{key=K,val=V},{Isub,Osub}}.
+
bin_pattern_list(Ps0, Isub, Osub0) ->
{Ps,{_,Osub}} = mapfoldl(fun bin_pattern/2, {Isub,Osub0}, Ps0),
{Ps,Osub}.
@@ -2987,6 +3019,9 @@ format_error(result_ignored) ->
"(suppress the warning by assigning the expression to the _ variable)";
format_error(useless_building) ->
"a term is constructed, but never used";
+format_error({map_pair_key_overloaded,K}) ->
+ M = io_lib:format("the key ~p is used multiple times in map value association",[K]),
+ flatten(M);
format_error(bin_opt_alias) ->
"INFO: the '=' operator will prevent delayed sub binary optimization";
format_error(bin_partition) ->
diff --git a/lib/compiler/src/sys_pre_expand.erl b/lib/compiler/src/sys_pre_expand.erl
index 48d9c16718..9998043013 100644
--- a/lib/compiler/src/sys_pre_expand.erl
+++ b/lib/compiler/src/sys_pre_expand.erl
@@ -228,6 +228,13 @@ pattern({cons,Line,H,T}, St0) ->
pattern({tuple,Line,Ps}, St0) ->
{TPs,St1} = pattern_list(Ps, St0),
{{tuple,Line,TPs},St1};
+pattern({map,Line,Ps}, St0) ->
+ {TPs,St1} = pattern_list(Ps, St0),
+ {{map,Line,TPs},St1};
+pattern({map_field_exact,Line,K0,V0}, St0) ->
+ {K,St1} = pattern(K0, St0),
+ {V,St2} = pattern(V0, St1),
+ {{map_field_exact,Line,K,V},St2};
%%pattern({struct,Line,Tag,Ps}, St0) ->
%% {TPs,TPsvs,St1} = pattern_list(Ps, St0),
%% {{tuple,Line,[{atom,Line,Tag}|TPs]},TPsvs,St1};
@@ -321,6 +328,20 @@ expr({tuple,Line,Es0}, St0) ->
%%expr({struct,Line,Tag,Es0}, Vs, St0) ->
%% {Es1,Esvs,Esus,St1} = expr_list(Es0, Vs, St0),
%% {{tuple,Line,[{atom,Line,Tag}|Es1]},Esvs,Esus,St1};
+expr({map,Line,Es0}, St0) ->
+ {Es1,St1} = expr_list(Es0, St0),
+ {{map,Line,Es1},St1};
+expr({map,Line,Var,Es0}, St0) ->
+ {Es1,St1} = expr_list(Es0, St0),
+ {{map,Line,Var,Es1},St1};
+expr({map_field_assoc,Line,K0,V0}, St0) ->
+ {K,St1} = expr(K0, St0),
+ {V,St2} = expr(V0, St1),
+ {{map_field_assoc,Line,K,V},St2};
+expr({map_field_exact,Line,K0,V0}, St0) ->
+ {K,St1} = expr(K0, St0),
+ {V,St2} = expr(V0, St1),
+ {{map_field_exact,Line,K,V},St2};
expr({bin,Line,Es0}, St0) ->
{Es1,St1} = expr_bin(Es0, St0),
{{bin,Line,Es1},St1};
diff --git a/lib/compiler/src/v3_codegen.erl b/lib/compiler/src/v3_codegen.erl
index f534500671..c8735a76e8 100644
--- a/lib/compiler/src/v3_codegen.erl
+++ b/lib/compiler/src/v3_codegen.erl
@@ -210,6 +210,8 @@ need_heap_0([], H, Acc) ->
need_heap_1(#l{ke={set,_,{binary,_}},i=I}, H) ->
{need_heap_need(I, H),0};
+need_heap_1(#l{ke={set,_,{map,_,_}},i=I}, H) ->
+ {need_heap_need(I, H),0};
need_heap_1(#l{ke={set,_,Val}}, H) ->
%% Just pass through adding to needed heap.
{[],H + case Val of
@@ -453,8 +455,11 @@ basic_block([Le|Les], Acc) ->
end;
no_block -> {reverse(Acc, [Le]),Les}
end.
+
+%% sets that may garbage collect are not allowed in basic blocks.
collect_block({set,_,{binary,_}}) -> no_block;
+collect_block({set,_,{map,_,_}}) -> no_block;
collect_block({set,_,_}) -> include;
collect_block({call,{var,_}=Var,As,_Rs}) -> {block_end,As++[Var]};
collect_block({call,Func,As,_Rs}) -> {block_end,As++func_vars(Func)};
@@ -594,14 +599,13 @@ top_level_block(Keis, Bef, MaxRegs, _St) ->
%% number to the outer catch, which is wrong.
turn_yregs(0, Tp, _) -> Tp;
-turn_yregs(El, Tp, MaxY) when element(1, element(El, Tp)) =:= yy ->
- turn_yregs(El-1, setelement(El, Tp, {y,MaxY-element(2, element(El, Tp))}), MaxY);
-turn_yregs(El, Tp, MaxY) when is_list(element(El, Tp)) ->
- New = map(fun ({yy,YY}) -> {y,MaxY-YY};
- (Other) -> Other end, element(El, Tp)),
- turn_yregs(El-1, setelement(El, Tp, New), MaxY);
turn_yregs(El, Tp, MaxY) ->
- turn_yregs(El-1, Tp, MaxY).
+ turn_yregs(El-1,setelement(El,Tp,turn_yreg(element(El,Tp),MaxY)),MaxY).
+
+turn_yreg({yy,YY},MaxY) -> {y,MaxY-YY};
+turn_yreg({list,Ls},MaxY) -> {list, turn_yreg(Ls,MaxY)};
+turn_yreg(Ts,MaxY) when is_list(Ts) -> [turn_yreg(T,MaxY)||T<-Ts];
+turn_yreg(Other,_MaxY) -> Other.
%% select_cg(Sclause, V, TypeFail, ValueFail, StackReg, State) ->
%% {Is,StackReg,State}.
@@ -623,6 +627,8 @@ select_cg(#l{ke={type_clause,bin_int,S}}, {var,V}, Tf, _Vf, Bef, St) ->
select_bin_segs(S, V, Tf, Bef, St);
select_cg(#l{ke={type_clause,bin_end,[S]}}, {var,V}, Tf, _Vf, Bef, St) ->
select_bin_end(S, V, Tf, Bef, St);
+select_cg(#l{ke={type_clause,map,S}}, {var,V}, Tf, Vf, Bef, St) ->
+ select_map(S, V, Tf, Vf, Bef, St);
select_cg(#l{ke={type_clause,Type,Scs}}, {var,V}, Tf, Vf, Bef, St0) ->
{Vis,{Aft,St1}} =
mapfoldl(fun (S, {Int,Sta}) ->
@@ -637,6 +643,10 @@ select_val_cg(tuple, R, [Arity,{f,Lbl}], Tf, Vf, [{label,Lbl}|Sis]) ->
[{test,is_tuple,{f,Tf},[R]},{test,test_arity,{f,Vf},[R,Arity]}|Sis];
select_val_cg(tuple, R, Vls, Tf, Vf, Sis) ->
[{test,is_tuple,{f,Tf},[R]},{select_tuple_arity,R,{f,Vf},{list,Vls}}|Sis];
+select_val_cg(map, R, [_Val,{f,Lbl}], Fail, Fail, [{label,Lbl}|Sis]) ->
+ [{test,is_map,{f,Fail},[R]}|Sis];
+select_val_cg(map, R, [_Val,{f,Lbl}|_], Tf, _Vf, [{label,Lbl}|Sis]) ->
+ [{test,is_map,{f,Tf},[R]}|Sis];
select_val_cg(Type, R, [Val, {f,Lbl}], Fail, Fail, [{label,Lbl}|Sis]) ->
[{test,is_eq_exact,{f,Fail},[R,{Type,Val}]}|Sis];
select_val_cg(Type, R, [Val, {f,Lbl}], Tf, Vf, [{label,Lbl}|Sis]) ->
@@ -915,6 +925,36 @@ select_extract_tuple(Src, Vs, I, Vdb, Bef, St) ->
{Es,{Aft,_}} = flatmapfoldl(F, {Bef,0}, Vs),
{Es,Aft,St}.
+select_map(Scs, V, Tf, Vf, Bef, St0) ->
+ Reg = fetch_var(V, Bef),
+ {Is,Aft,St1} =
+ match_fmf(fun(#l{ke={val_clause,{map,Es},B},i=I,vdb=Vdb}, Fail, St1) ->
+ select_map_val(V, Es, B, Fail, I, Vdb, Bef, St1)
+ end, Vf, St0, Scs),
+ {[{test,is_map,{f,Tf},[Reg]}|Is],Aft,St1}.
+
+select_map_val(V, Es, B, Fail, I, Vdb, Bef, St0) ->
+ {Eis,Int,St1} = select_extract_map(V, Es, Fail, I, Vdb, Bef, St0),
+ {Bis,Aft,St2} = match_cg(B, Fail, Int, St1),
+ {Eis++Bis,Aft,St2}.
+
+select_extract_map(Src, Vs, Fail, I, Vdb, Bef, St) ->
+ F = fun ({map_pair,Key,{var,V}}, Int0) ->
+ Rsrc = fetch_var(Src, Int0),
+ case vdb_find(V, Vdb) of
+ {V,_,L} when L =< I ->
+ {[{test,has_map_field,{f,Fail},[Rsrc,Key]}],Int0};
+ _Other ->
+ Reg1 = put_reg(V, Int0#sr.reg),
+ Int1 = Int0#sr{reg=Reg1},
+ {[{get_map_element,{f,Fail},
+ Rsrc,Key,fetch_reg(V, Reg1)}],
+ Int1}
+ end
+ end,
+ {Es,Aft} = flatmapfoldl(F, Bef, Vs),
+ {Es,Aft,St}.
+
select_extract_cons(Src, [{var,Hd}, {var,Tl}], I, Vdb, Bef, St) ->
{Es,Aft} = case {vdb_find(Hd, Vdb), vdb_find(Tl, Vdb)} of
{{_,_,Lhd}, {_,_,Ltl}} when Lhd =< I, Ltl =< I ->
@@ -1408,7 +1448,7 @@ catch_cg(C, {var,R}, Le, Vdb, Bef, St0) ->
%% annotation must reflect this and make sure that the return
%% variable is allocated first.
%%
-%% put_list for constructing a cons is an atomic instruction
+%% put_list and put_map are atomic instructions, both of
%% which can safely resuse one of the source registers as target.
set_cg([{var,R}], {cons,Es}, Le, Vdb, Bef, St) ->
@@ -1448,6 +1488,55 @@ set_cg([{var,R}], {binary,Segs}, Le, Vdb, Bef,
%% Now generate the complete code for constructing the binary.
Code = cg_binary(PutCode, Target, Temp, Fail, MaxRegs, Le#l.a),
{Sis++Code,Aft,St};
+set_cg([{var,R}], {map,SrcMap,Es0}, Le, Vdb, Bef,
+ #cg{in_catch=InCatch,bfail=Bfail}=St) ->
+ Fail = {f,Bfail},
+ {Sis,Int0} =
+ case InCatch of
+ true -> adjust_stack(Bef, Le#l.i, Le#l.i+1, Vdb);
+ false -> {[],Bef}
+ end,
+ Line = line(Le#l.a),
+ SrcReg = case SrcMap of
+ {var,SrcVar} -> fetch_var(SrcVar, Int0);
+ _ -> SrcMap
+ end,
+ {Assoc,Exact} =
+ try
+ cg_map_pairs(Es0)
+ catch
+ throw:badarg ->
+ {[],[{{float,0.0},{atom,badarg}},
+ {{integer,0},{atom,badarg}}]}
+ end,
+ F = fun ({K,{var,V}}) -> [K,fetch_var(V, Int0)];
+ ({K,E}) -> [K,E]
+ end,
+ AssocList = flatmap(F, Assoc),
+ ExactList = flatmap(F, Exact),
+ Live0 = max_reg(Bef#sr.reg),
+ Int1 = clear_dead(Int0, Le#l.i, Vdb),
+ Aft = Bef#sr{reg=put_reg(R, Int1#sr.reg)},
+ Target = fetch_reg(R, Aft#sr.reg),
+ Code = [Line] ++
+ case {AssocList,ExactList} of
+ {[_|_],[]} ->
+ [{put_map_assoc,Fail,SrcReg,Target,Live0,{list,AssocList}}];
+ {[_|_],[_|_]} ->
+ Live = case Target of
+ {x,TargetX} when TargetX =:= Live0 ->
+ Live0 + 1;
+ _ ->
+ Live0
+ end,
+ [{put_map_assoc,Fail,SrcReg,Target,Live0,{list,AssocList}},
+ {put_map_exact,Fail,Target,Target,Live,{list,ExactList}}];
+ {[],[_|_]} ->
+ [{put_map_exact,Fail,SrcReg,Target,Live0,{list,ExactList}}];
+ {[],[]} ->
+ [{put_map_assoc,Fail,SrcReg,Target,Live0,{list,[]}}]
+ end,
+ {Sis++Code,Aft,St};
set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
%% Find a place for the return register first.
Int = Bef#sr{reg=put_reg(R, Bef#sr.reg)},
@@ -1460,6 +1549,71 @@ set_cg([{var,R}], Con, Le, Vdb, Bef, St) ->
end,
{Ais,clear_dead(Int, Le#l.i, Vdb),St}.
+%% cg_map_pairs(MapPairs) -> {Assoc,Exact}
+%% Assoc = Exact = [{K,V}]
+%%
+%% Remove multiple assignments to the same key, and return
+%% one list key-value list with all keys that may or may not exist
+%% (Assoc), and one with keys that must exist (Exact).
+%%
+
+cg_map_pairs(Es0) ->
+ Es = cg_map_pairs_1(Es0, 0),
+ R0 = sofs:relation(Es),
+ R1 = sofs:relation_to_family(R0),
+ R2 = sofs:to_external(R1),
+
+ %% R2 is now [{KeyValue,[{Order,Op,OriginalKey,Value}]}]
+ R3 = [begin
+ %% The value for the last pair determines the value.
+ {_,_,_,V} = lists:last(Vs),
+ {Op,{_,SortOrder}=K} = map_pair_op_and_key(Vs),
+ {Op,{SortOrder,K,V}}
+ end || {_,Vs} <- R2],
+
+ %% R3 is now [{Op,{Key,Value}}]
+ R = termsort(R3),
+
+ %% R4 is now sorted with all alloc first in the list, followed by
+ %% all exact.
+ {Assoc,Exact} = lists:partition(fun({Op,_}) -> Op =:= assoc end, R),
+ {[{K,V} || {_,{_,K,V}} <- Assoc],
+ [{K,V} || {_,{_,K,V}} <- Exact]}.
+
+cg_map_pairs_1([{map_pair_assoc,{_,Kv}=K,V}|T], Order) ->
+ [{Kv,{Order,assoc,K,V}}|cg_map_pairs_1(T, Order+1)];
+cg_map_pairs_1([{map_pair_exact,{_,Kv}=K,V}|T], Order) ->
+ [{Kv,{Order,exact,K,V}}|cg_map_pairs_1(T, Order+1)];
+cg_map_pairs_1([], _) -> [].
+
+%% map_pair_op_and_key({_,Op,K,_}) -> {Operator,Key}
+%% Determine the operator and key to use. Throw a 'badarg'
+%% exception if there are contradictory exact updates.
+
+map_pair_op_and_key(L) ->
+ case [K || {_,exact,K,_} <- L] of
+ [K] ->
+ %% There is a single ':=' operator. Use that key.
+ {exact,K};
+ [K|T] ->
+ %% There is more than one ':=' operator. All of them
+ %% must have the same key.
+ case lists:all(fun(E) -> E =:= K end, T) of
+ true ->
+ {exact,K};
+ false ->
+ %% Some keys are different, e.g. 1 and 1.0.
+ throw(badarg)
+ end;
+ [] ->
+ %% Only '=>' operators. Use the first key in the list.
+ [{_,assoc,K,_}|_] = L,
+ {assoc,K}
+ end.
+
+termsort(Ls) ->
+ lists:sort(fun(A,B) -> erts_internal:cmp_term(A,B) < 0 end, Ls).
+
%%%
%%% Code generation for constructing binaries.
%%%
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index a5f31f3844..e30bfa729c 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -487,6 +487,17 @@ expr({tuple,L,Es0}, St0) ->
{Es1,Eps,St1} = safe_list(Es0, St0),
A = lineno_anno(L, St1),
{ann_c_tuple(A, Es1),Eps,St1};
+expr({map,L,Es0}, St0) ->
+ % erl_lint should make sure only #{ K => V } are allowed
+ % in map construction.
+ {Es1,Eps,St1} = map_pair_list(Es0, St0),
+ A = lineno_anno(L, St1),
+ {#c_map{anno=A,es=Es1},Eps,St1};
+expr({map,L,M0,Es0}, St0) ->
+ {M1,Mps,St1} = safe(M0, St0),
+ {Es1,Eps,St2} = map_pair_list(Es0, St1),
+ A = lineno_anno(L, St2),
+ {#c_map{anno=A,var=M1,es=Es1},Mps++Eps,St2};
expr({bin,L,Es0}, St0) ->
try expr_bin(Es0, lineno_anno(L, St0), St0) of
{_,_,_}=Res -> Res
@@ -695,6 +706,21 @@ make_bool_switch_guard(L, E, V, T, F) ->
{clause,NegL,[V],[],[V]}
]}.
+map_pair_list(Es, St) ->
+ foldr(fun
+ ({map_field_assoc,L,K0,V0}, {Ces,Esp,St0}) ->
+ {K,Ep0,St1} = safe(K0, St0),
+ {V,Ep1,St2} = safe(V0, St1),
+ A = lineno_anno(L, St2),
+ Pair = #c_map_pair{op=#c_literal{val=assoc},anno=A,key=K,val=V},
+ {[Pair|Ces],Ep0 ++ Ep1 ++ Esp,St2};
+ ({map_field_exact,L,K0,V0}, {Ces,Esp,St0}) ->
+ {K,Ep0,St1} = safe(K0, St0),
+ {V,Ep1,St2} = safe(V0, St1),
+ A = lineno_anno(L, St2),
+ Pair = #c_map_pair{op=#c_literal{val=exact},anno=A,key=K,val=V},
+ {[Pair|Ces],Ep0 ++ Ep1 ++ Esp,St2}
+ end, {[],[],St}, Es).
%% try_exception([ExcpClause], St) -> {[ExcpVar],Handler,St}.
@@ -1478,6 +1504,26 @@ pattern({cons,L,H,T}, St) ->
ann_c_cons(lineno_anno(L, St), pattern(H, St), pattern(T, St));
pattern({tuple,L,Ps}, St) ->
ann_c_tuple(lineno_anno(L, St), pattern_list(Ps, St));
+pattern({map,L,Ps}, St) ->
+ #c_map{anno=lineno_anno(L, St), es=sort(pattern_list(Ps, St))};
+pattern({map_field_exact,L,K,V}, St) ->
+ %% FIXME: Better way to construct literals? or missing case
+ %% {Key,_,_} = expr(K, St),
+ Key = case K of
+ {bin,L,Es0} ->
+ case constant_bin(Es0) of
+ error ->
+ throw(badmatch);
+ Bin ->
+ #c_literal{anno=lineno_anno(L,St),val=Bin}
+ end;
+ _ ->
+ pattern(K,St)
+ end,
+ #c_map_pair{anno=lineno_anno(L, St),
+ op=#c_literal{val=exact},
+ key=Key,
+ val=pattern(V, St)};
pattern({bin,L,Ps}, St) ->
%% We don't create a #ibinary record here, since there is
%% no need to hold any used/new annotations in a pattern.
@@ -1823,6 +1869,12 @@ upattern(#c_cons{hd=H0,tl=T0}=Cons, Ks, St0) ->
upattern(#c_tuple{es=Es0}=Tuple, Ks, St0) ->
{Es1,Esg,Esv,Eus,St1} = upattern_list(Es0, Ks, St0),
{Tuple#c_tuple{es=Es1},Esg,Esv,Eus,St1};
+upattern(#c_map{es=Es0}=Map, Ks, St0) ->
+ {Es1,Esg,Esv,Eus,St1} = upattern_list(Es0, Ks, St0),
+ {Map#c_map{es=Es1},Esg,Esv,Eus,St1};
+upattern(#c_map_pair{op=#c_literal{val=exact},val=V0}=MapPair, Ks, St0) ->
+ {V,Vg,Vv,Vu,St1} = upattern(V0, Ks, St0),
+ {MapPair#c_map_pair{val=V},Vg,Vv,Vu,St1};
upattern(#c_binary{segments=Es0}=Bin, Ks, St0) ->
{Es1,Esg,Esv,Eus,St1} = upat_bin(Es0, Ks, St0),
{Bin#c_binary{segments=Es1},Esg,Esv,Eus,St1};
@@ -2152,6 +2204,9 @@ is_simple(#c_literal{}) -> true;
is_simple(#c_cons{hd=H,tl=T}) ->
is_simple(H) andalso is_simple(T);
is_simple(#c_tuple{es=Es}) -> is_simple_list(Es);
+is_simple(#c_map{es=Es}) -> is_simple_list(Es);
+is_simple(#c_map_pair{key=K,val=V}) ->
+ is_simple(K) andalso is_simple(V);
is_simple(_) -> false.
-spec is_simple_list([cerl:cerl()]) -> boolean().
diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl
index 65f1251099..9a2b1605ad 100644
--- a/lib/compiler/src/v3_kernel.erl
+++ b/lib/compiler/src/v3_kernel.erl
@@ -272,6 +272,10 @@ expr(#c_cons{anno=A,hd=Ch,tl=Ct}, Sub, St0) ->
expr(#c_tuple{anno=A,es=Ces}, Sub, St0) ->
{Kes,Ep,St1} = atomic_list(Ces, Sub, St0),
{#k_tuple{anno=A,es=Kes},Ep,St1};
+expr(#c_map{anno=A,var=Var0,es=Ces}, Sub, St0) ->
+ {Var,[],St1} = expr(Var0, Sub, St0),
+ {Kes,Ep,St2} = map_pairs(Ces, Sub, St1),
+ {#k_map{anno=A,var=Var,es=Kes},Ep,St2};
expr(#c_binary{anno=A,segments=Cv}, Sub, St0) ->
try atomic_bin(Cv, Sub, St0) of
{Kv,Ep,St1} ->
@@ -493,6 +497,16 @@ translate_match_fail_1(Anno, As, Sub, #kern{ff=FF}) ->
translate_fc(Args) ->
[#c_literal{val=function_clause},make_list(Args)].
+%% FIXME: Not completed
+map_pairs(Es, Sub, St) ->
+ foldr(fun
+ (#c_map_pair{op=#c_literal{val=Op},key=K0,val=V0}, {Kes,Esp,St0}) when
+ Op =:= assoc; Op =:= exact -> %% assert Op
+ {K,[],St1} = expr(K0, Sub, St0),
+ {V,Ep,St2} = atomic(V0, Sub, St1),
+ {[#k_map_pair{op=Op,key=K,val=V}|Kes],Ep ++ Esp,St2}
+ end, {[],[],St}, Es).
+
%% call_type(Module, Function, Arity) -> call | bif | apply | error.
%% Classify the call.
call_type(#c_literal{val=M}, #c_literal{val=F}, Ar) when is_atom(M), is_atom(F) ->
@@ -648,6 +662,13 @@ pattern(#c_cons{anno=A,hd=Ch,tl=Ct}, Isub, Osub0, St0) ->
pattern(#c_tuple{anno=A,es=Ces}, Isub, Osub0, St0) ->
{Kes,Osub1,St1} = pattern_list(Ces, Isub, Osub0, St0),
{#k_tuple{anno=A,es=Kes},Osub1,St1};
+pattern(#c_map{anno=A,es=Ces}, Isub, Osub0, St0) ->
+ {Kes,Osub1,St1} = pattern_list(Ces, Isub, Osub0, St0),
+ {#k_map{anno=A,es=Kes},Osub1,St1};
+pattern(#c_map_pair{op=#c_literal{val=exact},anno=A,key=Ck,val=Cv},Isub, Osub0, St0) ->
+ {Kk,Osub1,St1} = pattern(Ck, Isub, Osub0, St0),
+ {Kv,Osub2,St2} = pattern(Cv, Isub, Osub1, St1),
+ {#k_map_pair{anno=A,op=exact,key=Kk,val=Kv},Osub2,St2};
pattern(#c_binary{anno=A,segments=Cv}, Isub, Osub0, St0) ->
{Kv,Osub1,St1} = pattern_bin(Cv, Isub, Osub0, St0),
{#k_binary{anno=A,segs=Kv},Osub1,St1};
@@ -1015,7 +1036,8 @@ match_con_1([U|_Us] = L, Cs, Def, St0) ->
%% Extract clauses for different constructors (types).
%%ok = io:format("match_con ~p~n", [Cs]),
Ttcs = select_types([k_binary], Cs) ++ select_bin_con(Cs) ++
- select_types([k_cons,k_tuple,k_atom,k_float,k_int,k_nil,k_literal], Cs),
+ select_types([k_cons,k_tuple,k_map,k_atom,k_float,k_int,
+ k_nil,k_literal], Cs),
%%ok = io:format("ttcs = ~p~n", [Ttcs]),
{Scs,St1} =
mapfoldl(fun ({T,Tcs}, St) ->
@@ -1251,10 +1273,9 @@ group_value(k_cons, Cs) -> [Cs]; %These are single valued
group_value(k_nil, Cs) -> [Cs];
group_value(k_binary, Cs) -> [Cs];
group_value(k_bin_end, Cs) -> [Cs];
-group_value(k_bin_seg, Cs) ->
- group_bin_seg(Cs);
-group_value(k_bin_int, Cs) ->
- [Cs];
+group_value(k_bin_seg, Cs) -> group_bin_seg(Cs);
+group_value(k_bin_int, Cs) -> [Cs];
+group_value(k_map, Cs) -> group_map(Cs);
group_value(_, Cs) ->
%% group_value(Cs).
Cd = foldl(fun (C, Gcs0) -> dict:append(clause_val(C), C, Gcs0) end,
@@ -1267,6 +1288,12 @@ group_bin_seg([C1|Cs]) ->
[[C1|More]|group_bin_seg(Rest)];
group_bin_seg([]) -> [].
+group_map([C1|Cs]) ->
+ V1 = clause_val(C1),
+ {More,Rest} = splitwith(fun (C) -> clause_val(C) =:= V1 end, Cs),
+ [[C1|More]|group_map(Rest)];
+group_map([]) -> [].
+
%% Profiling shows that this quadratic implementation account for a big amount
%% of the execution time if there are many values.
% group_value([C|Cs]) ->
@@ -1315,6 +1342,13 @@ get_match(#k_bin_int{}=BinInt, St0) ->
get_match(#k_tuple{es=Es}, St0) ->
{Mes,St1} = new_vars(length(Es), St0),
{#k_tuple{es=Mes},Mes,St1};
+get_match(#k_map{es=Es0}, St0) ->
+ {Mes,St1} = new_vars(length(Es0), St0),
+ {Es,_} = mapfoldl(fun
+ (#k_map_pair{}=Pair, [V|Vs]) ->
+ {Pair#k_map_pair{val=V},Vs}
+ end, Mes, Es0),
+ {#k_map{es=Es},Mes,St1};
get_match(M, St) ->
{M,[],St}.
@@ -1331,7 +1365,12 @@ new_clauses(Cs0, U, St) ->
[S,N|As];
#k_bin_int{next=N} ->
[N|As];
- _Other -> As
+ #k_map{es=Es} ->
+ Vals = [V ||
+ #k_map_pair{op=exact,val=V} <- Es],
+ Vals ++ As;
+ _Other ->
+ As
end,
Vs = arg_alias(Arg),
Osub1 = foldl(fun (#k_var{name=V}, Acc) ->
@@ -1406,6 +1445,7 @@ arg_con(Arg) ->
#k_nil{} -> k_nil;
#k_cons{} -> k_cons;
#k_tuple{} -> k_tuple;
+ #k_map{} -> k_map;
#k_binary{} -> k_binary;
#k_bin_end{} -> k_bin_end;
#k_bin_seg{} -> k_bin_seg;
@@ -1426,7 +1466,15 @@ arg_val(Arg, C) ->
{#k_var{name=get_vsub(V, Isub)},U,T,Fs};
_ ->
{set_kanno(S, []),U,T,Fs}
- end
+ end;
+ #k_map{es=Es} ->
+ Keys = [begin
+ #k_map_pair{op=exact,key=#k_literal{val=Key}} = Pair,
+ Key
+ end || Pair <- Es],
+ %% multiple keys may have the same name
+ %% do not use ordsets
+ lists:sort(Keys)
end.
%% ubody_used_vars(Expr, State) -> [UsedVar]
@@ -1795,6 +1843,10 @@ lit_vars(#k_atom{}) -> [];
lit_vars(#k_nil{}) -> [];
lit_vars(#k_cons{hd=H,tl=T}) ->
union(lit_vars(H), lit_vars(T));
+lit_vars(#k_map{var=Var,es=Es}) ->
+ lit_list_vars([Var|Es]);
+lit_vars(#k_map_pair{key=K,val=V}) ->
+ union(lit_vars(K), lit_vars(V));
lit_vars(#k_binary{segs=V}) -> lit_vars(V);
lit_vars(#k_bin_end{}) -> [];
lit_vars(#k_bin_seg{size=Size,seg=S,next=N}) ->
@@ -1830,7 +1882,11 @@ pat_vars(#k_bin_int{size=Size}) ->
{U,[]};
pat_vars(#k_bin_end{}) -> {[],[]};
pat_vars(#k_tuple{es=Es}) ->
- pat_list_vars(Es).
+ pat_list_vars(Es);
+pat_vars(#k_map{es=Es}) ->
+ pat_list_vars(Es);
+pat_vars(#k_map_pair{op=exact,val=V}) ->
+ pat_vars(V).
pat_list_vars(Ps) ->
foldl(fun (P, {Used0,New0}) ->
diff --git a/lib/compiler/src/v3_kernel.hrl b/lib/compiler/src/v3_kernel.hrl
index fb8baf398b..c7886a070d 100644
--- a/lib/compiler/src/v3_kernel.hrl
+++ b/lib/compiler/src/v3_kernel.hrl
@@ -38,6 +38,8 @@
-record(k_nil, {anno=[]}).
-record(k_tuple, {anno=[],es}).
+-record(k_map, {anno=[],var,es}).
+-record(k_map_pair, {anno=[],op,key,val}).
-record(k_cons, {anno=[],hd,tl}).
-record(k_binary, {anno=[],segs}).
-record(k_bin_seg, {anno=[],size,unit,type,flags,seg,next}).
diff --git a/lib/compiler/src/v3_kernel_pp.erl b/lib/compiler/src/v3_kernel_pp.erl
index e363a5387a..edbd3f74f8 100644
--- a/lib/compiler/src/v3_kernel_pp.erl
+++ b/lib/compiler/src/v3_kernel_pp.erl
@@ -104,6 +104,21 @@ format_1(#k_tuple{es=Es}, Ctxt) ->
format_hseq(Es, ",", ctxt_bump_indent(Ctxt, 1), fun format/2),
$}
];
+format_1(#k_map{var=#k_var{}=Var,es=Es}, Ctxt) ->
+ [$~,${,
+ format_hseq(Es, ",", ctxt_bump_indent(Ctxt, 1), fun format/2),
+ " | ",format_1(Var, Ctxt),
+ $},$~
+ ];
+format_1(#k_map{es=Es}, Ctxt) ->
+ [$~,${,
+ format_hseq(Es, ",", ctxt_bump_indent(Ctxt, 1), fun format/2),
+ $},$~
+ ];
+format_1(#k_map_pair{op=assoc,key=K,val=V}, Ctxt) ->
+ ["~<",format(K, Ctxt),",",format(V, Ctxt),">"];
+format_1(#k_map_pair{op=exact,key=K,val=V}, Ctxt) ->
+ ["::<",format(K, Ctxt),",",format(V, Ctxt),">"];
format_1(#k_binary{segs=S}, Ctxt) ->
["#<",format(S, ctxt_bump_indent(Ctxt, 2)),">#"];
format_1(#k_bin_seg{next=Next}=S, Ctxt) ->
diff --git a/lib/compiler/src/v3_life.erl b/lib/compiler/src/v3_life.erl
index 2cc3493570..ae928e955c 100644
--- a/lib/compiler/src/v3_life.erl
+++ b/lib/compiler/src/v3_life.erl
@@ -323,7 +323,9 @@ type(k_tuple) -> tuple;
type(k_binary) -> binary;
type(k_bin_seg) -> bin_seg;
type(k_bin_int) -> bin_int;
-type(k_bin_end) -> bin_end.
+type(k_bin_end) -> bin_end;
+type(k_map) -> map;
+type(k_map_pair) -> map_pair.
%% variable(Klit) -> Lit.
%% var_list([Klit]) -> [Lit].
@@ -365,6 +367,12 @@ literal(#k_bin_end{}, Ctxt) ->
{bin_end,Ctxt};
literal(#k_tuple{es=Es}, Ctxt) ->
{tuple,literal_list(Es, Ctxt)};
+literal(#k_map{var=Var,es=Es}, Ctxt) ->
+ {map,literal(Var, Ctxt),literal_list(Es, Ctxt)};
+literal(#k_map_pair{op=assoc,key=K,val=V}, Ctxt) ->
+ {map_pair_assoc,literal(K, Ctxt),literal(V, Ctxt)};
+literal(#k_map_pair{op=exact,key=K,val=V}, Ctxt) ->
+ {map_pair_exact,literal(K, Ctxt),literal(V, Ctxt)};
literal(#k_literal{val=V}, _Ctxt) ->
{literal,V}.
@@ -393,7 +401,11 @@ literal2(#k_bin_int{size=S,unit=U,flags=Fs,val=Int,next=N}, Ctxt) ->
literal2(#k_bin_end{}, Ctxt) ->
{bin_end,Ctxt};
literal2(#k_tuple{es=Es}, Ctxt) ->
- {tuple,literal_list2(Es, Ctxt)}.
+ {tuple,literal_list2(Es, Ctxt)};
+literal2(#k_map{es=Es}, Ctxt) ->
+ {map,literal_list2(Es, Ctxt)};
+literal2(#k_map_pair{key=K,val=V}, Ctxt) ->
+ {map_pair,literal2(K, Ctxt),literal2(V, Ctxt)}.
literal_list2(Ks, Ctxt) ->
[literal2(K, Ctxt) || K <- Ks].
diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl
index 4ec75d015e..de35ebc7bd 100644
--- a/lib/compiler/test/compile_SUITE.erl
+++ b/lib/compiler/test/compile_SUITE.erl
@@ -415,11 +415,11 @@ encrypted_abstr(Config) when is_list(Config) ->
?line {Simple,Target} = files(Config, "encrypted_abstr"),
Res = case has_crypto() of
- no ->
+ false ->
%% No crypto.
?line encrypted_abstr_no_crypto(Simple, Target),
{comment,"The crypto application is missing or broken"};
- yes ->
+ true ->
%% Simulate not having crypto by removing
%% the crypto application from the path.
?line OldPath = code:get_path(),
@@ -511,6 +511,7 @@ write_crypt_file(Contents0) ->
ok = file:write_file(".erlang.crypt", Contents).
encrypted_abstr_no_crypto(Simple, Target) ->
+ io:format("simpe: ~p~n", [Simple]),
?line TargetDir = filename:dirname(Target),
?line Key = "ablurf123BX#$;3",
?line error = compile:file(Simple,
@@ -525,11 +526,11 @@ verify_abstract(Target) ->
has_crypto() ->
try
crypto:start(),
- crypto:info(),
+ <<_,_,_,_,_>> = crypto:rand_bytes(5),
crypto:stop(),
- yes
+ true
catch
- error:_ -> no
+ error:_ -> false
end.
install_crypto_key(Key) ->
diff --git a/lib/compiler/test/core_SUITE.erl b/lib/compiler/test/core_SUITE.erl
index a40dc32d59..1a521c3591 100644
--- a/lib/compiler/test/core_SUITE.erl
+++ b/lib/compiler/test/core_SUITE.erl
@@ -23,7 +23,8 @@
init_per_testcase/2,end_per_testcase/2,
dehydrated_itracer/1,nested_tries/1,
seq_in_guard/1,make_effect_seq/1,eval_is_boolean/1,
- unsafe_case/1,nomatch_shadow/1,reversed_annos/1]).
+ unsafe_case/1,nomatch_shadow/1,reversed_annos/1,
+ map_core_test/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -48,7 +49,9 @@ all() ->
groups() ->
[{p,test_lib:parallel(),
[dehydrated_itracer,nested_tries,seq_in_guard,make_effect_seq,
- eval_is_boolean,unsafe_case,nomatch_shadow,reversed_annos]}].
+ eval_is_boolean,unsafe_case,nomatch_shadow,reversed_annos,
+ map_core_test
+ ]}].
init_per_suite(Config) ->
@@ -72,6 +75,7 @@ end_per_group(_GroupName, Config) ->
?comp(unsafe_case).
?comp(nomatch_shadow).
?comp(reversed_annos).
+?comp(map_core_test).
try_it(Mod, Conf) ->
Src = filename:join(?config(data_dir, Conf), atom_to_list(Mod)),
diff --git a/lib/compiler/test/core_SUITE_data/map_core_test.core b/lib/compiler/test/core_SUITE_data/map_core_test.core
new file mode 100644
index 0000000000..7ece8a8bbd
--- /dev/null
+++ b/lib/compiler/test/core_SUITE_data/map_core_test.core
@@ -0,0 +1,95 @@
+module 'map_core_test' ['map_core_test'/0,
+ 'module_info'/0,
+ 'module_info'/1]
+ attributes []
+'map_core_test'/0 =
+ %% Line 14
+ fun () ->
+ let <_cor0> =
+ %% Line 15
+ ~{::<'check','ok'>,::<1337,#{#<104>(8,1,'integer',['unsigned'|['big']]),
+ #<101>(8,1,'integer',['unsigned'|['big']]),
+ #<108>(8,1,'integer',['unsigned'|['big']]),
+ #<108>(8,1,'integer',['unsigned'|['big']]),
+ #<111>(8,1,'integer',['unsigned'|['big']])}#>,::<'val',0>}~
+ in let <M> =
+ %% Line 15
+ apply 'id'/1
+ (_cor0)
+ in let <_cor2> =
+ %% Line 16
+ apply 'id'/1
+ ([1|[2|[3|[4|[5|[6]]]]]])
+ in %% Line 16
+ case apply 'call'/2
+ (M, _cor2) of
+ <~{~<1337,#{#<104>(8,1,'integer',['unsigned'|['big']]),
+ #<101>(8,1,'integer',['unsigned'|['big']]),
+ #<108>(8,1,'integer',['unsigned'|['big']]),
+ #<108>(8,1,'integer',['unsigned'|['big']]),
+ #<111>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<49>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<50>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<51>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<52>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<53>(8,1,'integer',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<54>(8,1,'integer',['unsigned'|['big']])}#>,~<'check','ok'>,~<'val',21>}~> when 'true' ->
+ %% Line 17
+ 'ok'
+ ( <_cor3> when 'true' ->
+ primop 'match_fail'
+ ({'badmatch',_cor3})
+ -| ['compiler_generated'] )
+ end
+'call'/2 =
+ %% Line 20
+ fun (_cor1,_cor0) ->
+ case <_cor1,_cor0> of
+ <M = ~{~<1337,Bin>,~<'check',_cor8>,~<'val',Val>}~,[V|Vs]> when 'true' ->
+ let <_cor3> =
+ %% Line 21
+ call 'erlang':'+'
+ (V, 48)
+ in let <_cor4> =
+ %% Line 21
+ #{#<Bin>('all',8,'binary',['unsigned'|['big']]),
+ #<32>(8,1,'integer',['unsigned'|['big']]),
+ #<_cor3>(8,1,'integer',['unsigned'|['big']])}#
+ in let <_cor2> =
+ %% Line 21
+ call 'erlang':'+'
+ (Val, V)
+ in let <_cor5> =
+ %% Line 21
+ M~{~<1337,_cor4>,~<'val',_cor2>}~
+ in %% Line 21
+ apply 'call'/2
+ (_cor5, Vs)
+ %% Line 22
+ <M,[]> when 'true' ->
+ M
+ ( <_cor7,_cor6> when 'true' ->
+ ( primop 'match_fail'
+ ({'function_clause',_cor7,_cor6})
+ -| [{'function_name',{'call',2}}] )
+ -| ['compiler_generated'] )
+ end
+'id'/1 =
+ %% Line 24
+ fun (_cor0) ->
+ _cor0
+'module_info'/0 =
+ fun () ->
+ call 'erlang':'get_module_info'
+ ('map_core_test')
+'module_info'/1 =
+ fun (_cor0) ->
+ call 'erlang':'get_module_info'
+ ('map_core_test', _cor0)
+end \ No newline at end of file
diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl
index e5c2d4f73a..47851e680b 100644
--- a/lib/compiler/test/inline_SUITE.erl
+++ b/lib/compiler/test/inline_SUITE.erl
@@ -37,7 +37,7 @@ all() ->
groups() ->
[{p,test_lib:parallel(),
[attribute,bsdecode,bsdes,barnes2,decode1,smith,fname,
- itracer,pseudoknot,comma_splitter,lists,really_inlined,otp_7223,
+ itracer,pseudoknot,maps_inline_test,comma_splitter,lists,really_inlined,otp_7223,
coverage]}].
init_per_suite(Config) ->
@@ -85,6 +85,7 @@ attribute(Config) when is_list(Config) ->
?comp(pseudoknot).
?comp(comma_splitter).
?comp(fname).
+?comp(maps_inline_test).
try_inline(Mod, Config) ->
Node = ?config(testing_node, Config),
diff --git a/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl b/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl
new file mode 100644
index 0000000000..d9762e2647
--- /dev/null
+++ b/lib/compiler/test/inline_SUITE_data/maps_inline_test.erl
@@ -0,0 +1,70 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(maps_inline_test).
+
+-export([?MODULE/0]).
+
+?MODULE() ->
+ 21 = mval(#{val => 1}) +
+ mval(#{val => 2}) +
+ mval(#{val => 3}) +
+ mval(#{val => 4}) +
+ mval(#{val => 5}) +
+ mval(#{val => 6}),
+
+ 21 = gval(#{id => 1}) +
+ gval(#{id => 2}) +
+ gval(#{id => 3}) +
+ gval(#{id => 4}) +
+ gval(#{id => 5}) +
+ gval(#{id => 6}),
+
+ 21 = sval(#{id => 1}) +
+ sval(#{id => 2}) +
+ sval(#{id => 3}) +
+ sval(#{id => 4}) +
+ sval(#{id => 5}) +
+ sval(#{id => 6}),
+
+ M = #{v => 1, m => #{v => 21, m => #{v => 7, m => 13}}},
+
+ 42 = decompose(M).
+
+% switch key orders
+decompose(#{ m := M, v := V}) when is_map(M) ->
+ V + decompose(M);
+decompose(#{ v := V, m := M}) -> V + M.
+
+
+mval(#{val := V}) -> V.
+
+sval(#{id := 1}) -> 6;
+sval(#{id := 2}) -> 5;
+sval(#{id := 3}) -> 4;
+sval(#{id := 4}) -> 3;
+sval(#{id := 5}) -> 2;
+sval(#{id := 6}) -> 1.
+
+gval(M) when is_map(M) andalso M =:= #{ id => 1} -> 1;
+gval(M) when is_map(M) andalso M =:= #{ id => 2} -> 4;
+gval(M) when is_map(M) andalso M =:= #{ id => 3} -> 2;
+gval(M) when is_map(M) andalso M =:= #{ id => 4} -> 5;
+gval(M) when is_map(M) andalso M =:= #{ id => 5} -> 3;
+gval(M) when is_map(M) andalso M =:= #{ id => 6} -> 6.
diff --git a/lib/crypto/src/Makefile b/lib/crypto/src/Makefile
index eabfd676c5..c185c159e5 100644
--- a/lib/crypto/src/Makefile
+++ b/lib/crypto/src/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1999-2013. All Rights Reserved.
+# Copyright Ericsson AB 1999-2014. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -35,11 +35,8 @@ RELSYSDIR = $(RELEASE_PATH)/lib/crypto-$(VSN)
# ----------------------------------------------------
MODULES= \
- crypto_app \
crypto \
- crypto_ec_curves \
- crypto_server \
- crypto_sup
+ crypto_ec_curves
HRL_FILES=
diff --git a/lib/crypto/src/crypto.app.src b/lib/crypto/src/crypto.app.src
index 161ea7c9fe..d3084ff336 100644
--- a/lib/crypto/src/crypto.app.src
+++ b/lib/crypto/src/crypto.app.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -17,16 +17,12 @@
%% %CopyrightEnd%
%%
{application, crypto,
- [{description, "CRYPTO version 2"},
+ [{description, "CRYPTO"},
{vsn, "%VSN%"},
{modules, [crypto,
- crypto_ec_curves,
- crypto_app,
- crypto_sup,
- crypto_server]},
- {registered, [crypto_sup, crypto_server]},
+ crypto_ec_curves]},
+ {registered, []},
{applications, [kernel, stdlib]},
- {env, []},
- {mod, {crypto_app, []}}]}.
+ {env, []}]}.
diff --git a/lib/crypto/src/crypto_app.erl b/lib/crypto/src/crypto_app.erl
deleted file mode 100644
index f1ea1406e4..0000000000
--- a/lib/crypto/src/crypto_app.erl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%% Purpose : Application master for CRYPTO.
-
--module(crypto_app).
-
--behaviour(application).
-
--export([start/2, stop/1]).
-
-%% start/2(Type, StartArgs) -> {ok, Pid} | {ok, Pid, State} |
-%% {error, Reason}
-%%
-start(_Type, _StartArgs) ->
- crypto_sup:start_link().
-
-%% stop(State) -> void()
-%%
-stop(_State) ->
- ok.
-
-
diff --git a/lib/crypto/src/crypto_server.erl b/lib/crypto/src/crypto_server.erl
deleted file mode 100644
index 89650a9f06..0000000000
--- a/lib/crypto/src/crypto_server.erl
+++ /dev/null
@@ -1,68 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2010. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%% Purpose: Provide cryptographic algorithms.
-
--module(crypto_server).
-
--behaviour(gen_server).
-
--export([start_link/0]).
-
-%% Internal exports, call-back functions.
--export([init/1,handle_call/3,handle_cast/2,handle_info/2,code_change/3,
- terminate/2]).
-
-
-%%% --------------------------------------------------------
-%%% Interface Functions.
-%%% --------------------------------------------------------
-
-start_link() ->
- gen_server:start_link({local, crypto_server}, crypto_server, [], []).
-
-init([]) ->
- {ok,[]}.
-
-
-
-%%% --------------------------------------------------------
-%%% The call-back functions.
-%%% --------------------------------------------------------
-
-handle_call(_, _, State) ->
- {noreply, State}.
-
-handle_cast(_, State) ->
- {noreply, State}.
-
-handle_info(_, State) ->
- {noreply, State}.
-
-code_change(_OldVsn, State, _Extra) ->
- {ok, State}.
-
-terminate(_Reason, _State) ->
- [].
-
-
-
-
-
-
diff --git a/lib/crypto/src/crypto_sup.erl b/lib/crypto/src/crypto_sup.erl
deleted file mode 100644
index 8ef58777ab..0000000000
--- a/lib/crypto/src/crypto_sup.erl
+++ /dev/null
@@ -1,39 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 1999-2009. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
-
-%% Purpose: Main supervisor in CRYPTO application.
-
--module(crypto_sup).
-
--behaviour(supervisor).
-
--export([start_link/0, init/1]).
-
-start_link() ->
- supervisor:start_link({local, crypto_sup}, crypto_sup, []).
-
-
-%% init([])
-%% Returns: {ok, {SupFlags, [ChildSpec]}}
-%%
-init([]) ->
- Child = {crypto_server, {crypto_server, start_link, []},
- permanent, 2000, worker, [crypto_server]},
- {ok, {{one_for_all, 10, 3600}, [Child]}}.
-
diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl
index 35156afff2..bb7e39dfda 100644
--- a/lib/dialyzer/src/dialyzer.erl
+++ b/lib/dialyzer/src/dialyzer.erl
@@ -423,6 +423,9 @@ message_to_string({call_without_opaque, [M, F, Args, ExpectedTriples]}) ->
message_to_string({opaque_eq, [Type, _Op, OpaqueType]}) ->
io_lib:format("Attempt to test for equality between a term of type ~s"
" and a term of opaque type ~s\n", [Type, OpaqueType]);
+message_to_string({opaque_guard, [Arg1, Infix, Arg2, ArgNs]}) ->
+ io_lib:format("Guard test ~s ~s ~s contains ~s\n",
+ [Arg1, Infix, Arg2, form_positions(ArgNs)]);
message_to_string({opaque_guard, [Guard, Args]}) ->
io_lib:format("Guard test ~w~s breaks the opaqueness of its argument\n",
[Guard, Args]);
@@ -435,8 +438,16 @@ message_to_string({opaque_match, [Pat, OpaqueType, OpaqueTerm]}) ->
message_to_string({opaque_neq, [Type, _Op, OpaqueType]}) ->
io_lib:format("Attempt to test for inequality between a term of type ~s"
" and a term of opaque type ~s\n", [Type, OpaqueType]);
-message_to_string({opaque_type_test, [Fun, Opaque]}) ->
- io_lib:format("The type test ~s(~s) breaks the opaqueness of the term ~s\n", [Fun, Opaque, Opaque]);
+message_to_string({opaque_type_test, [Fun, Args, Arg, ArgType]}) ->
+ io_lib:format("The type test ~s~s breaks the opaqueness of the term ~s~s\n",
+ [Fun, Args, Arg, ArgType]);
+message_to_string({opaque_size, [SizeType, Size]}) ->
+ io_lib:format("The size ~s breaks the opaqueness of ~s\n",
+ [SizeType, Size]);
+message_to_string({opaque_call, [M, F, Args, Culprit, OpaqueType]}) ->
+ io_lib:format("The call ~s:~s~s breaks the opaqueness of the term ~s :: ~s\n",
+ [M, F, Args, Culprit, OpaqueType]);
+
%%----- Warnings for concurrency errors --------------------
message_to_string({race_condition, [M, F, Args, Reason]}) ->
io_lib:format("The call ~w:~w~s ~s\n", [M, F, Args, Reason]);
diff --git a/lib/dialyzer/src/dialyzer_cl.erl b/lib/dialyzer/src/dialyzer_cl.erl
index 365c0b36d4..cda801bf6c 100644
--- a/lib/dialyzer/src/dialyzer_cl.erl
+++ b/lib/dialyzer/src/dialyzer_cl.erl
@@ -2,7 +2,7 @@
%%-------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -603,7 +603,7 @@ cl_loop(State, LogCache) ->
Msg = failed_anal_msg(Reason, LogCache),
cl_error(State, Msg);
{'EXIT', BackendPid, Reason} when Reason =/= 'normal' ->
- Msg = failed_anal_msg(io_lib:format("~P", [Reason, 12]), LogCache),
+ Msg = failed_anal_msg(io_lib:format("~p", [Reason]), LogCache),
cl_error(State, Msg);
_Other ->
%% io:format("Received ~p\n", [_Other]),
@@ -613,7 +613,7 @@ cl_loop(State, LogCache) ->
-spec failed_anal_msg(string(), [_]) -> nonempty_string().
failed_anal_msg(Reason, LogCache) ->
- Msg = "Analysis failed with error:\n" ++ Reason ++ "\n",
+ Msg = "Analysis failed with error:\n" ++ lists:flatten(Reason) ++ "\n",
case LogCache =:= [] of
true -> Msg;
false ->
@@ -640,7 +640,7 @@ store_unknown_behaviours(#cl_state{unknown_behaviours = Behs} = St, Beh) ->
-spec cl_error(string()) -> no_return().
cl_error(Msg) ->
- throw({dialyzer_error, Msg}).
+ throw({dialyzer_error, lists:flatten(Msg)}).
-spec cl_error(#cl_state{}, string()) -> no_return().
@@ -650,7 +650,7 @@ cl_error(State, Msg) ->
Outfile -> io:format(Outfile, "\n~s\n", [Msg])
end,
maybe_close_output_file(State),
- throw({dialyzer_error, Msg}).
+ throw({dialyzer_error, lists:flatten(Msg)}).
return_value(State = #cl_state{erlang_mode = ErlangMode,
mod_deps = ModDeps,
diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl
index 332a326b0d..3467ab4e65 100644
--- a/lib/dialyzer/src/dialyzer_contracts.erl
+++ b/lib/dialyzer/src/dialyzer_contracts.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -21,10 +21,10 @@
-module(dialyzer_contracts).
-export([check_contract/2,
- check_contracts/3,
+ check_contracts/4,
contracts_without_fun/3,
contract_to_string/1,
- get_invalid_contract_warnings/3,
+ get_invalid_contract_warnings/4,
get_contract_args/1,
get_contract_return/1,
get_contract_return/2,
@@ -160,17 +160,22 @@ process_contract_remote_types(CodeServer) ->
dialyzer_codeserver:finalize_contracts(NewContractDict, NewCallbackDict,
CodeServer).
+-type opaques() :: [erl_types:erl_type()] | 'universe'.
+-type opaques_fun() :: fun((module()) -> opaques()).
+
-spec check_contracts([{mfa(), file_contract()}],
- dialyzer_callgraph:callgraph(), dict()) -> plt_contracts().
+ dialyzer_callgraph:callgraph(), dict(),
+ opaques_fun()) -> plt_contracts().
-check_contracts(Contracts, Callgraph, FunTypes) ->
+check_contracts(Contracts, Callgraph, FunTypes, FindOpaques) ->
FoldFun =
fun(Label, Type, NewContracts) ->
case dialyzer_callgraph:lookup_name(Label, Callgraph) of
{ok, {M,F,A} = MFA} ->
case orddict:find(MFA, Contracts) of
{ok, {_FileLine, Contract}} ->
- case check_contract(Contract, Type) of
+ Opaques = FindOpaques(M),
+ case check_contract(Contract, Type, Opaques) of
ok ->
case erl_bif_types:is_known(M, F, A) of
true ->
@@ -192,7 +197,10 @@ check_contracts(Contracts, Callgraph, FunTypes) ->
%% Checks all components of a contract
-spec check_contract(#contract{}, erl_types:erl_type()) -> 'ok' | {'error', term()}.
-check_contract(#contract{contracts = Contracts}, SuccType) ->
+check_contract(Contract, SuccType) ->
+ check_contract(Contract, SuccType, 'universe').
+
+check_contract(#contract{contracts = Contracts}, SuccType, Opaques) ->
try
Contracts1 = [{Contract, insert_constraints(Constraints, dict:new())}
|| {Contract, Constraints} <- Contracts],
@@ -203,9 +211,9 @@ check_contract(#contract{contracts = Contracts}, SuccType) ->
error ->
{error, {overlapping_contract, []}};
ok ->
- InfList = [erl_types:t_inf(Contract, SuccType, opaque)
+ InfList = [erl_types:t_inf(Contract, SuccType, Opaques)
|| Contract <- Contracts2],
- case check_contract_inf_list(InfList, SuccType) of
+ case check_contract_inf_list(InfList, SuccType, Opaques) of
{error, _} = Invalid -> Invalid;
ok -> check_extraneous(Contracts2, SuccType)
end
@@ -217,7 +225,7 @@ check_contract(#contract{contracts = Contracts}, SuccType) ->
check_domains([_]) -> ok;
check_domains([Dom|Doms]) ->
Fun = fun(D) ->
- erl_types:any_none_or_unit(erl_types:t_inf_lists(Dom, D, opaque))
+ erl_types:any_none_or_unit(erl_types:t_inf_lists(Dom, D))
end,
case lists:all(Fun, Doms) of
true -> check_domains(Doms);
@@ -227,23 +235,23 @@ check_domains([Dom|Doms]) ->
%% Allow a contract if one of the overloaded contracts is possible.
%% We used to be more strict, e.g., all overloaded contracts had to be
%% possible.
-check_contract_inf_list([FunType|Left], SuccType) ->
+check_contract_inf_list([FunType|Left], SuccType, Opaques) ->
FunArgs = erl_types:t_fun_args(FunType),
case lists:any(fun erl_types:t_is_none_or_unit/1, FunArgs) of
- true -> check_contract_inf_list(Left, SuccType);
+ true -> check_contract_inf_list(Left, SuccType, Opaques);
false ->
STRange = erl_types:t_fun_range(SuccType),
case erl_types:t_is_none_or_unit(STRange) of
true -> ok;
false ->
Range = erl_types:t_fun_range(FunType),
- case erl_types:t_is_none(erl_types:t_inf(STRange, Range, opaque)) of
- true -> check_contract_inf_list(Left, SuccType);
+ case erl_types:t_is_none(erl_types:t_inf(STRange, Range)) of
+ true -> check_contract_inf_list(Left, SuccType, Opaques);
false -> ok
end
end
end;
-check_contract_inf_list([], _SuccType) ->
+check_contract_inf_list([], _SuccType, _Opaques) ->
{error, invalid_contract}.
check_extraneous([], _SuccType) -> ok;
@@ -259,7 +267,7 @@ check_extraneous_1(Contract, SuccType) ->
STRng = erl_types:t_fun_range(SuccType),
?debug("CR = ~p\nSR = ~p\n", [CRngs, STRng]),
case [CR || CR <- CRngs,
- erl_types:t_is_none(erl_types:t_inf(CR, STRng, opaque))] of
+ erl_types:t_is_none(erl_types:t_inf(CR, STRng))] of
[] ->
CRngList = list_part(CRng),
STRngList = list_part(STRng),
@@ -268,7 +276,7 @@ check_extraneous_1(Contract, SuccType) ->
true ->
CRngElements = erl_types:t_list_elements(CRngList),
STRngElements = erl_types:t_list_elements(STRngList),
- Inf = erl_types:t_inf(CRngElements, STRngElements, opaque),
+ Inf = erl_types:t_inf(CRngElements, STRngElements),
case erl_types:t_is_none(Inf) of
true -> {error, invalid_contract};
false -> ok
@@ -278,7 +286,7 @@ check_extraneous_1(Contract, SuccType) ->
end.
list_part(Type) ->
- erl_types:t_inf(erl_types:t_list(), Type, opaque).
+ erl_types:t_inf(erl_types:t_list(), Type).
is_not_nil_list(Type) ->
erl_types:t_is_list(Type) andalso not erl_types:t_is_nil(Type).
@@ -374,7 +382,7 @@ insert_constraints([], Dict) -> Dict.
store_tmp_contract(MFA, FileLine, TypeSpec, SpecDict, RecordsDict) ->
%% io:format("contract from form: ~p\n", [TypeSpec]),
TmpContract = contract_from_form(TypeSpec, RecordsDict, FileLine),
- %% io:format("contract: ~p\n", [Contract]),
+ %% io:format("contract: ~p\n", [TmpContract]),
dict:store(MFA, {FileLine, TmpContract}, SpecDict).
contract_from_form(Forms, RecDict, FileLine) ->
@@ -494,30 +502,35 @@ general_domain([], AccSig) ->
AccSig1 = erl_types:subst_all_vars_to_any(AccSig),
erl_types:t_fun_args(AccSig1).
--spec get_invalid_contract_warnings([module()], dialyzer_codeserver:codeserver(), dialyzer_plt:plt()) -> [dial_warning()].
+-spec get_invalid_contract_warnings([module()],
+ dialyzer_codeserver:codeserver(),
+ dialyzer_plt:plt(),
+ opaques_fun()) -> [dial_warning()].
-get_invalid_contract_warnings(Modules, CodeServer, Plt) ->
- get_invalid_contract_warnings_modules(Modules, CodeServer, Plt, []).
+get_invalid_contract_warnings(Modules, CodeServer, Plt, FindOpaques) ->
+ get_invalid_contract_warnings_modules(Modules, CodeServer, Plt, FindOpaques, []).
-get_invalid_contract_warnings_modules([Mod|Mods], CodeServer, Plt, Acc) ->
+get_invalid_contract_warnings_modules([Mod|Mods], CodeServer, Plt, FindOpaques, Acc) ->
Contracts1 = dialyzer_codeserver:lookup_mod_contracts(Mod, CodeServer),
Contracts2 = dict:to_list(Contracts1),
Records = dialyzer_codeserver:lookup_mod_records(Mod, CodeServer),
- NewAcc = get_invalid_contract_warnings_funs(Contracts2, Plt, Records, Acc),
- get_invalid_contract_warnings_modules(Mods, CodeServer, Plt, NewAcc);
-get_invalid_contract_warnings_modules([], _CodeServer, _Plt, Acc) ->
+ NewAcc = get_invalid_contract_warnings_funs(Contracts2, Plt, Records, FindOpaques, Acc),
+ get_invalid_contract_warnings_modules(Mods, CodeServer, Plt, FindOpaques, NewAcc);
+get_invalid_contract_warnings_modules([], _CodeServer, _Plt, _FindOpaques, Acc) ->
Acc.
get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
- Plt, RecDict, Acc) ->
+ Plt, RecDict, FindOpaques, Acc) ->
case dialyzer_plt:lookup(Plt, MFA) of
none ->
%% This must be a contract for a non-available function. Just accept it.
- get_invalid_contract_warnings_funs(Left, Plt, RecDict, Acc);
+ get_invalid_contract_warnings_funs(Left, Plt, RecDict, FindOpaques, Acc);
{value, {Ret, Args}} ->
Sig = erl_types:t_fun(Args, Ret),
+ {M, _F, _A} = MFA,
+ Opaques = FindOpaques(M),
NewAcc =
- case check_contract(Contract, Sig) of
+ case check_contract(Contract, Sig, Opaques) of
{error, invalid_contract} ->
[invalid_contract_warning(MFA, FileLine, Sig, RecDict)|Acc];
{error, {overlapping_contract, []}} ->
@@ -551,7 +564,7 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
BifArgs = erl_bif_types:arg_types(M, F, A),
BifRet = erl_bif_types:type(M, F, A),
BifSig = erl_types:t_fun(BifArgs, BifRet),
- case check_contract(Contract, BifSig) of
+ case check_contract(Contract, BifSig, Opaques) of
{error, _} ->
[invalid_contract_warning(MFA, FileLine, BifSig, RecDict)
|Acc];
@@ -564,9 +577,9 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract}}|Left],
RecDict, Acc)
end
end,
- get_invalid_contract_warnings_funs(Left, Plt, RecDict, NewAcc)
+ get_invalid_contract_warnings_funs(Left, Plt, RecDict, FindOpaques, NewAcc)
end;
-get_invalid_contract_warnings_funs([], _Plt, _RecDict, Acc) ->
+get_invalid_contract_warnings_funs([], _Plt, _RecDict, _FindOpaques, Acc) ->
Acc.
invalid_contract_warning({M, F, A}, FileLine, SuccType, RecDict) ->
@@ -601,16 +614,23 @@ picky_contract_check(CSig0, Sig0, MFA, FileLine, Contract, RecDict, Acc) ->
end.
extra_contract_warning({M, F, A}, FileLine, Contract, CSig, Sig, RecDict) ->
- SigString = lists:flatten(dialyzer_utils:format_sig(Sig, RecDict)),
- ContractString0 = lists:flatten(dialyzer_utils:format_sig(CSig, RecDict)),
+ %% We do not want to depend upon erl_types:t_to_string() possibly
+ %% hiding the contents of opaque types.
+ SigUnopaque = erl_types:t_unopaque(Sig),
+ CSigUnopaque = erl_types:t_unopaque(CSig),
+ SigString0 =
+ lists:flatten(dialyzer_utils:format_sig(SigUnopaque, RecDict)),
+ ContractString0 =
+ lists:flatten(dialyzer_utils:format_sig(CSigUnopaque, RecDict)),
%% The only difference is in record fields containing 'undefined' or not.
- IsUndefRecordFieldsRelated = SigString =:= ContractString0,
+ IsUndefRecordFieldsRelated = SigString0 =:= ContractString0,
{IsRemoteTypesRelated, SubtypeRelation} =
is_remote_types_related(Contract, CSig, Sig, RecDict),
case IsUndefRecordFieldsRelated orelse IsRemoteTypesRelated of
true ->
no_warning;
false ->
+ SigString = lists:flatten(dialyzer_utils:format_sig(Sig, RecDict)),
ContractString = contract_to_string(Contract),
{Tag, Msg} =
case SubtypeRelation of
diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl
index 922ccad599..33fa107019 100644
--- a/lib/dialyzer/src/dialyzer_dataflow.erl
+++ b/lib/dialyzer/src/dialyzer_dataflow.erl
@@ -2,7 +2,7 @@
%%--------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -41,27 +41,35 @@
-include("dialyzer.hrl").
+%%-import(helper, %% 'helper' could be any module doing sanity checks...
-import(erl_types,
- [any_none/1, t_any/0, t_atom/0, t_atom/1, t_atom_vals/1,
+ [t_inf/2, t_inf/3, t_inf_lists/2, t_inf_lists/3,
+ t_inf_lists/3, t_is_equal/2, t_is_subtype/2, t_subtract/2,
+ t_sup/1, t_sup/2]).
+
+-import(erl_types,
+ [any_none/1, t_any/0, t_atom/0, t_atom/1, t_atom_vals/1, t_atom_vals/2,
t_binary/0, t_boolean/0,
t_bitstr/0, t_bitstr/2, t_bitstr_concat/1, t_bitstr_match/2,
- t_cons/0, t_cons/2, t_cons_hd/1, t_cons_tl/1, t_contains_opaque/1,
+ t_cons/0, t_cons/2, t_cons_hd/2, t_cons_tl/2,
+ t_contains_opaque/2,
t_find_opaque_mismatch/2, t_float/0, t_from_range/2, t_from_term/1,
- t_fun/0, t_fun/2, t_fun_args/1, t_fun_range/1,
- t_inf/2, t_inf/3, t_inf_lists/2, t_inf_lists/3, t_inf_lists_masked/3,
- t_integer/0, t_integers/1,
- t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_boolean/1, t_is_equal/2,
- t_is_integer/1, t_is_nil/1, t_is_none/1, t_is_none_or_unit/1,
- t_is_number/1, t_is_reference/1, t_is_pid/1, t_is_port/1,
- t_is_subtype/2, t_is_unit/1,
+ t_fun/0, t_fun/2, t_fun_args/1, t_fun_args/2, t_fun_range/1,
+ t_fun_range/2, t_integer/0, t_integers/1,
+ t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_any_atom/3,
+ t_is_boolean/2,
+ t_is_integer/2, t_is_nil/2, t_is_none/1, t_is_none_or_unit/1,
+ t_is_number/2, t_is_reference/2, t_is_pid/2, t_is_port/2,
+ t_is_unit/1,
t_limit/2, t_list/0, t_maybe_improper_list/0, t_module/0,
- t_none/0, t_non_neg_integer/0, t_number/0, t_number_vals/1,
- t_opaque_match_atom/2, t_opaque_match_record/2,
- t_opaque_matching_structure/2,
+ t_none/0, t_non_neg_integer/0, t_number/0, t_number_vals/2,
t_pid/0, t_port/0, t_product/1, t_reference/0,
- t_sup/1, t_sup/2, t_subtract/2, t_to_string/2, t_to_tlist/1,
- t_tuple/0, t_tuple/1, t_tuple_args/1, t_tuple_subtypes/1,
- t_unit/0, t_unopaque/1]).
+ t_to_string/2, t_to_tlist/1,
+ t_tuple/0, t_tuple/1, t_tuple_args/1, t_tuple_args/2,
+ t_tuple_subtypes/2,
+ t_unit/0, t_unopaque/2,
+ t_map/1
+ ]).
%%-define(DEBUG, true).
%%-define(DEBUG_PP, true).
@@ -204,7 +212,7 @@ analyze_loop(State) ->
traverse(Tree, Map, State) ->
?debug("Handling ~p\n", [cerl:type(Tree)]),
- %%debug_pp_map(Map),
+ %% debug_pp_map(Map),
case cerl:type(Tree) of
alias ->
%% This only happens when checking for illegal record patterns
@@ -256,12 +264,7 @@ traverse(Tree, Map, State) ->
case cerl:unfold_literal(Tree) of
Tree ->
Type = literal_type(Tree),
- NewType =
- case erl_types:t_opaque_match_atom(Type, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end,
- {State, Map, NewType};
+ {State, Map, Type};
NewTree -> traverse(NewTree, Map, State)
end;
module ->
@@ -286,8 +289,11 @@ traverse(Tree, Map, State) ->
SMA;
false ->
State2 =
- case (t_is_any(ArgType) orelse t_is_simple(ArgType)
- orelse is_call_to_send(Arg)) of
+ case
+ t_is_any(ArgType)
+ orelse t_is_simple(ArgType, State)
+ orelse is_call_to_send(Arg)
+ of
true -> % do not warn in these cases
State1;
false ->
@@ -301,6 +307,10 @@ traverse(Tree, Map, State) ->
handle_try(Tree, Map, State);
tuple ->
handle_tuple(Tree, Map, State);
+ map ->
+ handle_map(Tree, Map, State);
+ map_pair ->
+ handle_map_pair(Tree, Map, State);
values ->
Elements = cerl:values_es(Tree),
{State1, Map1, EsType} = traverse_list(Elements, Map, State),
@@ -311,15 +321,7 @@ traverse(Tree, Map, State) ->
case state__lookup_type_for_letrec(Tree, State) of
error ->
LType = lookup_type(Tree, Map),
- Opaques = State#state.opaques,
- case t_opaque_match_record(LType, Opaques) of
- [Opaque] -> {State, Map, Opaque};
- _ ->
- case t_opaque_match_atom(LType, Opaques) of
- [Opaque] -> {State, Map, Opaque};
- _ -> {State, Map, LType}
- end
- end;
+ {State, Map, LType};
{ok, Type} -> {State, Map, Type}
end;
Other ->
@@ -367,7 +369,8 @@ handle_apply(Tree, Map, State) ->
Tree, Msg),
{State3, Map2, t_none()};
false ->
- NewArgs = t_inf_lists(ArgTypes, t_fun_args(OpType1)),
+ NewArgs = t_inf_lists(ArgTypes,
+ t_fun_args(OpType1, 'universe')),
case any_none(NewArgs) of
true ->
Msg = {fun_app_args,
@@ -378,7 +381,7 @@ handle_apply(Tree, Map, State) ->
{State3, enter_type(Op, OpType1, Map2), t_none()};
false ->
Map3 = enter_type_lists(Args, NewArgs, Map2),
- Range0 = t_fun_range(OpType1),
+ Range0 = t_fun_range(OpType1, 'universe'),
Range =
case t_is_unit(Range0) of
true -> t_none();
@@ -423,83 +426,55 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
{M, F, A} = Fun,
case erl_bif_types:is_known(M, F, A) of
true ->
- IsBIF = true,
BArgs = erl_bif_types:arg_types(M, F, A),
BRange =
fun(FunArgs) ->
- ArgPos = erl_bif_types:structure_inspecting_args(M, F, A),
- NewFunArgs =
- case ArgPos =:= [] of
- true -> FunArgs;
- false -> % some positions need to be un-opaqued
- N = length(FunArgs),
- PFs = lists:zip(lists:seq(1, N), FunArgs),
- [case ordsets:is_element(P, ArgPos) of
- true -> erl_types:t_unopaque(FArg, Opaques);
- false -> FArg
- end || {P, FArg} <- PFs]
- end,
- erl_bif_types:type(M, F, A, NewFunArgs)
+ erl_bif_types:type(M, F, A, FunArgs, Opaques)
end,
{BArgs, BRange};
- false -> IsBIF = false, GenSig
+ false ->
+ GenSig
end;
- local -> IsBIF = false, GenSig
+ local -> GenSig
end,
{SigArgs, SigRange} =
- %% if there is hard-coded or contract information with opaque types,
- %% the checking for possible type violations needs to take place w.r.t.
- %% this information and not w.r.t. the structure-based success typing.
- case prefer_opaque_types(CArgs, BifArgs) of
- true -> {AnyArgs, t_any()}; % effectively forgets the success typing
- false ->
- case Sig of
- {value, {SR, SA}} -> {SA, SR};
- none -> {AnyArgs, t_any()}
- end
- end,
- ArgModeMask = [case lists:member(Arg, Opaques) of
- true -> opaque;
- false -> structured
- end || Arg <- ArgTypes],
- NewArgsSig = t_inf_lists_masked(SigArgs, ArgTypes, ArgModeMask),
- NewArgsContract = t_inf_lists_masked(CArgs, ArgTypes, ArgModeMask),
- NewArgsBif = t_inf_lists_masked(BifArgs, ArgTypes, ArgModeMask),
- NewArgTypes0 = t_inf_lists_masked(NewArgsSig, NewArgsContract, ArgModeMask),
- NewArgTypes = t_inf_lists_masked(NewArgTypes0, NewArgsBif, ArgModeMask),
- BifRet = BifRange(NewArgTypes),
- {TmpArgTypes, TmpArgsContract} =
- case (TypeOfApply =:= remote) andalso (not IsBIF) of
- true ->
- List1 = lists:zip(CArgs, NewArgTypes),
- List2 = lists:zip(CArgs, NewArgsContract),
- {[erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List1],
- [erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List2]};
- false -> {NewArgTypes, NewArgsContract}
+ case Sig of
+ {value, {SR, SA}} -> {SA, SR};
+ none -> {AnyArgs, t_any()}
end,
- ContrRet = CRange(TmpArgTypes),
- RetMode =
- case t_contains_opaque(ContrRet) orelse t_contains_opaque(BifRet) of
- true -> opaque;
- false -> structured
- end,
- RetWithoutContr = t_inf(SigRange, BifRet, RetMode),
- RetWithoutLocal = t_inf(ContrRet, RetWithoutContr, RetMode),
+
?debug("--------------------------------------------------------\n", []),
- ?debug("Fun: ~p\n", [Fun]),
- ?debug("Args: ~s\n", [erl_types:t_to_string(t_product(ArgTypes))]),
+ ?debug("Fun: ~p\n", [state__lookup_name(Fun, State)]),
+ ?debug("Module ~p\n", [State#state.module]),
+ ?debug("CArgs ~s\n", [erl_types:t_to_string(t_product(CArgs))]),
+ ?debug("ArgTypes ~s\n", [erl_types:t_to_string(t_product(ArgTypes))]),
+ ?debug("BifArgs ~p\n", [erl_types:t_to_string(t_product(BifArgs))]),
+
+ NewArgsSig = t_inf_lists(SigArgs, ArgTypes, Opaques),
+ ?debug("SigArgs ~s\n", [erl_types:t_to_string(t_product(SigArgs))]),
?debug("NewArgsSig: ~s\n", [erl_types:t_to_string(t_product(NewArgsSig))]),
+ NewArgsContract = t_inf_lists(CArgs, ArgTypes, Opaques),
?debug("NewArgsContract: ~s\n",
[erl_types:t_to_string(t_product(NewArgsContract))]),
+ NewArgsBif = t_inf_lists(BifArgs, ArgTypes, Opaques),
?debug("NewArgsBif: ~s\n", [erl_types:t_to_string(t_product(NewArgsBif))]),
- ?debug("NewArgTypes: ~s\n", [erl_types:t_to_string(t_product(NewArgTypes))]),
+ NewArgTypes0 = t_inf_lists(NewArgsSig, NewArgsContract),
+ NewArgTypes = t_inf_lists(NewArgTypes0, NewArgsBif, Opaques),
+ ?debug("NewArgTypes ~s\n", [erl_types:t_to_string(t_product(NewArgTypes))]),
+ ?debug("\n", []),
+
+ BifRet = BifRange(NewArgTypes),
+ ContrRet = CRange(NewArgTypes),
+ RetWithoutContr = t_inf(SigRange, BifRet),
+ RetWithoutLocal = t_inf(ContrRet, RetWithoutContr),
+
?debug("RetWithoutContr: ~s\n",[erl_types:t_to_string(RetWithoutContr)]),
?debug("RetWithoutLocal: ~s\n", [erl_types:t_to_string(RetWithoutLocal)]),
?debug("BifRet: ~s\n", [erl_types:t_to_string(BifRange(NewArgTypes))]),
- ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(TmpArgTypes))]),
- ?debug("SigRet: ~s\n", [erl_types:t_to_string(SigRange)]),
+ ?debug("SigRange: ~s\n", [erl_types:t_to_string(SigRange)]),
+ ?debug("ContrRet: ~s\n", [erl_types:t_to_string(CRange(NewArgTypes))]),
+ ?debug("LocalRet: ~s\n", [erl_types:t_to_string(LocalRet)]),
+
State1 =
case is_race_analysis_enabled(State) of
true ->
@@ -513,6 +488,9 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
FailedConj = any_none([RetWithoutLocal|NewArgTypes]),
IsFailBif = t_is_none(BifRange(BifArgs)),
IsFailSig = t_is_none(SigRange),
+ ?debug("FailedConj: ~p~n", [FailedConj]),
+ ?debug("IsFailBif: ~p~n", [IsFailBif]),
+ ?debug("IsFailSig: ~p~n", [IsFailSig]),
State2 =
case FailedConj andalso not (IsFailBif orelse IsFailSig) of
true ->
@@ -532,14 +510,14 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
false ->
FailedSig = any_none(NewArgsSig),
FailedContract =
- any_none([CRange(TmpArgsContract)|NewArgsContract]),
+ any_none([CRange(NewArgsContract)|NewArgsContract]),
FailedBif = any_none([BifRange(NewArgsBif)|NewArgsBif]),
InfSig = t_inf(t_fun(SigArgs, SigRange),
- t_fun(BifArgs, BifRange(BifArgs))),
+ t_fun(BifArgs, BifRange(BifArgs))),
FailReason =
apply_fail_reason(FailedSig, FailedBif, FailedContract),
Msg = get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes, InfSig,
- Contr, CArgs, State1, FailReason),
+ Contr, CArgs, State1, FailReason, Opaques),
WarnType = case Msg of
{call, _} -> ?WARN_FAILING_CALL;
{apply, _} -> ?WARN_FAILING_CALL;
@@ -547,7 +525,8 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
{call_without_opaque, _} -> ?WARN_OPAQUE;
{opaque_type_test, _} -> ?WARN_OPAQUE
end,
- state__add_warning(State1, WarnType, Tree, Msg)
+ Frc = {erlang, is_record, 3} =:= state__lookup_name(Fun, State),
+ state__add_warning(State1, WarnType, Tree, Msg, Frc)
end;
false -> State1
end,
@@ -571,7 +550,7 @@ handle_apply_or_call([{TypeOfApply, {Fun, Sig, Contr, LocalRet}}|Left],
TotalRet =
case t_is_none(LocalRet) andalso t_is_unit(RetWithoutLocal) of
true -> RetWithoutLocal;
- false -> t_inf(RetWithoutLocal, LocalRet, opaque)
+ false -> t_inf(RetWithoutLocal, LocalRet)
end,
NewAccRet = t_sup(AccRet, TotalRet),
?debug("NewAccRet: ~s\n", [t_to_string(NewAccRet)]),
@@ -590,7 +569,7 @@ apply_fail_reason(FailedSig, FailedBif, FailedContract) ->
end.
get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
- Sig, Contract, ContrArgs, State, FailReason) ->
+ Sig, Contract, ContrArgs, State, FailReason, Opaques) ->
ArgStrings = format_args(Args, ArgTypes, State),
ContractInfo =
case Contract of
@@ -599,44 +578,52 @@ get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
dialyzer_contracts:contract_to_string(C)};
none -> {false, none}
end,
- EnumArgTypes =
- case NewArgTypes of
- [] -> [];
- _ -> lists:zip(lists:seq(1, length(NewArgTypes)), NewArgTypes)
- end,
+ EnumArgTypes = lists:zip(lists:seq(1, length(NewArgTypes)), NewArgTypes),
ArgNs = [Arg || {Arg, Type} <- EnumArgTypes, t_is_none(Type)],
case state__lookup_name(Fun, State) of
- {M, F, _A} ->
- case is_opaque_type_test_problem(Fun, NewArgTypes, State) of
- true ->
- [Opaque] = NewArgTypes,
- {opaque_type_test, [atom_to_list(F), erl_types:t_to_string(Opaque)]};
- false ->
+ {M, F, A} ->
+ case is_opaque_type_test_problem(Fun, Args, NewArgTypes, State) of
+ {yes, Arg, ArgType} ->
+ {opaque_type_test, [atom_to_list(F), ArgStrings,
+ format_arg(Arg), format_type(ArgType, State)]};
+ no ->
SigArgs = t_fun_args(Sig),
- case is_opaque_related_problem(ArgNs, ArgTypes) of
- true -> %% an opaque term is used where a structured term is expected
- ExpectedArgs =
- case FailReason of
- only_sig -> SigArgs;
- _ -> ContrArgs
- end,
- {call_with_opaque, [M, F, ArgStrings, ArgNs, ExpectedArgs]};
- false ->
- case is_opaque_related_problem(ArgNs, SigArgs) orelse
- is_opaque_related_problem(ArgNs, ContrArgs) of
- true -> %% a structured term is used where an opaque is expected
- ExpectedTriples =
- case FailReason of
- only_sig -> expected_arg_triples(ArgNs, SigArgs, State);
- _ -> expected_arg_triples(ArgNs, ContrArgs, State)
- end,
- {call_without_opaque, [M, F, ArgStrings, ExpectedTriples]};
- false -> %% there is a structured term clash in some argument
- {call, [M, F, ArgStrings,
- ArgNs, FailReason,
- format_sig_args(Sig, State),
- format_type(t_fun_range(Sig), State),
- ContractInfo]}
+ BadOpaque =
+ opaque_problems([SigArgs, ContrArgs], ArgTypes, Opaques, ArgNs),
+ %% In fact *both* 'call_with_opaque' and
+ %% 'call_without_opaque' are possible.
+ case lists:keyfind(decl, 1, BadOpaque) of
+ {decl, BadArgs} ->
+ %% a structured term is used where an opaque is expected
+ ExpectedTriples =
+ case FailReason of
+ only_sig -> expected_arg_triples(BadArgs, SigArgs, State);
+ _ -> expected_arg_triples(BadArgs, ContrArgs, State)
+ end,
+ {call_without_opaque, [M, F, ArgStrings, ExpectedTriples]};
+ false ->
+ case lists:keyfind(use, 1, BadOpaque) of
+ {use, BadArgs} ->
+ %% an opaque term is used where a structured term is expected
+ ExpectedArgs =
+ case FailReason of
+ only_sig -> SigArgs;
+ _ -> ContrArgs
+ end,
+ {call_with_opaque, [M, F, ArgStrings, BadArgs, ExpectedArgs]};
+ false ->
+ case
+ erl_bif_types:opaque_args(M, F, A, ArgTypes, Opaques)
+ of
+ [] -> %% there is a structured term clash in some argument
+ {call, [M, F, ArgStrings,
+ ArgNs, FailReason,
+ format_sig_args(Sig, State),
+ format_type(t_fun_range(Sig), State),
+ ContractInfo]};
+ Ns ->
+ {call_with_opaque, [M, F, ArgStrings, Ns, ContrArgs]}
+ end
end
end
end;
@@ -648,31 +635,48 @@ get_apply_fail_msg(Fun, Args, ArgTypes, NewArgTypes,
ContractInfo]}
end.
-%% returns 'true' if we are running with opaque on (not checked yet),
-%% and there is either a contract or hard-coded type information with
-%% opaque types
-%% TODO: check that we are running with opaque types
-%% TODO: check the return type also
-prefer_opaque_types(CArgs, BifArgs) ->
- t_contains_opaque(t_product(CArgs))
- orelse t_contains_opaque(t_product(BifArgs)).
-
-is_opaque_related_problem(ArgNs, ArgTypes) ->
- Fun = fun (N) -> erl_types:t_contains_opaque(lists:nth(N, ArgTypes)) end,
- ArgNs =/= [] andalso lists:all(Fun, ArgNs).
-
-is_opaque_type_test_problem(Fun, ArgTypes, State) ->
+%% -> [{ElementI, [ArgN]}] where [ArgN] is a non-empty list of
+%% arguments containing unknown opaque types and Element is 1 or 2.
+opaque_problems(ContractOrSigList, ArgTypes, Opaques, ArgNs) ->
+ ArgElementList = find_unknown(ContractOrSigList, ArgTypes, Opaques, ArgNs),
+ F = fun(1) -> decl; (2) -> use end,
+ [{F(ElementI), lists:usort([ArgN || {ArgN, EI} <- ArgElementList,
+ EI =:= ElementI])} ||
+ ElementI <- lists:usort([EI || {_, EI} <- ArgElementList])].
+
+%% -> [{ArgN, ElementI}] where ElementI = 1 means there is an unknown
+%% opaque type in argument ArgN of the the contract/signature,
+%% and ElementI = 2 means that there is an unknown opaque type in
+%% argument ArgN of the the (current) argument types.
+find_unknown(ContractOrSigList, ArgTypes, Opaques, NoneArgNs) ->
+ ArgNs = lists:seq(1, length(ArgTypes)),
+ [{ArgN, ElementI} ||
+ ContractOrSig <- ContractOrSigList,
+ {E1, E2, ArgN} <- lists:zip3(ContractOrSig, ArgTypes, ArgNs),
+ lists:member(ArgN, NoneArgNs),
+ ElementI <- erl_types:t_find_unknown_opaque(E1, E2, Opaques)].
+
+is_opaque_type_test_problem(Fun, Args, ArgTypes, State) ->
case Fun of
{erlang, FN, 1} when FN =:= is_atom; FN =:= is_boolean;
FN =:= is_binary; FN =:= is_bitstring;
FN =:= is_float; FN =:= is_function;
FN =:= is_integer; FN =:= is_list;
FN =:= is_number; FN =:= is_pid; FN =:= is_port;
- FN =:= is_reference; FN =:= is_tuple ->
- [Type] = ArgTypes,
- erl_types:t_is_opaque(Type) andalso
- not lists:member(Type, State#state.opaques);
- _ -> false
+ FN =:= is_reference; FN =:= is_tuple;
+ FN =:= is_map ->
+ type_test_opaque_arg(Args, ArgTypes, State#state.opaques);
+ {erlang, FN, 2} when FN =:= is_function ->
+ type_test_opaque_arg(Args, ArgTypes, State#state.opaques);
+ _ -> no
+ end.
+
+type_test_opaque_arg([], [], _Opaques) ->
+ no;
+type_test_opaque_arg([Arg|Args], [ArgType|ArgTypes], Opaques) ->
+ case erl_types:t_has_opaque_subtype(ArgType, Opaques) of
+ true -> {yes, Arg, ArgType};
+ false -> type_test_opaque_arg(Args, ArgTypes, Opaques)
end.
expected_arg_triples(ArgNs, ArgTypes, State) ->
@@ -683,47 +687,56 @@ expected_arg_triples(ArgNs, ArgTypes, State) ->
add_bif_warnings({erlang, Op, 2}, [T1, T2] = Ts, Tree, State)
when Op =:= '=:='; Op =:= '==' ->
- Type1 = erl_types:t_unopaque(T1, State#state.opaques),
- Type2 = erl_types:t_unopaque(T2, State#state.opaques),
- Inf = t_inf(T1, T2),
- Inf1 = t_inf(Type1, Type2),
- case t_is_none(Inf) andalso t_is_none(Inf1) andalso(not any_none(Ts))
- andalso (not is_int_float_eq_comp(T1, Op, T2)) of
+ Opaques = State#state.opaques,
+ Inf = t_inf(T1, T2, Opaques),
+ case
+ t_is_none(Inf) andalso (not any_none(Ts))
+ andalso (not is_int_float_eq_comp(T1, Op, T2, Opaques))
+ of
true ->
- Args = case erl_types:t_is_opaque(T1) of
- true -> [format_type(T2, State), Op, format_type(T1, State)];
- false -> [format_type(T1, State), Op, format_type(T2, State)]
- end,
- case any_opaque(Ts) of
- true ->
- state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_eq, Args});
- false ->
- state__add_warning(State, ?WARN_MATCHING, Tree, {exact_eq, Args})
+ %% Give priority to opaque warning (as usual).
+ case erl_types:t_find_unknown_opaque(T1, T2, Opaques) of
+ [] ->
+ Args = comp_format_args([], T1, Op, T2, State),
+ state__add_warning(State, ?WARN_MATCHING, Tree, {exact_eq, Args});
+ Ns ->
+ Args = comp_format_args(Ns, T1, Op, T2, State),
+ state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_eq, Args})
end;
false ->
State
end;
add_bif_warnings({erlang, Op, 2}, [T1, T2] = Ts, Tree, State)
when Op =:= '=/='; Op =:= '/=' ->
- Inf = t_inf(T1, T2),
- case t_is_none(Inf) andalso (not any_none(Ts))
- andalso (not is_int_float_eq_comp(T1, Op, T2)) andalso any_opaque(Ts) of
+ Opaques = State#state.opaques,
+ case
+ (not any_none(Ts))
+ andalso (not is_int_float_eq_comp(T1, Op, T2, Opaques))
+ of
true ->
- Args = case erl_types:t_is_opaque(T1) of
- true -> [format_type(T2, State), Op, format_type(T1, State)];
- false -> [format_type(T1, State), Op, format_type(T2, State)]
- end,
- state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_neq, Args});
+ case erl_types:t_find_unknown_opaque(T1, T2, Opaques) of
+ [] -> State;
+ Ns ->
+ Args = comp_format_args(Ns, T1, Op, T2, State),
+ state__add_warning(State, ?WARN_OPAQUE, Tree, {opaque_neq, Args})
+ end;
false ->
State
end;
add_bif_warnings(_, _, _, State) ->
State.
-is_int_float_eq_comp(T1, Op, T2) ->
+is_int_float_eq_comp(T1, Op, T2, Opaques) ->
(Op =:= '==' orelse Op =:= '/=') andalso
- ((erl_types:t_is_float(T1) andalso erl_types:t_is_integer(T2)) orelse
- (erl_types:t_is_integer(T1) andalso erl_types:t_is_float(T2))).
+ ((erl_types:t_is_float(T1, Opaques)
+ andalso t_is_integer(T2, Opaques)) orelse
+ (t_is_integer(T1, Opaques)
+ andalso erl_types:t_is_float(T2, Opaques))).
+
+comp_format_args([1|_], T1, Op, T2, State) ->
+ [format_type(T2, State), Op, format_type(T1, State)];
+comp_format_args(_, T1, Op, T2, State) ->
+ [format_type(T1, State), Op, format_type(T2, State)].
%%----------------------------------------
@@ -784,16 +797,27 @@ handle_bitstr(Tree, Map, State) ->
{State3, Map2, t_none()};
false ->
UnitVal = cerl:concrete(cerl:bitstr_unit(Tree)),
- Type =
- case t_number_vals(SizeType) of
- [OneSize] -> t_bitstr(0, OneSize * UnitVal);
- _ ->
- MinSize = erl_types:number_min(SizeType),
- t_bitstr(UnitVal, UnitVal * MinSize)
- end,
+ Opaques = State2#state.opaques,
+ NumberVals = t_number_vals(SizeType, Opaques),
+ {State3, Type} =
+ case t_contains_opaque(SizeType, Opaques) of
+ true ->
+ Msg = {opaque_size, [format_type(SizeType, State2),
+ format_cerl(Size)]},
+ {state__add_warning(State2, ?WARN_OPAQUE, Size, Msg),
+ t_none()};
+ false ->
+ case NumberVals of
+ [OneSize] -> {State2, t_bitstr(0, OneSize * UnitVal)};
+ unknown -> {State2, t_bitstr()};
+ _ ->
+ MinSize = erl_types:number_min(SizeType, Opaques),
+ {State2, t_bitstr(UnitVal, UnitVal * MinSize)}
+ end
+ end,
Map3 = enter_type_lists([Val, Size, Tree],
[ValType, SizeType, Type], Map2),
- {State2, Map3, Type}
+ {State3, Map3, Type}
end
end.
@@ -805,34 +829,47 @@ handle_call(Tree, Map, State) ->
Args = cerl:call_args(Tree),
MFAList = [M, F|Args],
{State1, Map1, [MType0, FType0|As]} = traverse_list(MFAList, Map, State),
- %% Module and function names should be treated as *structured terms*
- %% even if they happen to be identical to an atom (or tuple) which
- %% is also involved in the definition of an opaque data type.
- MType = t_inf(t_module(), t_unopaque(MType0)),
- FType = t_inf(t_atom(), t_unopaque(FType0)),
+ Opaques = State#state.opaques,
+ MType = t_inf(t_module(), MType0, Opaques),
+ FType = t_inf(t_atom(), FType0, Opaques),
Map2 = enter_type_lists([M, F], [MType, FType], Map1),
+ MOpaque = t_is_none(MType) andalso (not t_is_none(MType0)),
+ FOpaque = t_is_none(FType) andalso (not t_is_none(FType0)),
case any_none([MType, FType|As]) of
true ->
State2 =
- case t_is_none(MType) andalso (not t_is_none(MType0)) of
- true -> % This is a problem we just detected; not a known one
- MS = format_cerl(M),
- Msg = {app_call, [MS, format_cerl(F),
- format_args(Args, As, State1),
- MS, format_type(t_module(), State1),
- format_type(MType0, State1)]},
- state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
- false ->
- case t_is_none(FType) andalso (not t_is_none(FType0)) of
- true ->
- FS = format_cerl(F),
- Msg = {app_call, [format_cerl(M), FS,
- format_args(Args, As, State1),
- FS, format_type(t_atom(), State1),
- format_type(FType0, State1)]},
- state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
- false -> State1
- end
+ if
+ MOpaque -> % This is a problem we just detected; not a known one
+ MS = format_cerl(M),
+ case t_is_none(t_inf(t_module(), MType0)) of
+ true ->
+ Msg = {app_call, [MS, format_cerl(F),
+ format_args(Args, As, State1),
+ MS, format_type(t_module(), State1),
+ format_type(MType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
+ false ->
+ Msg = {opaque_call, [MS, format_cerl(F),
+ format_args(Args, As, State1),
+ MS, format_type(MType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg)
+ end;
+ FOpaque ->
+ FS = format_cerl(F),
+ case t_is_none(t_inf(t_atom(), FType0)) of
+ true ->
+ Msg = {app_call, [format_cerl(M), FS,
+ format_args(Args, As, State1),
+ FS, format_type(t_atom(), State1),
+ format_type(FType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg);
+ false ->
+ Msg = {opaque_call, [format_cerl(M), FS,
+ format_args(Args, As, State1),
+ FS, format_type(FType0, State1)]},
+ state__add_warning(State1, ?WARN_FAILING_CALL, Tree, Msg)
+ end;
+ true -> State1
end,
{State2, Map2, t_none()};
false ->
@@ -874,7 +911,7 @@ handle_case(Tree, Map, State) ->
handle_clauses(Clauses, Arg, ArgType, ArgType, State2,
[], Map2, [], []),
Map3 = join_maps_end(MapList, Map2),
- debug_pp_map(Map2),
+ debug_pp_map(Map3),
{State3, Map3, Type}
end.
@@ -886,7 +923,7 @@ handle_cons(Tree, Map, State) ->
{State1, Map1, HdType} = traverse(Hd, Map, State),
{State2, Map2, TlType} = traverse(Tl, Map1, State1),
State3 =
- case t_is_none(t_inf(TlType, t_list())) of
+ case t_is_none(t_inf(TlType, t_list(), State2#state.opaques)) of
true ->
Msg = {improper_list_constr, [format_type(TlType, State2)]},
state__add_warning(State2, ?WARN_NON_PROPER_LIST, Tree, Msg);
@@ -979,8 +1016,9 @@ handle_receive(Tree, Map, State) ->
[], []),
Map1 = join_maps(MapList, Map),
{State3, Map2, TimeoutType} = traverse(Timeout, Map1, State2),
- case (t_is_atom(TimeoutType) andalso
- (t_atom_vals(TimeoutType) =:= ['infinity'])) of
+ Opaques = State3#state.opaques,
+ case (t_is_atom(TimeoutType, Opaques) andalso
+ (t_atom_vals(TimeoutType, Opaques) =:= ['infinity'])) of
true ->
{State3, Map2, ReceiveType};
false ->
@@ -1023,6 +1061,19 @@ handle_try(Tree, Map, State) ->
%%----------------------------------------
+handle_map(Tree,Map,State) ->
+ Pairs = cerl:map_es(Tree),
+ {State1, Map1, TypePairs} = traverse_list(Pairs,Map,State),
+ {State1, Map1, t_map(TypePairs)}.
+
+handle_map_pair(Tree,Map,State) ->
+ Key = cerl:map_pair_key(Tree),
+ Val = cerl:map_pair_val(Tree),
+ {State1, Map1, [K,V]} = traverse_list([Key,Val],Map,State),
+ {State1, Map1, {K,V}}.
+
+%%----------------------------------------
+
handle_tuple(Tree, Map, State) ->
Elements = cerl:tuple_es(Tree),
{State1, Map1, EsType} = traverse_list(Elements, Map, State),
@@ -1031,55 +1082,46 @@ handle_tuple(Tree, Map, State) ->
true ->
{State1, Map1, t_none()};
false ->
- %% Let's find out if this is a record or opaque construction.
+ %% Let's find out if this is a record
case Elements of
[Tag|Left] ->
case cerl:is_c_atom(Tag) of
true ->
TagVal = cerl:atom_val(Tag),
- case t_opaque_match_record(TupleType, State1#state.opaques) of
- [Opaque] ->
- RecStruct = t_opaque_matching_structure(TupleType, Opaque),
- RecFields = t_tuple_args(RecStruct),
- case bind_pat_vars(Elements, RecFields, [], Map1, State1) of
- {error, _, ErrorPat, ErrorType, _} ->
- Msg = {record_constr,
- [TagVal, format_patterns(ErrorPat),
- format_type(ErrorType, State1)]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- {Map2, _ETypes} ->
- {State1, Map2, Opaque}
- end;
- _ ->
- case state__lookup_record(TagVal, length(Left), State1) of
- error -> {State1, Map1, TupleType};
- {ok, RecType} ->
- InfTupleType = t_inf(RecType, TupleType),
- case t_is_none(InfTupleType) of
- true ->
- RecC = format_type(TupleType, State1),
- FieldDiffs = format_field_diffs(TupleType, State1),
- Msg = {record_constr, [RecC, FieldDiffs]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- false ->
- case bind_pat_vars(Elements, t_tuple_args(RecType),
- [], Map1, State1) of
- {error, bind, ErrorPat, ErrorType, _} ->
- Msg = {record_constr,
- [TagVal, format_patterns(ErrorPat),
- format_type(ErrorType, State1)]},
- State2 = state__add_warning(State1, ?WARN_MATCHING,
- Tree, Msg),
- {State2, Map1, t_none()};
- {Map2, ETypes} ->
- {State1, Map2, t_tuple(ETypes)}
- end
- end
- end
+ case state__lookup_record(TagVal, length(Left), State1) of
+ error -> {State1, Map1, TupleType};
+ {ok, RecType} ->
+ InfTupleType = t_inf(RecType, TupleType),
+ case t_is_none(InfTupleType) of
+ true ->
+ RecC = format_type(TupleType, State1),
+ FieldDiffs = format_field_diffs(TupleType, State1),
+ Msg = {record_constr, [RecC, FieldDiffs]},
+ State2 = state__add_warning(State1, ?WARN_MATCHING,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ false ->
+ case bind_pat_vars(Elements, t_tuple_args(RecType),
+ [], Map1, State1) of
+ {error, bind, ErrorPat, ErrorType, _} ->
+ Msg = {record_constr,
+ [TagVal, format_patterns(ErrorPat),
+ format_type(ErrorType, State1)]},
+ State2 = state__add_warning(State1, ?WARN_MATCHING,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ {error, opaque, ErrorPat, ErrorType, OpaqueType} ->
+ Msg = {opaque_match,
+ [format_patterns(ErrorPat),
+ format_type(ErrorType, State1),
+ format_type(OpaqueType, State1)]},
+ State2 = state__add_warning(State1, ?WARN_OPAQUE,
+ Tree, Msg),
+ {State2, Map1, t_none()};
+ {Map2, ETypes} ->
+ {State1, Map2, t_tuple(ETypes)}
+ end
+ end
end;
false ->
{State1, Map1, t_tuple(EsType)}
@@ -1356,7 +1398,9 @@ bind_pat_vars_reverse(Pats, Types, Acc, Map, State) ->
end.
bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
- ?debug("Binding pat: ~w to ~s\n", [cerl:type(Pat), format_type(Type, State)]),
+ ?debug("Binding pat: ~w to ~s\n", [cerl:type(Pat), format_type(Type, State)]
+),
+ Opaques = State#state.opaques,
{NewMap, TypeOut} =
case cerl:type(Pat) of
alias ->
@@ -1372,9 +1416,15 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
case Rev of
true -> {Map, t_bitstr()};
false ->
- BinType = t_inf(t_bitstr(), Type),
+ BinType = t_inf(t_bitstr(), Type, Opaques),
case t_is_none(BinType) of
- true -> bind_error([Pat], Type, t_none(), bind);
+ true ->
+ case t_find_opaque_mismatch(t_bitstr(), Type) of
+ {ok, T1, T2} ->
+ bind_error([Pat], T1, T2, opaque);
+ error ->
+ bind_error([Pat], Type, t_none(), bind)
+ end;
false ->
Segs = cerl:binary_segments(Pat),
{Map1, SegTypes} = bind_bin_segs(Segs, BinType, Map, State),
@@ -1382,29 +1432,27 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
end
end;
cons ->
- Cons = t_inf(Type, t_cons()),
+ Cons = t_inf(Type, t_cons(), Opaques),
case t_is_none(Cons) of
true ->
bind_opaque_pats(t_cons(), Type, Pat, Map, State, Rev);
false ->
{Map1, [HdType, TlType]} =
bind_pat_vars([cerl:cons_hd(Pat), cerl:cons_tl(Pat)],
- [t_cons_hd(Cons), t_cons_tl(Cons)],
+ [t_cons_hd(Cons, Opaques),
+ t_cons_tl(Cons, Opaques)],
[], Map, State, Rev),
{Map1, t_cons(HdType, TlType)}
end;
literal ->
Literal = literal_type(Pat),
- LiteralOrOpaque =
- case t_opaque_match_atom(Literal, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Literal
- end,
- case t_is_none(t_inf(LiteralOrOpaque, Type)) of
+ case t_is_none(t_inf(Literal, Type, Opaques)) of
true ->
bind_opaque_pats(Literal, Type, Pat, Map, State, Rev);
- false -> {Map, LiteralOrOpaque}
+ false -> {Map, Literal}
end;
+ map ->
+ {Map, t_map([])};
tuple ->
Es = cerl:tuple_es(Pat),
{TypedRecord, Prototype} =
@@ -1419,27 +1467,28 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
{ok, Record} ->
[_Head|AnyTail] = [t_any() || _ <- Es],
UntypedRecord = t_tuple([t_atom(TagAtom)|AnyTail]),
- {not erl_types:t_is_equal(Record, UntypedRecord), Record}
+ {not t_is_equal(Record, UntypedRecord), Record}
end;
false -> {false, t_tuple(length(Es))}
end
end,
- Tuple = t_inf(Prototype, Type),
+ Tuple = t_inf(Prototype, Type, Opaques),
case t_is_none(Tuple) of
true ->
bind_opaque_pats(Prototype, Type, Pat, Map, State, Rev);
false ->
- SubTuples = t_tuple_subtypes(Tuple),
+ SubTuples = t_tuple_subtypes(Tuple, Opaques),
%% Need to call the top function to get the try-catch wrapper
MapJ = join_maps_begin(Map),
Results =
case Rev of
true ->
- [bind_pat_vars_reverse(Es, t_tuple_args(SubTuple), [],
- MapJ, State)
+ [bind_pat_vars_reverse(Es, t_tuple_args(SubTuple, Opaques),
+ [], MapJ, State)
|| SubTuple <- SubTuples];
false ->
- [bind_pat_vars(Es, t_tuple_args(SubTuple), [], MapJ, State)
+ [bind_pat_vars(Es, t_tuple_args(SubTuple, Opaques), [],
+ MapJ, State)
|| SubTuple <- SubTuples]
end,
case lists:keyfind(opaque, 2, Results) of
@@ -1466,37 +1515,14 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
bind_pat_vars(Es, t_to_tlist(Type), [], Map, State, Rev),
{Map1, t_product(EsTypes)};
var ->
- Opaques = State#state.opaques,
VarType1 =
case state__lookup_type_for_letrec(Pat, State) of
- error ->
- LType = lookup_type(Pat, Map),
- case t_opaque_match_record(LType, Opaques) of
- [Opaque] -> Opaque;
- _ ->
- case t_opaque_match_atom(LType, Opaques) of
- [Opaque] -> Opaque;
- _ -> LType
- end
- end;
+ error -> lookup_type(Pat, Map);
{ok, RecType} -> RecType
end,
%% Must do inf when binding args to pats. Vars in pats are fresh.
- VarType2 = t_inf(VarType1, Type),
- VarType3 =
- case Opaques =/= [] of
- true ->
- case t_opaque_match_record(VarType2, Opaques) of
- [OpaqueRec] -> OpaqueRec;
- _ ->
- case t_opaque_match_atom(VarType2, Opaques) of
- [OpaqueAtom] -> OpaqueAtom;
- _ -> VarType2
- end
- end;
- false -> VarType2
- end,
- case t_is_none(VarType3) of
+ VarType2 = t_inf(VarType1, Type, Opaques),
+ case t_is_none(VarType2) of
true ->
case t_find_opaque_mismatch(VarType1, Type) of
{ok, T1, T2} ->
@@ -1505,8 +1531,8 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) ->
bind_error([Pat], Type, t_none(), bind)
end;
false ->
- Map1 = enter_type(Pat, VarType3, Map),
- {Map1, VarType3}
+ Map1 = enter_type(Pat, VarType2, Map),
+ {Map1, VarType2}
end;
_Other ->
%% Catch all is needed when binding args to pats
@@ -1529,7 +1555,8 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
binary = SegType, [] = Segs, %% just an assert
T = t_inf(t_bitstr(UnitVal, 0), BinType),
{Map1, [Type]} = bind_pat_vars([Val], [T], [], Map, State, false),
- bind_bin_segs(Segs, t_bitstr(0, 0), [Type|Acc], Map1, State);
+ Type1 = remove_local_opaque_types(Type, State#state.opaques),
+ bind_bin_segs(Segs, t_bitstr(0, 0), [Type1|Acc], Map1, State);
utf -> % XXX: possibly can be strengthened
true = lists:member(SegType, [utf8, utf16, utf32]),
{Map1, [_]} = bind_pat_vars([Val], [t_integer()], [], Map, State, false),
@@ -1539,11 +1566,17 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
Size = cerl:bitstr_size(Seg),
{Map1, [SizeType]} =
bind_pat_vars([Size], [t_non_neg_integer()], [], Map, State, false),
+ Opaques = State#state.opaques,
+ NumberVals = t_number_vals(SizeType, Opaques),
+ case t_contains_opaque(SizeType, Opaques) of
+ true -> bind_error([Seg], SizeType, t_none(), opaque);
+ false -> ok
+ end,
Type =
- case t_number_vals(SizeType) of
+ case NumberVals of
[OneSize] -> t_bitstr(0, UnitVal * OneSize);
- _ ->
- MinSize = erl_types:number_min(SizeType),
+ _ -> % 'unknown' too
+ MinSize = erl_types:number_min(SizeType, Opaques),
t_bitstr(UnitVal, UnitVal * MinSize)
end,
ValConstr =
@@ -1551,7 +1584,7 @@ bind_bin_segs([Seg|Segs], BinType, Acc, Map, State) ->
binary -> Type; %% The same constraints as for the whole bitstr
float -> t_float();
integer ->
- case t_number_vals(SizeType) of
+ case NumberVals of
unknown -> t_integer();
List ->
SizeVal = lists:max(List),
@@ -1579,7 +1612,7 @@ bind_error(Pats, Type, OpaqueType, Error) ->
bind_opaque_pats(GenType, Type, Pat, Map, State, Rev) ->
case t_find_opaque_mismatch(GenType, Type) of
{ok, T1, T2} ->
- case lists:member(T2, State#state.opaques) of
+ case erl_types:is_opaque_type(T2, State#state.opaques) of
true ->
NewType = erl_types:t_struct_from_opaque(Type, [T2]),
{Map1, _} =
@@ -1630,6 +1663,8 @@ bind_guard(Guard, Map, Env, Eval, State) ->
Es0 = cerl:tuple_es(Guard),
{Map1, Es} = bind_guard_list(Es0, Map, Env, dont_know, State),
{Map1, t_tuple(Es)};
+ map ->
+ {Map, t_map([])};
'let' ->
Arg = cerl:let_arg(Guard),
[Var] = cerl:let_vars(Guard),
@@ -1700,19 +1735,9 @@ handle_guard_call(Guard, Map, Env, Eval, State) ->
handle_guard_gen_fun({M, F, A}, Guard, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
- {Map1, As0} = bind_guard_list(Args, Map, Env, dont_know, State),
- MapFun = fun(Type) ->
- case lists:member(Type, State#state.opaques) of
- true -> erl_types:t_opaque_structure(Type);
- false -> Type
- end
- end,
- As = lists:map(MapFun, As0),
- Mode = case As =:= As0 of
- true -> structured;
- false -> opaque
- end,
- BifRet = erl_bif_types:type(M, F, A, As),
+ {Map1, As} = bind_guard_list(Args, Map, Env, dont_know, State),
+ Opaques = State#state.opaques,
+ BifRet = erl_bif_types:type(M, F, A, As, Opaques),
case t_is_none(BifRet) of
true ->
%% Is this an error-bif?
@@ -1721,11 +1746,8 @@ handle_guard_gen_fun({M, F, A}, Guard, Map, Env, Eval, State) ->
false -> signal_guard_fatal_fail(Eval, Guard, As, State)
end;
false ->
- BifArgs = case erl_bif_types:arg_types(M, F, A) of
- unknown -> lists:duplicate(A, t_any());
- List -> List
- end,
- Map2 = enter_type_lists(Args, t_inf_lists(BifArgs, As0, Mode), Map1),
+ BifArgs = bif_args(M, F, A),
+ Map2 = enter_type_lists(Args, t_inf_lists(BifArgs, As, Opaques), Map1),
Ret =
case Eval of
pos -> t_inf(t_atom(true), BifRet);
@@ -1771,29 +1793,19 @@ bind_type_test(Eval, TypeTest, ArgType, State) ->
is_reference -> t_reference();
is_tuple -> t_tuple()
end,
- Mode = determine_mode(ArgType, State#state.opaques),
case Eval of
pos ->
- Inf = t_inf(Type, ArgType, Mode),
+ Inf = t_inf(Type, ArgType, State#state.opaques),
case t_is_none(Inf) of
true -> error;
false -> {ok, Inf, t_atom(true)}
end;
neg ->
- case Mode of
- opaque ->
- Struct = erl_types:t_opaque_structure(ArgType),
- case t_is_none(t_subtract(Struct, Type)) of
- true -> error;
- false -> {ok, ArgType, t_atom(false)}
- end;
- structured ->
- Sub = t_subtract(ArgType, Type),
- case t_is_none(Sub) of
- true -> error;
- false -> {ok, Sub, t_atom(false)}
- end
- end;
+ Sub = t_subtract(ArgType, Type),
+ case t_is_none(Sub) of
+ true -> error;
+ false -> {ok, Sub, t_atom(false)}
+ end;
dont_know ->
{ok, ArgType, t_boolean()}
end.
@@ -1802,9 +1814,10 @@ handle_guard_comp(Guard, Comp, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
[Arg1, Arg2] = Args,
{Map1, ArgTypes} = bind_guard_list(Args, Map, Env, dont_know, State),
+ Opaques = State#state.opaques,
[Type1, Type2] = ArgTypes,
- IsInt1 = t_is_integer(Type1),
- IsInt2 = t_is_integer(Type2),
+ IsInt1 = t_is_integer(Type1, Opaques),
+ IsInt2 = t_is_integer(Type2, Opaques),
case {cerl:type(Arg1), cerl:type(Arg2)} of
{literal, literal} ->
case erlang:Comp(cerl:concrete(Arg1), cerl:concrete(Arg2)) of
@@ -1817,12 +1830,13 @@ handle_guard_comp(Guard, Comp, Map, Env, Eval, State) ->
false when Eval =:= neg -> {Map, t_atom(false)}
end;
{literal, var} when IsInt1 andalso IsInt2 andalso (Eval =:= pos) ->
- case bind_comp_literal_var(Arg1, Arg2, Type2, Comp, Map1) of
+ case bind_comp_literal_var(Arg1, Arg2, Type2, Comp, Map1, Opaques) of
error -> signal_guard_fail(Eval, Guard, ArgTypes, State);
{ok, NewMap} -> {NewMap, t_atom(true)}
end;
{var, literal} when IsInt1 andalso IsInt2 andalso (Eval =:= pos) ->
- case bind_comp_literal_var(Arg2, Arg1, Type1, invert_comp(Comp), Map1) of
+ case bind_comp_literal_var(Arg2, Arg1, Type1, invert_comp(Comp),
+ Map1, Opaques) of
error -> signal_guard_fail(Eval, Guard, ArgTypes, State);
{ok, NewMap} -> {NewMap, t_atom(true)}
end;
@@ -1835,10 +1849,10 @@ invert_comp('<') -> '>';
invert_comp('>=') -> '=<';
invert_comp('>') -> '<'.
-bind_comp_literal_var(Lit, Var, VarType, CompOp, Map) ->
+bind_comp_literal_var(Lit, Var, VarType, CompOp, Map, Opaques) ->
LitVal = cerl:concrete(Lit),
NewVarType =
- case t_number_vals(VarType) of
+ case t_number_vals(VarType, Opaques) of
unknown ->
Range =
case CompOp of
@@ -1847,7 +1861,7 @@ bind_comp_literal_var(Lit, Var, VarType, CompOp, Map) ->
'>=' -> t_from_range(neg_inf, LitVal);
'>' -> t_from_range(neg_inf, LitVal - 1)
end,
- t_inf(Range, VarType);
+ t_inf(Range, VarType, Opaques);
NumberVals ->
NewNumberVals = [X || X <- NumberVals, erlang:CompOp(LitVal, X)],
t_integers(NewNumberVals)
@@ -1861,17 +1875,18 @@ handle_guard_is_function(Guard, Map, Env, Eval, State) ->
Args = cerl:call_args(Guard),
{Map1, ArgTypes0} = bind_guard_list(Args, Map, Env, dont_know, State),
[FunType0, ArityType0] = ArgTypes0,
- ArityType = t_inf(ArityType0, t_integer()),
+ Opaques = State#state.opaques,
+ ArityType = t_inf(ArityType0, t_integer(), Opaques),
case t_is_none(ArityType) of
true -> signal_guard_fail(Eval, Guard, ArgTypes0, State);
false ->
FunTypeConstr =
- case t_number_vals(ArityType) of
+ case t_number_vals(ArityType, State#state.opaques) of
unknown -> t_fun();
Vals ->
t_sup([t_fun(lists:duplicate(X, t_any()), t_any()) || X <- Vals])
end,
- FunType = t_inf(FunType0, FunTypeConstr),
+ FunType = t_inf(FunType0, FunTypeConstr, Opaques),
case t_is_none(FunType) of
true ->
case Eval of
@@ -1896,33 +1911,45 @@ handle_guard_is_record(Guard, Map, Env, Eval, State) ->
Arity = cerl:int_val(Arity0),
{Map1, RecType} = bind_guard(Rec, Map, Env, dont_know, State),
ArityMin1 = Arity - 1,
- TupleType =
- case state__lookup_record(Tag, ArityMin1, State) of
- error -> t_tuple([t_atom(Tag)|lists:duplicate(ArityMin1, t_any())]);
- {ok, Prototype} -> Prototype
- end,
- Mode = determine_mode(RecType, State#state.opaques),
- NewTupleType =
- case t_opaque_match_record(TupleType, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> TupleType
- end,
- Type = t_inf(NewTupleType, RecType, Mode),
- case t_is_none(Type) of
+ Opaques = State#state.opaques,
+ Tuple = t_tuple([t_atom(Tag)|lists:duplicate(ArityMin1, t_any())]),
+ case t_is_none(t_inf(Tuple, RecType, Opaques)) of
true ->
- case Eval of
- pos -> signal_guard_fail(Eval, Guard,
- [RecType, t_from_term(Tag),
- t_from_term(Arity)],
- State);
- neg -> {Map1, t_atom(false)};
- dont_know -> {Map1, t_atom(false)}
+ case erl_types:t_has_opaque_subtype(RecType, Opaques) of
+ true ->
+ signal_guard_fail(Eval, Guard,
+ [RecType, t_from_term(Tag),
+ t_from_term(Arity)],
+ State);
+ false ->
+ case Eval of
+ pos -> signal_guard_fail(Eval, Guard,
+ [RecType, t_from_term(Tag),
+ t_from_term(Arity)],
+ State);
+ neg -> {Map1, t_atom(false)};
+ dont_know -> {Map1, t_atom(false)}
+ end
end;
false ->
- case Eval of
- pos -> {enter_type(Rec, Type, Map1), t_atom(true)};
- neg -> {Map1, t_atom(false)};
- dont_know -> {Map1, t_boolean()}
+ TupleType =
+ case state__lookup_record(Tag, ArityMin1, State) of
+ error -> Tuple;
+ {ok, Prototype} -> Prototype
+ end,
+ Type = t_inf(TupleType, RecType, State#state.opaques),
+ case t_is_none(Type) of
+ true ->
+ %% No special handling of opaque errors.
+ FArgs = "record " ++ format_type(RecType, State),
+ Msg = {record_matching, [FArgs, Tag]},
+ throw({fail, {Guard, Msg}});
+ false ->
+ case Eval of
+ pos -> {enter_type(Rec, Type, Map1), t_atom(true)};
+ neg -> {Map1, t_atom(false)};
+ dont_know -> {Map1, t_boolean()}
+ end
end
end.
@@ -1975,14 +2002,24 @@ handle_guard_eq(Guard, Map, Env, Eval, State) ->
bind_eq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State) ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, dont_know, State),
{Map2, Type2} = bind_guard(Arg2, Map1, Env, dont_know, State),
- case (t_is_nil(Type1) orelse t_is_nil(Type2) orelse
- t_is_atom(Type1) orelse t_is_atom(Type2)) of
+ Opaques = State#state.opaques,
+ case
+ t_is_nil(Type1, Opaques) orelse t_is_nil(Type2, Opaques)
+ orelse t_is_atom(Type1, Opaques) orelse t_is_atom(Type2, Opaques)
+ of
true -> bind_eqeq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State);
false ->
- case Eval of
- pos -> {Map2, t_atom(true)};
- neg -> {Map2, t_atom(false)};
- dont_know -> {Map2, t_boolean()}
+ %% XXX. Is this test OK?
+ OpArgs = erl_types:t_find_unknown_opaque(Type1, Type2, Opaques),
+ case OpArgs =:= [] of
+ true ->
+ case Eval of
+ pos -> {Map2, t_atom(true)};
+ neg -> {Map2, t_atom(false)};
+ dont_know -> {Map2, t_boolean()}
+ end;
+ false ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end
end.
@@ -2021,44 +2058,52 @@ bind_eqeq_guard(Guard, Arg1, Arg2, Map, Env, Eval, State) ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, dont_know, State),
?debug("Types are:~s =:= ~s\n", [t_to_string(Type1),
t_to_string(Type2)]),
- Inf = t_inf(Type1, Type2),
+ Opaques = State#state.opaques,
+ Inf = t_inf(Type1, Type2, Opaques),
case t_is_none(Inf) of
true ->
- case Eval of
- neg -> {Map2, t_atom(false)};
- dont_know -> {Map2, t_atom(false)};
- pos -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
+ OpArgs = erl_types:t_find_unknown_opaque(Type1, Type2, Opaques),
+ case OpArgs =:= [] of
+ true ->
+ case Eval of
+ neg -> {Map2, t_atom(false)};
+ dont_know -> {Map2, t_atom(false)};
+ pos -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
+ end;
+ false ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end;
false ->
case Eval of
- pos ->
- case {cerl:type(Arg1), cerl:type(Arg2)} of
- {var, var} ->
- Map3 = enter_subst(Arg1, Arg2, Map2),
- Map4 = enter_type(Arg2, Inf, Map3),
- {Map4, t_atom(true)};
- {var, _} ->
- Map3 = enter_type(Arg1, Inf, Map2),
- {Map3, t_atom(true)};
- {_, var} ->
- Map3 = enter_type(Arg2, Inf, Map2),
- {Map3, t_atom(true)};
- {_, _} ->
- {Map2, t_atom(true)}
- end;
- neg ->
- {Map2, t_atom(false)};
- dont_know ->
- {Map2, t_boolean()}
+ pos ->
+ case {cerl:type(Arg1), cerl:type(Arg2)} of
+ {var, var} ->
+ Map3 = enter_subst(Arg1, Arg2, Map2),
+ Map4 = enter_type(Arg2, Inf, Map3),
+ {Map4, t_atom(true)};
+ {var, _} ->
+ Map3 = enter_type(Arg1, Inf, Map2),
+ {Map3, t_atom(true)};
+ {_, var} ->
+ Map3 = enter_type(Arg2, Inf, Map2),
+ {Map3, t_atom(true)};
+ {_, _} ->
+ {Map2, t_atom(true)}
+ end;
+ neg ->
+ {Map2, t_atom(false)};
+ dont_know ->
+ {Map2, t_boolean()}
end
end.
bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
Eval = dont_know,
+ Opaques = State#state.opaques,
case cerl:concrete(Arg1) of
true ->
{_, Type} = MT = bind_guard(Arg2, Map, Env, pos, State),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type, Opaques) of
true -> MT;
false ->
{_, Type0} = bind_guard(Arg2, Map, Env, Eval, State),
@@ -2066,7 +2111,7 @@ bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
end;
false ->
{Map1, Type} = bind_guard(Arg2, Map, Env, neg, State),
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type, Opaques) of
true -> {Map1, t_atom(true)};
false ->
{_, Type0} = bind_guard(Arg2, Map, Env, Eval, State),
@@ -2087,14 +2132,15 @@ bind_eqeq_guard_lit_other(Guard, Arg1, Arg2, Map, Env, State) ->
handle_guard_and(Guard, Map, Env, Eval, State) ->
[Arg1, Arg2] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
pos ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, Eval, State),
- case t_is_atom(true, Type1) of
+ case t_is_any_atom(true, Type1, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, t_any()], State);
true ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, Eval, State),
- case t_is_atom(true, Type2) of
+ case t_is_any_atom(true, Type2, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State);
true -> {Map2, t_atom(true)}
end
@@ -2109,7 +2155,10 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
try bind_guard(Arg2, MapJ, Env, neg, State)
catch throw:{fail, _} -> bind_guard(Arg1, MapJ, Env, pos, State)
end,
- case t_is_atom(false, Type1) orelse t_is_atom(false, Type2) of
+ case
+ t_is_any_atom(false, Type1, Opaques)
+ orelse t_is_any_atom(false, Type2, Opaques)
+ of
true -> {join_maps_end([Map1, Map2], MapJ), t_atom(false)};
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State)
end;
@@ -2124,11 +2173,16 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
false ->
NewMap = join_maps_end([Map1, Map2], MapJ),
NewType =
- case {t_atom_vals(Bool1), t_atom_vals(Bool2)} of
+ case {t_atom_vals(Bool1, Opaques), t_atom_vals(Bool2, Opaques)} of
{['true'] , ['true'] } -> t_atom(true);
{['false'], _ } -> t_atom(false);
{_ , ['false']} -> t_atom(false);
+ {unknown , _ } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
+ {_ , unknown } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
{_ , _ } -> t_boolean()
+
end,
{NewMap, NewType}
end
@@ -2136,6 +2190,7 @@ handle_guard_and(Guard, Map, Env, Eval, State) ->
handle_guard_or(Guard, Map, Env, Eval, State) ->
[Arg1, Arg2] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
pos ->
MapJ = join_maps_begin(Map),
@@ -2149,19 +2204,23 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
catch
throw:{fail,_} -> bind_guard(Arg2, MapJ, Env, dont_know, State)
end,
- case ((t_is_atom(true, Bool1) andalso t_is_boolean(Bool2))
- orelse
- (t_is_atom(true, Bool2) andalso t_is_boolean(Bool1))) of
+ case
+ ((t_is_any_atom(true, Bool1, Opaques)
+ andalso t_is_boolean(Bool2, Opaques))
+ orelse
+ (t_is_any_atom(true, Bool2, Opaques)
+ andalso t_is_boolean(Bool1, Opaques)))
+ of
true -> {join_maps_end([Map1, Map2], MapJ), t_atom(true)};
false -> signal_guard_fail(Eval, Guard, [Bool1, Bool2], State)
end;
neg ->
{Map1, Type1} = bind_guard(Arg1, Map, Env, neg, State),
- case t_is_atom(false, Type1) of
+ case t_is_any_atom(false, Type1, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, t_any()], State);
true ->
{Map2, Type2} = bind_guard(Arg2, Map1, Env, neg, State),
- case t_is_atom(false, Type2) of
+ case t_is_any_atom(false, Type2, Opaques) of
false -> signal_guard_fail(Eval, Guard, [Type1, Type2], State);
true -> {Map2, t_atom(false)}
end
@@ -2177,10 +2236,14 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
false ->
NewMap = join_maps_end([Map1, Map2], MapJ),
NewType =
- case {t_atom_vals(Bool1), t_atom_vals(Bool2)} of
+ case {t_atom_vals(Bool1, Opaques), t_atom_vals(Bool2, Opaques)} of
{['false'], ['false']} -> t_atom(false);
{['true'] , _ } -> t_atom(true);
{_ , ['true'] } -> t_atom(true);
+ {unknown , _ } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
+ {_ , unknown } ->
+ signal_guard_fail(Eval, Guard, [Type1, Type2], State);
{_ , _ } -> t_boolean()
end,
{NewMap, NewType}
@@ -2189,10 +2252,11 @@ handle_guard_or(Guard, Map, Env, Eval, State) ->
handle_guard_not(Guard, Map, Env, Eval, State) ->
[Arg] = cerl:call_args(Guard),
+ Opaques = State#state.opaques,
case Eval of
neg ->
{Map1, Type} = bind_guard(Arg, Map, Env, pos, State),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type, Opaques) of
true -> {Map1, t_atom(false)};
false ->
{_, Type0} = bind_guard(Arg, Map, Env, Eval, State),
@@ -2200,7 +2264,7 @@ handle_guard_not(Guard, Map, Env, Eval, State) ->
end;
pos ->
{Map1, Type} = bind_guard(Arg, Map, Env, neg, State),
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type, Opaques) of
true -> {Map1, t_atom(true)};
false ->
{_, Type0} = bind_guard(Arg, Map, Env, Eval, State),
@@ -2212,10 +2276,11 @@ handle_guard_not(Guard, Map, Env, Eval, State) ->
case t_is_none(Bool) of
true -> throw({fatal_fail, none});
false ->
- case t_atom_vals(Bool) of
+ case t_atom_vals(Bool, Opaques) of
['true'] -> {Map1, t_atom(false)};
['false'] -> {Map1, t_atom(true)};
- [_, _] -> {Map1, Bool}
+ [_, _] -> {Map1, Bool};
+ unknown -> signal_guard_fail(Eval, Guard, [Type], State)
end
end
end.
@@ -2235,27 +2300,40 @@ bind_guard_list([], Map, _Env, _Eval, _State, Acc) ->
state()) -> no_return().
signal_guard_fail(Eval, Guard, ArgTypes, State) ->
+ signal_guard_failure(Eval, Guard, ArgTypes, fail, State).
+
+signal_guard_fatal_fail(Eval, Guard, ArgTypes, State) ->
+ signal_guard_failure(Eval, Guard, ArgTypes, fatal_fail, State).
+
+signal_guard_failure(Eval, Guard, ArgTypes, Tag, State) ->
Args = cerl:call_args(Guard),
F = cerl:atom_val(cerl:call_name(Guard)),
- MFA = {cerl:atom_val(cerl:call_module(Guard)), F, length(Args)},
- Msg =
+ {M, F, A} = MFA = {cerl:atom_val(cerl:call_module(Guard)), F, length(Args)},
+ Opaques = State#state.opaques,
+ {Kind, XInfo} =
+ case erl_bif_types:opaque_args(M, F, A, ArgTypes, Opaques) of
+ [] ->
+ {case Eval of
+ neg -> neg_guard_fail;
+ pos -> guard_fail;
+ dont_know -> guard_fail
+ end,
+ []};
+ Ns -> {opaque_guard, [Ns]}
+ end,
+ FArgs =
case is_infix_op(MFA) of
true ->
[ArgType1, ArgType2] = ArgTypes,
[Arg1, Arg2] = Args,
- Kind =
- case Eval of
- neg -> neg_guard_fail;
- pos -> guard_fail;
- dont_know -> guard_fail
- end,
- {Kind, [format_args_1([Arg1], [ArgType1], State),
- atom_to_list(F),
- format_args_1([Arg2], [ArgType2], State)]};
+ [format_args_1([Arg1], [ArgType1], State),
+ atom_to_list(F),
+ format_args_1([Arg2], [ArgType2], State)] ++ XInfo;
false ->
- mk_guard_msg(Eval, F, Args, ArgTypes, State)
+ [F, format_args(Args, ArgTypes, State)]
end,
- throw({fail, {Guard, Msg}}).
+ Msg = {Kind, FArgs},
+ throw({Tag, {Guard, Msg}}).
is_infix_op({erlang, '=:=', 2}) -> true;
is_infix_op({erlang, '==', 2}) -> true;
@@ -2268,25 +2346,10 @@ is_infix_op({erlang, '>=', 2}) -> true;
is_infix_op({M, F, A}) when is_atom(M), is_atom(F),
is_integer(A), 0 =< A, A =< 255 -> false.
--spec signal_guard_fatal_fail(eval(), cerl:c_call(), [erl_types:erl_type()],
- state()) -> no_return().
-
-signal_guard_fatal_fail(Eval, Guard, ArgTypes, State) ->
- Args = cerl:call_args(Guard),
- F = cerl:atom_val(cerl:call_name(Guard)),
- Msg = mk_guard_msg(Eval, F, Args, ArgTypes, State),
- throw({fatal_fail, {Guard, Msg}}).
-
-mk_guard_msg(Eval, F, Args, ArgTypes, State) ->
- FArgs = [F, format_args(Args, ArgTypes, State)],
- case any_has_opaque_subtype(ArgTypes) of
- true -> {opaque_guard, FArgs};
- false ->
- case Eval of
- neg -> {neg_guard_fail, FArgs};
- pos -> {guard_fail, FArgs};
- dont_know -> {guard_fail, FArgs}
- end
+bif_args(M, F, A) ->
+ case erl_bif_types:arg_types(M, F, A) of
+ unknown -> lists:duplicate(A, t_any());
+ List -> List
end.
bind_guard_case_clauses(Arg, Clauses, Map0, Env, Eval, State) ->
@@ -2366,14 +2429,15 @@ bind_guard_case_clauses(GenArgType, GenMap, ArgExpr, [Clause|Left],
end,
{NewMap3, CType} = bind_guard(cerl:clause_body(Clause), NewMap2,
Env, Eval, State),
+ Opaques = State#state.opaques,
case Eval of
pos ->
- case t_is_atom(true, CType) of
+ case t_is_any_atom(true, CType, Opaques) of
true -> ok;
false -> throw({fail, none})
end;
neg ->
- case t_is_atom(false, CType) of
+ case t_is_any_atom(false, CType, Opaques) of
true -> ok;
false -> throw({fail, none})
end;
@@ -2501,8 +2565,11 @@ enter_type(Key, Val, MS) ->
error ->
?debug("Entering ~p :: ~s\n", [KeyLabel, t_to_string(Val)]),
case dict:find(KeyLabel, Dict) of
- {ok, Val} -> MS;
- {ok, _OldVal} -> store_map(KeyLabel, Val, MS);
+ {ok, Value} ->
+ case erl_types:t_is_equal(Val, Value) of
+ true -> MS;
+ false -> store_map(KeyLabel, Val, MS)
+ end;
error -> store_map(KeyLabel, Val, MS)
end
end
@@ -2611,10 +2678,15 @@ get_label(L) when is_integer(L) ->
get_label(T) ->
cerl_trees:get_label(T).
-t_is_simple(ArgType) ->
- t_is_atom(ArgType) orelse t_is_number(ArgType) orelse t_is_port(ArgType)
- orelse t_is_pid(ArgType) orelse t_is_reference(ArgType)
- orelse t_is_nil(ArgType).
+t_is_simple(ArgType, State) ->
+ Opaques = State#state.opaques,
+ t_is_atom(ArgType, Opaques) orelse t_is_number(ArgType, Opaques)
+ orelse t_is_port(ArgType, Opaques)
+ orelse t_is_pid(ArgType, Opaques) orelse t_is_reference(ArgType, Opaques)
+ orelse t_is_nil(ArgType, Opaques).
+
+remove_local_opaque_types(Type, Opaques) ->
+ t_unopaque(Type, Opaques).
%% t_is_structured(ArgType) ->
%% case t_is_nil(ArgType) of
@@ -2638,12 +2710,6 @@ is_call_to_send(Tree) ->
andalso (Arity =:= 2)
end.
-any_opaque(Ts) ->
- lists:any(fun erl_types:t_is_opaque/1, Ts).
-
-any_has_opaque_subtype(Ts) ->
- lists:any(fun erl_types:t_has_opaque_subtype/1, Ts).
-
filter_match_fail([Clause] = Cls) ->
Body = cerl:clause_body(Clause),
case cerl:type(Body) of
@@ -2662,12 +2728,6 @@ filter_match_fail([]) ->
%% receive after 1 -> ok end
[].
-determine_mode(Type, Opaques) ->
- case lists:member(Type, Opaques) of
- true -> opaque;
- false -> structured
- end.
-
%%% ===========================================================================
%%%
%%% The State.
@@ -2679,7 +2739,7 @@ state__new(Callgraph, Tree, Plt, Module, Records) ->
erl_types:t_opaque_from_records(Records),
TreeMap = build_tree_map(Tree),
Funs = dict:fetch_keys(TreeMap),
- FunTab = init_fun_tab(Funs, dict:new(), TreeMap, Callgraph, Plt, Opaques),
+ FunTab = init_fun_tab(Funs, dict:new(), TreeMap, Callgraph, Plt),
ExportedFuns =
[Fun || Fun <- Funs--[top], dialyzer_callgraph:is_escaping(Fun, Callgraph)],
Work = init_work(ExportedFuns),
@@ -2740,12 +2800,14 @@ state__add_warning(#state{warnings = Warnings, warning_mode = true} = State,
case Force of
true ->
Warn = {Tag, {get_file(Ann), abs(get_line(Ann))}, Msg},
+ ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
State#state{warnings = [Warn|Warnings]};
false ->
case is_compiler_generated(Ann) of
true -> State;
false ->
Warn = {Tag, {get_file(Ann), get_line(Ann)}, Msg},
+ ?debug("MSG ~s\n", [dialyzer:format_warning(Warn)]),
State#state{warnings = [Warn|Warnings]}
end
end.
@@ -2875,10 +2937,10 @@ build_tree_map(Tree) ->
end,
cerl_trees:fold(Fun, dict:new(), Tree).
-init_fun_tab([top|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
+init_fun_tab([top|Left], Dict, TreeMap, Callgraph, Plt) ->
NewDict = dict:store(top, {[], t_none()}, Dict),
- init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt, Opaques);
-init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
+ init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt);
+init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt) ->
Arity = cerl:fun_arity(dict:fetch(Fun, TreeMap)),
FunEntry =
case dialyzer_callgraph:is_escaping(Fun, Callgraph) of
@@ -2895,8 +2957,8 @@ init_fun_tab([Fun|Left], Dict, TreeMap, Callgraph, Plt, Opaques) ->
false -> {not_handled, {lists:duplicate(Arity, t_none()), t_unit()}}
end,
NewDict = dict:store(Fun, FunEntry, Dict),
- init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt, Opaques);
-init_fun_tab([], Dict, _TreeMap, _Callgraph, _Plt, _Opaques) ->
+ init_fun_tab(Left, NewDict, TreeMap, Callgraph, Plt);
+init_fun_tab([], Dict, _TreeMap, _Callgraph, _Plt) ->
?debug("DICT:~p\n",[dict:to_list(Dict)]),
Dict.
@@ -2945,34 +3007,27 @@ state__update_fun_entry(Tree, ArgTypes, Out0,
if Fun =:= top -> Out0;
true ->
case lookup_fun_sig(Fun, CG, Plt) of
- {value, {SigRet, _}} -> t_inf(SigRet, Out0, opaque);
+ {value, {SigRet, _}} -> t_inf(SigRet, Out0);
none -> Out0
end
end,
Out = t_limit(Out1, ?TYPE_LIMIT),
- case dict:find(Fun, FunTab) of
- {ok, {ArgTypes, OldOut}} ->
- case t_is_equal(OldOut, Out) of
- true ->
- ?debug("Fixpoint for ~w: ~s\n",
- [state__lookup_name(Fun, State),
- t_to_string(t_fun(ArgTypes, Out))]),
- State;
- false ->
- NewEntry = {ArgTypes, Out},
- ?debug("New Entry for ~w: ~s\n",
- [state__lookup_name(Fun, State),
- t_to_string(t_fun(ArgTypes, Out))]),
- NewFunTab = dict:store(Fun, NewEntry, FunTab),
- State1 = State#state{fun_tab = NewFunTab},
- state__add_work_from_fun(Tree, State1)
- end;
- {ok, {NewArgTypes, _OldOut}} ->
- %% Can only happen in self-recursive functions. Only update the out type.
- NewEntry = {NewArgTypes, Out},
+ {ok, {OldArgTypes, OldOut}} = dict:find(Fun, FunTab),
+ SameArgs = lists:all(fun({A, B}) -> erl_types:t_is_equal(A, B)
+ end, lists:zip(OldArgTypes, ArgTypes)),
+ SameOut = t_is_equal(OldOut, Out),
+ if
+ SameArgs, SameOut ->
+ ?debug("Fixpoint for ~w: ~s\n",
+ [state__lookup_name(Fun, State),
+ t_to_string(t_fun(ArgTypes, Out))]),
+ State;
+ true ->
+ %% Can only happen in self-recursive functions.
+ NewEntry = {OldArgTypes, Out},
?debug("New Entry for ~w: ~s\n",
[state__lookup_name(Fun, State),
- t_to_string(t_fun(NewArgTypes, Out))]),
+ t_to_string(t_fun(OldArgTypes, Out))]),
NewFunTab = dict:store(Fun, NewEntry, FunTab),
State1 = State#state{fun_tab = NewFunTab},
state__add_work_from_fun(Tree, State1)
@@ -2993,7 +3048,7 @@ state__add_work_from_fun(Tree, #state{callgraph = Callgraph,
%% Must filter the result for results in this module.
FilteredList = [L || {ok, L} <- LabelList, dict:is_key(L, TreeMap)],
?debug("~w: Will try to add:~w\n",
- [state__lookup_name(get_label(Tree), State), MFAList]),
+ [state__lookup_name(Label, State), MFAList]),
lists:foldl(fun(L, AccState) ->
state__add_work(L, AccState)
end, State, FilteredList)
@@ -3054,7 +3109,8 @@ forward_args(Fun, ArgTypes, #state{work = Work, fun_tab = FunTab} = State) ->
case Fixpoint of
true -> State;
false ->
- NewArgTypes = [t_sup(X, Y) || {X, Y} <- lists:zip(ArgTypes, OldArgTypes)],
+ NewArgTypes = [t_sup(X, Y) ||
+ {X, Y} <- lists:zip(ArgTypes, OldArgTypes)],
NewWork = add_work(Fun, Work),
?debug("~w: forwarding args ~s\n",
[state__lookup_name(Fun, State),
@@ -3238,13 +3294,13 @@ format_field_diffs(RecConstruction, #state{records = R}) ->
-spec format_sig_args(erl_types:erl_type(), state()) -> string().
-format_sig_args(Type, #state{records = R}) ->
- SigArgs = t_fun_args(Type),
+format_sig_args(Type, #state{opaques = Opaques} = State) ->
+ SigArgs = t_fun_args(Type, Opaques),
case SigArgs of
[] -> "()";
[SArg|SArgs] ->
- lists:flatten("(" ++ t_to_string(SArg, R)
- ++ ["," ++ t_to_string(T, R) || T <- SArgs] ++ ")")
+ lists:flatten("(" ++ format_type(SArg, State)
+ ++ ["," ++ format_type(T, State) || T <- SArgs] ++ ")")
end.
format_cerl(Tree) ->
diff --git a/lib/dialyzer/src/dialyzer_dep.erl b/lib/dialyzer/src/dialyzer_dep.erl
index 1a477f4388..a81ea1a98b 100644
--- a/lib/dialyzer/src/dialyzer_dep.erl
+++ b/lib/dialyzer/src/dialyzer_dep.erl
@@ -58,7 +58,8 @@
%% separatedly.
%%
--spec analyze(cerl:c_module()) -> {dict(), ordset('external' | label()), dict()}.
+-spec analyze(cerl:c_module()) ->
+ {dict(), ordset('external' | label()), dict(), dict()}.
analyze(Tree) ->
%% io:format("Handling ~w\n", [cerl:atom_val(cerl:module_name(Tree))]),
@@ -181,6 +182,15 @@ traverse(Tree, Out, State, CurrentFun) ->
Args = cerl:tuple_es(Tree),
{List, State1} = traverse_list(Args, Out, State, CurrentFun),
{merge_outs(List), State1};
+ map ->
+ Args = cerl:map_es(Tree),
+ {List, State1} = traverse_list(Args, Out, State, CurrentFun),
+ {merge_outs(List), State1};
+ map_pair ->
+ Key = cerl:map_pair_key(Tree),
+ Val = cerl:map_pair_val(Tree),
+ {List, State1} = traverse_list([Key,Val], Out, State, CurrentFun),
+ {merge_outs(List), State1};
values ->
traverse_list(cerl:values_es(Tree), Out, State, CurrentFun);
var ->
diff --git a/lib/dialyzer/src/dialyzer_succ_typings.erl b/lib/dialyzer/src/dialyzer_succ_typings.erl
index 84379642bf..f0488b5ee3 100644
--- a/lib/dialyzer/src/dialyzer_succ_typings.erl
+++ b/lib/dialyzer/src/dialyzer_succ_typings.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -149,8 +149,10 @@ get_warnings(Callgraph, Plt, DocPlt, Codeserver,
NewState = InitState#st{no_warn_unused = NoWarnUnused},
Mods = dialyzer_callgraph:modules(NewState#st.callgraph),
MiniPlt = NewState#st.plt,
+ FindOpaques = lookup_and_find_opaques_fun(Codeserver),
CWarns =
- dialyzer_contracts:get_invalid_contract_warnings(Mods, Codeserver, MiniPlt),
+ dialyzer_contracts:get_invalid_contract_warnings(Mods, Codeserver,
+ MiniPlt, FindOpaques),
MiniDocPlt = dialyzer_plt:get_mini_plt(DocPlt),
ModWarns =
?timing(TimingServer, "warning",
@@ -261,7 +263,16 @@ refine_one_module(M, {CodeServer, Callgraph, Plt, _Solvers}) ->
FunTypes = get_fun_types_from_plt(AllFuns, Callgraph, Plt),
NewFunTypes =
dialyzer_dataflow:get_fun_types(ModCode, Plt, Callgraph, Records),
- case reached_fixpoint(FunTypes, NewFunTypes) of
+ Contracts1 = dialyzer_codeserver:lookup_mod_contracts(M, CodeServer),
+ Contracts = orddict:from_list(dict:to_list(Contracts1)),
+ FindOpaques = find_opaques_fun(Records),
+ DecoratedFunTypes =
+ decorate_succ_typings(Contracts, Callgraph, NewFunTypes, FindOpaques),
+ %% ?debug("NewFunTypes ~p\n ~n", [dict:to_list(NewFunTypes)]),
+ %% ?debug("refine DecoratedFunTypes ~p\n ~n", [dict:to_list(DecoratedFunTypes)]),
+ debug_pp_functions("Refine", NewFunTypes, DecoratedFunTypes, Callgraph),
+
+ case reached_fixpoint(FunTypes, DecoratedFunTypes) of
true -> [];
{false, NotFixpoint} ->
?debug("Not fixpoint\n", []),
@@ -357,9 +368,16 @@ find_succ_types_for_scc(SCC, {Codeserver, Callgraph, Plt, Solvers}) ->
AllFunSet = sets:from_list([X || {X, _} <- AllFuns]),
FilteredFunTypes =
dict:filter(fun(X, _) -> sets:is_element(X, AllFunSet) end, FunTypes),
+ FindOpaques = lookup_and_find_opaques_fun(Codeserver),
+ DecoratedFunTypes =
+ decorate_succ_typings(Contracts3, Callgraph, FilteredFunTypes, FindOpaques),
%% Check contracts
PltContracts =
- dialyzer_contracts:check_contracts(Contracts3, Callgraph, FilteredFunTypes),
+ dialyzer_contracts:check_contracts(Contracts3, Callgraph,
+ DecoratedFunTypes, FindOpaques),
+ %% ?debug("FilteredFunTypes ~p\n ~n", [dict:to_list(FilteredFunTypes)]),
+ %% ?debug("SCC DecoratedFunTypes ~p\n ~n", [dict:to_list(DecoratedFunTypes)]),
+ debug_pp_functions("SCC", FilteredFunTypes, DecoratedFunTypes, Callgraph),
ContractFixpoint =
lists:all(fun({MFA, _C}) ->
%% Check the non-deleted PLT
@@ -368,16 +386,47 @@ find_succ_types_for_scc(SCC, {Codeserver, Callgraph, Plt, Solvers}) ->
{value, _} -> true
end
end, PltContracts),
- Plt = insert_into_plt(FilteredFunTypes, Callgraph, Plt),
+ Plt = insert_into_plt(DecoratedFunTypes, Callgraph, Plt),
Plt = dialyzer_plt:insert_contract_list(Plt, PltContracts),
case (ContractFixpoint andalso
- reached_fixpoint_strict(PropTypes, FilteredFunTypes)) of
+ reached_fixpoint_strict(PropTypes, DecoratedFunTypes)) of
true -> [];
false ->
?debug("Not fixpoint for: ~w\n", [AllFuns]),
[Fun || {Fun, _Arity} <- AllFuns]
end.
+decorate_succ_typings(Contracts, Callgraph, FunTypes, FindOpaques) ->
+ F = fun(Label, Type) ->
+ case dialyzer_callgraph:lookup_name(Label, Callgraph) of
+ {ok, MFA} ->
+ case orddict:find(MFA, Contracts) of
+ {ok, {_FileLine, Contract}} ->
+ Args = dialyzer_contracts:get_contract_args(Contract),
+ Ret = dialyzer_contracts:get_contract_return(Contract),
+ C = erl_types:t_fun(Args, Ret),
+ {M, _, _} = MFA,
+ Opaques = FindOpaques(M),
+ erl_types:t_decorate_with_opaque(Type, C, Opaques);
+ error -> Type
+ end;
+ error -> Type
+ end
+ end,
+ dict:map(F, FunTypes).
+
+lookup_and_find_opaques_fun(Codeserver) ->
+ fun(Module) ->
+ Records = dialyzer_codeserver:lookup_mod_records(Module, Codeserver),
+ (find_opaques_fun(Records))(Module)
+ end.
+
+find_opaques_fun(Records) ->
+ fun(Module) ->
+ erl_types:module_builtin_opaques(Module) ++
+ erl_types:t_opaque_from_records(Records)
+ end.
+
get_fun_types_from_plt(FunList, Callgraph, Plt) ->
get_fun_types_from_plt(FunList, Callgraph, Plt, dict:new()).
@@ -443,9 +492,30 @@ debug_pp_succ_typings(SuccTypes) ->
|| {MFA, {contract, RetFun, ArgT}} <- SuccTypes],
?debug("\n", []),
ok.
+
+debug_pp_functions(Header, FunTypes, DecoratedFunTypes, Callgraph) ->
+ ?debug("FunTypes (~s)\n", [Header]),
+ FTypes = lists:keysort(1, dict:to_list(FunTypes)),
+ DTypes = lists:keysort(1, dict:to_list(DecoratedFunTypes)),
+ Fun = fun({{Label, Type},{Label, DecoratedType}}) ->
+ Name = lookup_name(Label, Callgraph),
+ ?debug("~w (~w): ~s\n",
+ [Name, Label, erl_types:t_to_string(Type)]),
+ case erl_types:t_is_equal(Type, DecoratedType) of
+ true -> ok;
+ false ->
+ ?debug(" With opaque types: ~s\n",
+ [erl_types:t_to_string(DecoratedType)])
+ end
+ end,
+ lists:foreach(Fun, lists:zip(FTypes, DTypes)),
+ ?debug("\n", []).
-else.
debug_pp_succ_typings(_) ->
ok.
+
+debug_pp_functions(_, _, _, _) ->
+ ok.
-endif.
lookup_name(F, CG) ->
diff --git a/lib/dialyzer/src/dialyzer_typesig.erl b/lib/dialyzer/src/dialyzer_typesig.erl
index a418a11e65..b4b3d5a092 100644
--- a/lib/dialyzer/src/dialyzer_typesig.erl
+++ b/lib/dialyzer/src/dialyzer_typesig.erl
@@ -2,7 +2,7 @@
%%-----------------------------------------------------------------------
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2006-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2006-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -31,29 +31,33 @@
-export([analyze_scc/6]).
-export([get_safe_underapprox/2]).
+%%-import(helper, %% 'helper' could be any module doing sanity checks...
+-import(erl_types,
+ [t_has_var/1, t_inf/2, t_is_equal/2, t_is_subtype/2,
+ t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,t_unify/2]).
+
-import(erl_types,
[t_any/0, t_atom/0, t_atom_vals/1,
t_binary/0, t_bitstr/0, t_bitstr/2, t_bitstr_concat/1, t_boolean/0,
t_collect_vars/1, t_cons/2, t_cons_hd/1, t_cons_tl/1,
t_float/0, t_from_range/2, t_from_term/1,
t_fun/0, t_fun/2, t_fun_args/1, t_fun_range/1,
- t_has_var/1,
- t_inf/2, t_inf/3, t_integer/0,
- t_is_any/1, t_is_atom/1, t_is_atom/2, t_is_cons/1, t_is_equal/2,
+ t_integer/0,
+ t_is_any/1, t_is_atom/1, t_is_any_atom/2, t_is_cons/1,
t_is_float/1, t_is_fun/1,
t_is_integer/1, t_non_neg_integer/0,
t_is_list/1, t_is_nil/1, t_is_none/1, t_is_number/1,
- t_is_subtype/2, t_limit/2, t_list/0, t_list/1,
+ t_limit/2, t_list/0, t_list/1,
t_list_elements/1, t_nonempty_list/1, t_maybe_improper_list/0,
t_module/0, t_number/0, t_number_vals/1,
- t_opaque_match_record/2, t_opaque_matching_structure/2,
- t_opaque_from_records/1,
t_pid/0, t_port/0, t_product/1, t_reference/0,
- t_subst/2, t_subtract/2, t_subtract_list/2, t_sup/1, t_sup/2,
+ t_subst/2,
t_timeout/0, t_tuple/0, t_tuple/1,
- t_unify/3, t_var/1, t_var_name/1,
- t_none/0, t_unit/0]).
+ t_var/1, t_var_name/1,
+ t_none/0, t_unit/0,
+ t_map/1
+ ]).
-include("dialyzer.hrl").
@@ -105,11 +109,10 @@
module :: module(),
name_map = dict:new() :: dict(),
next_label = 0 :: label(),
- self_rec :: erl_types:erl_type(),
+ self_rec :: 'false' | erl_types:erl_type(),
plt :: dialyzer_plt:plt(),
prop_types = {'d', dict:new()} :: dict_or_ets(),
records = dict:new() :: dict(),
- opaques = [] :: [erl_types:erl_type()],
scc = [] :: [type_var()],
mfas :: [tuple()],
solvers = [] :: [solver()]
@@ -192,11 +195,10 @@ solvers(Solvers) -> Solvers.
%%
%% ============================================================================
-traverse_scc([{MFA, Def, Rec}|Left], DefSet, AccState) ->
+traverse_scc([{_MFA, Def, Rec}|Left], DefSet, AccState) ->
TmpState1 = state__set_rec_dict(AccState, Rec),
- TmpState2 = state__set_opaques(TmpState1, MFA),
DummyLetrec = cerl:c_letrec([Def], cerl:c_atom(foo)),
- {NewAccState, _} = traverse(DummyLetrec, DefSet, TmpState2),
+ {NewAccState, _} = traverse(DummyLetrec, DefSet, TmpState1),
traverse_scc(Left, DefSet, NewAccState);
traverse_scc([], _DefSet, AccState) ->
AccState.
@@ -386,12 +388,7 @@ traverse(Tree, DefinedVars, State) ->
case cerl:unfold_literal(Tree) of
Tree ->
Type = t_from_term(cerl:concrete(Tree)),
- NewType =
- case erl_types:t_opaque_match_atom(Type, State#state.opaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end,
- {State, NewType};
+ {State, Type};
NewTree -> traverse(NewTree, DefinedVars, State)
end;
module ->
@@ -462,27 +459,21 @@ traverse(Tree, DefinedVars, State) ->
[Tag|Fields] ->
case cerl:is_c_atom(Tag) of
true ->
- %% Check if an opaque term is constructed.
- case t_opaque_match_record(TupleType, State#state.opaques) of
- [Opaque] ->
- OpStruct = t_opaque_matching_structure(TupleType, Opaque),
- State3 = state__store_conj(TupleType, sub, OpStruct, State2),
- {State3, Opaque};
- %% Check if a record is constructed.
- _ ->
- Arity = length(Fields),
- Records = State2#state.records,
- case lookup_record(Records, cerl:atom_val(Tag), Arity) of
- error -> {State2, TupleType};
- {ok, RecType} ->
- State3 = state__store_conj(TupleType, sub, RecType, State2),
- {State3, TupleType}
- end
- end;
+ %% Check if a record is constructed.
+ Arity = length(Fields),
+ Records = State2#state.records,
+ case lookup_record(Records, cerl:atom_val(Tag), Arity) of
+ error -> {State2, TupleType};
+ {ok, RecType} ->
+ State3 = state__store_conj(TupleType, sub, RecType, State2),
+ {State3, TupleType}
+ end;
false -> {State2, TupleType}
- end;
+ end;
[] -> {State2, TupleType}
end;
+ map ->
+ {State, t_map([])};
values ->
%% We can get into trouble when unifying products that have the
%% same element appearing several times. Handle these cases by
@@ -591,9 +582,13 @@ handle_try(Tree, DefinedVars, State) ->
case state__is_in_guard(State) of
true ->
Conj1 = mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(BodyVar, eq, TreeVar)]),
+ mk_constraint(BodyVar,
+ eq,
+ TreeVar)]),
Disj = mk_disj_constraint_list([Conj1,
- mk_constraint(HandlerVar, eq, TreeVar)]),
+ mk_constraint(HandlerVar,
+ eq,
+ TreeVar)]),
NewState1 = state__new_constraint_context(HandlerState),
Conj2 = mk_conj_constraint_list([OldCs, Disj]),
NewState2 = state__store_conj(Conj2, NewState1),
@@ -604,19 +599,27 @@ handle_try(Tree, DefinedVars, State) ->
{false, false} ->
Conj1 =
mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(TreeVar, eq, BodyVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ BodyVar)]),
Conj2 =
mk_conj_constraint_list([HandlerCs,
- mk_constraint(TreeVar, eq, HandlerVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ HandlerVar)]),
Disj = mk_disj_constraint_list([Conj1, Conj2]),
{Disj, TreeVar};
{false, true} ->
{mk_conj_constraint_list([ArgBodyCs,
- mk_constraint(TreeVar, eq, BodyVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ BodyVar)]),
BodyVar};
{true, false} ->
{mk_conj_constraint_list([HandlerCs,
- mk_constraint(TreeVar, eq, HandlerVar)]),
+ mk_constraint(TreeVar,
+ eq,
+ HandlerVar)]),
HandlerVar};
{true, true} ->
?debug("Throw failed\n", []),
@@ -668,10 +671,7 @@ handle_call(Call, DefinedVars, State) ->
get_plt_constr(MFA, Dst, ArgVars, State) ->
Plt = state__plt(State),
PltRes = dialyzer_plt:lookup(Plt, MFA),
- Opaques = State#state.opaques,
- Module = State#state.module,
SCCMFAs = State#state.mfas,
- {FunModule, _, _} = MFA,
Contract =
case lists:member(MFA, SCCMFAs) of
true -> none;
@@ -691,28 +691,24 @@ get_plt_constr(MFA, Dst, ArgVars, State) ->
none ->
{?mk_fun_var(fun(Map) ->
ArgTypes = lookup_type_list(ArgVars, Map),
- dialyzer_contracts:get_contract_return(C, ArgTypes)
+ get_contract_return(C, ArgTypes)
end, ArgVars), GenArgs};
{value, {PltRetType, PltArgTypes}} ->
%% Need to combine the contract with the success typing.
{?mk_fun_var(
fun(Map) ->
- ArgTypes0 = lookup_type_list(ArgVars, Map),
- ArgTypes = case FunModule =:= Module of
- false ->
- List = lists:zip(PltArgTypes, ArgTypes0),
- [erl_types:t_unopaque_on_mismatch(T1, T2, Opaques)
- || {T1, T2} <- List];
- true -> ArgTypes0
- end,
- CRet = dialyzer_contracts:get_contract_return(C, ArgTypes),
- t_inf(CRet, PltRetType, opaque)
+ ArgTypes = lookup_type_list(ArgVars, Map),
+ CRet = get_contract_return(C, ArgTypes),
+ t_inf(CRet, PltRetType)
end, ArgVars),
- [t_inf(X, Y, opaque) || {X, Y} <- lists:zip(GenArgs, PltArgTypes)]}
+ [t_inf(X, Y) || {X, Y} <- lists:zip(GenArgs, PltArgTypes)]}
end,
state__store_conj_lists([Dst|ArgVars], sub, [RetType|ArgCs], State)
end.
+get_contract_return(C, ArgTypes) ->
+ dialyzer_contracts:get_contract_return(C, ArgTypes).
+
filter_match_fail([Clause] = Cls) ->
Body = cerl:clause_body(Clause),
case cerl:type(Body) of
@@ -1045,6 +1041,9 @@ get_safe_underapprox_1([Pat|Left], Acc, Map) ->
{Ts, Map1} = get_safe_underapprox_1(Es, [], Map),
Type = t_tuple(Ts),
get_safe_underapprox_1(Left, [Type|Acc], Map1);
+ map ->
+ %% TODO: Can maybe do something here
+ throw(dont_know);
values ->
Es = cerl:values_es(Pat),
{Ts, Map1} = get_safe_underapprox_1(Es, [], Map),
@@ -1086,7 +1085,7 @@ get_bif_constr({erlang, Op, 2}, Dst, Args = [Arg1, Arg2], _State)
when Op =:= '+'; Op =:= '-'; Op =:= '*' ->
ReturnType = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, Op, 2, TmpArgTypes)
+ bif_return(erlang, Op, 2, TmpArgTypes)
end, Args),
ArgFun =
fun(A, Pos) ->
@@ -1128,8 +1127,8 @@ get_bif_constr({erlang, Op, 2}, Dst, [Arg1, Arg2] = Args, _State)
fun(LocalArg1, LocalArg2, LocalOp) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- IsTrue = t_is_atom(true, DstType),
- IsFalse = t_is_atom(false, DstType),
+ IsTrue = t_is_any_atom(true, DstType),
+ IsFalse = t_is_any_atom(false, DstType),
case IsTrue orelse IsFalse of
true ->
Arg1Type = lookup_type(LocalArg1, Map),
@@ -1176,7 +1175,7 @@ get_bif_constr({erlang, Op, 2}, Dst, [Arg1, Arg2] = Args, _State)
Arg2Var = ?mk_fun_var(Arg2Fun, DstArgs),
DstVar = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, Op, 2, TmpArgTypes)
+ bif_return(erlang, Op, 2, TmpArgTypes)
end, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstVar),
mk_constraint(Arg1, sub, Arg1Var),
@@ -1218,7 +1217,7 @@ get_bif_constr({erlang, '++', 2}, Dst, [Hd, Tl] = Args, _State) ->
ArgTypes = erl_bif_types:arg_types(erlang, '++', 2),
ReturnType = ?mk_fun_var(fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, '++', 2, TmpArgTypes)
+ bif_return(erlang, '++', 2, TmpArgTypes)
end, Args),
Cs = mk_constraints(Args, sub, ArgTypes),
mk_conj_constraint_list([mk_constraint(Dst, sub, ReturnType),
@@ -1240,7 +1239,7 @@ get_bif_constr({erlang, is_function, 1}, Dst, [Arg], State) ->
get_bif_constr({erlang, is_function, 2}, Dst, [Fun, Arity], _State) ->
ArgFun = fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
ArityType = lookup_type(Arity, Map),
case t_number_vals(ArityType) of
@@ -1268,7 +1267,7 @@ get_bif_constr({erlang, is_reference, 1}, Dst, [Arg], State) ->
get_bif_test_constr(Dst, Arg, t_reference(), State);
get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
ArgFun = fun(Map) ->
- case t_is_atom(true, lookup_type(Dst, Map)) of
+ case t_is_any_atom(true, lookup_type(Dst, Map)) of
true -> t_tuple();
false -> t_any()
end
@@ -1276,7 +1275,7 @@ get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
ArgV = ?mk_fun_var(ArgFun, [Dst]),
DstFun = fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, is_record, 2, TmpArgTypes)
+ bif_return(erlang, is_record, 2, TmpArgTypes)
end,
DstV = ?mk_fun_var(DstFun, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstV),
@@ -1285,10 +1284,9 @@ get_bif_constr({erlang, is_record, 2}, Dst, [Var, Tag] = Args, _State) ->
get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
%% TODO: Revise this to make it precise for Tag and Arity.
Records = State#state.records,
- AllOpaques = State#state.opaques,
ArgFun =
fun(Map) ->
- case t_is_atom(true, lookup_type(Dst, Map)) of
+ case t_is_any_atom(true, lookup_type(Dst, Map)) of
true ->
ArityType = lookup_type(Arity, Map),
case t_is_integer(ArityType) of
@@ -1304,10 +1302,7 @@ get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
[TagVal] ->
case lookup_record(Records, TagVal, ArityVal - 1) of
{ok, Type} ->
- case t_opaque_match_record(Type, AllOpaques) of
- [Opaque] -> Opaque;
- _ -> Type
- end;
+ Type;
error -> GenRecord
end;
_ -> GenRecord
@@ -1323,38 +1318,9 @@ get_bif_constr({erlang, is_record, 3}, Dst, [Var, Tag, Arity] = Args, State) ->
end,
ArgV = ?mk_fun_var(ArgFun, [Tag, Arity, Dst]),
DstFun = fun(Map) ->
- [TmpVar, TmpTag, TmpArity] = TmpArgTypes = lookup_type_list(Args, Map),
- TmpArgTypes2 =
- case lists:member(TmpVar, AllOpaques) of
- true ->
- case t_is_integer(TmpArity) of
- true ->
- case t_number_vals(TmpArity) of
- [TmpArityVal] ->
- case t_is_atom(TmpTag) of
- true ->
- case t_atom_vals(TmpTag) of
- [TmpTagVal] ->
- case lookup_record(Records, TmpTagVal,
- TmpArityVal - 1) of
- {ok, TmpType} ->
- case t_is_none(t_inf(TmpType, TmpVar, opaque)) of
- true -> TmpArgTypes;
- false -> [TmpType, TmpTag, TmpArity]
- end;
- error -> TmpArgTypes
- end;
- _ -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end;
- _ -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end;
- false -> TmpArgTypes
- end,
- erl_bif_types:type(erlang, is_record, 3, TmpArgTypes2)
+ [TmpVar, TmpTag, TmpArity] = lookup_type_list(Args, Map),
+ TmpArgTypes = [TmpVar,TmpTag,TmpArity],
+ bif_return(erlang, is_record, 3, TmpArgTypes)
end,
DstV = ?mk_fun_var(DstFun, Args),
mk_conj_constraint_list([mk_constraint(Dst, sub, DstV),
@@ -1369,12 +1335,14 @@ get_bif_constr({erlang, 'and', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
ArgFun = fun(Var) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> True;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true ->
- case t_is_atom(true, lookup_type(Var, Map)) of
+ case
+ t_is_any_atom(true, lookup_type(Var, Map))
+ of
true -> False;
false -> t_boolean()
end;
@@ -1386,15 +1354,15 @@ get_bif_constr({erlang, 'and', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
end,
DstFun = fun(Map) ->
Arg1Type = lookup_type(Arg1, Map),
- case t_is_atom(false, Arg1Type) of
+ case t_is_any_atom(false, Arg1Type) of
true -> False;
false ->
Arg2Type = lookup_type(Arg2, Map),
- case t_is_atom(false, Arg2Type) of
+ case t_is_any_atom(false, Arg2Type) of
true -> False;
false ->
- case (t_is_atom(true, Arg1Type)
- andalso t_is_atom(true, Arg2Type)) of
+ case (t_is_any_atom(true, Arg1Type)
+ andalso t_is_any_atom(true, Arg2Type)) of
true -> True;
false -> t_boolean()
end
@@ -1413,12 +1381,14 @@ get_bif_constr({erlang, 'or', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
ArgFun = fun(Var) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true -> False;
false ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
- case t_is_atom(false, lookup_type(Var, Map)) of
+ case
+ t_is_any_atom(false, lookup_type(Var, Map))
+ of
true -> True;
false -> t_boolean()
end;
@@ -1430,15 +1400,15 @@ get_bif_constr({erlang, 'or', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
end,
DstFun = fun(Map) ->
Arg1Type = lookup_type(Arg1, Map),
- case t_is_atom(true, Arg1Type) of
+ case t_is_any_atom(true, Arg1Type) of
true -> True;
false ->
Arg2Type = lookup_type(Arg2, Map),
- case t_is_atom(true, Arg2Type) of
+ case t_is_any_atom(true, Arg2Type) of
true -> True;
false ->
- case (t_is_atom(false, Arg1Type)
- andalso t_is_atom(false, Arg2Type)) of
+ case (t_is_any_atom(false, Arg1Type)
+ andalso t_is_any_atom(false, Arg2Type)) of
true -> False;
false -> t_boolean()
end
@@ -1465,10 +1435,10 @@ get_bif_constr({erlang, 'not', 1}, Dst, [Arg] = Args, _State) ->
Fun = fun(Var) ->
fun(Map) ->
Type = lookup_type(Var, Map),
- case t_is_atom(true, Type) of
+ case t_is_any_atom(true, Type) of
true -> False;
false ->
- case t_is_atom(false, Type) of
+ case t_is_any_atom(false, Type) of
true -> True;
false -> t_boolean()
end
@@ -1485,10 +1455,10 @@ get_bif_constr({erlang, '=:=', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
fun(Map) ->
DstType = lookup_type(Dst, Map),
OtherVarType = lookup_type(OtherVar, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> OtherVarType;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true ->
case is_singleton_type(OtherVarType) of
true -> t_subtract(lookup_type(Self, Map), OtherVarType);
@@ -1518,7 +1488,7 @@ get_bif_constr({erlang, '=:=', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
DstFun = fun(Map) ->
TmpArgTypes = lookup_type_list(Args, Map),
- erl_bif_types:type(erlang, '==', 2, TmpArgTypes)
+ bif_return(erlang, '==', 2, TmpArgTypes)
end,
ArgFun =
fun(Var, Self) ->
@@ -1527,16 +1497,16 @@ get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
DstType = lookup_type(Dst, Map),
case is_singleton_non_number_type(VarType) of
true ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> VarType;
false ->
- case t_is_atom(false, DstType) of
+ case t_is_any_atom(false, DstType) of
true -> t_subtract(lookup_type(Self, Map), VarType);
false -> t_any()
end
end;
false ->
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true ->
case t_is_number(VarType) of
true -> t_number();
@@ -1560,18 +1530,14 @@ get_bif_constr({erlang, '==', 2}, Dst, [Arg1, Arg2] = Args, _State) ->
mk_constraint(Arg1, sub, ArgV1),
mk_constraint(Arg2, sub, ArgV2)]);
get_bif_constr({erlang, element, 2} = _BIF, Dst, Args,
- #state{cs = Constrs, opaques = Opaques}) ->
+ #state{cs = Constrs}) ->
GenType = erl_bif_types:type(erlang, element, 2),
case t_is_none(GenType) of
true -> ?debug("Bif: ~w failed\n", [_BIF]), throw(error);
false ->
Fun = fun(Map) ->
- [I, T] = ATs = lookup_type_list(Args, Map),
- ATs2 = case lists:member(T, Opaques) of
- true -> [I, erl_types:t_opaque_structure(T)];
- false -> ATs
- end,
- erl_bif_types:type(erlang, element, 2, ATs2)
+ ATs2 = lookup_type_list(Args, Map),
+ bif_return(erlang, element, 2, ATs2)
end,
ReturnType = ?mk_fun_var(Fun, Args),
ArgTypes = erl_bif_types:arg_types(erlang, element, 2),
@@ -1583,22 +1549,14 @@ get_bif_constr({erlang, element, 2} = _BIF, Dst, Args,
end,
mk_conj_constraint_list([mk_constraint(Dst, sub, ReturnType)|NewCs])
end;
-get_bif_constr({M, F, A} = _BIF, Dst, Args, State) ->
+get_bif_constr({M, F, A} = _BIF, Dst, Args, _State) ->
GenType = erl_bif_types:type(M, F, A),
- Opaques = State#state.opaques,
case t_is_none(GenType) of
true -> ?debug("Bif: ~w failed\n", [_BIF]), throw(error);
false ->
- UnopaqueFun =
- fun(T) -> case lists:member(T, Opaques) of
- true -> erl_types:t_unopaque(T, [T]);
- false -> T
- end
- end,
ReturnType = ?mk_fun_var(fun(Map) ->
- TmpArgTypes0 = lookup_type_list(Args, Map),
- TmpArgTypes = [UnopaqueFun(T) || T<- TmpArgTypes0],
- erl_bif_types:type(M, F, A, TmpArgTypes)
+ TmpArgTypes = lookup_type_list(Args, Map),
+ bif_return(M, F, A, TmpArgTypes)
end, Args),
case erl_bif_types:is_known(M, F, A) of
false ->
@@ -1616,12 +1574,12 @@ get_bif_constr({M, F, A} = _BIF, Dst, Args, State) ->
end.
eval_inv_arith('+', _Pos, Dst, Arg) ->
- erl_bif_types:type(erlang, '-', 2, [Dst, Arg]);
+ bif_return(erlang, '-', 2, [Dst, Arg]);
eval_inv_arith('*', _Pos, Dst, Arg) ->
case t_number_vals(Arg) of
[0] -> t_integer();
_ ->
- TmpRet = erl_bif_types:type(erlang, 'div', 2, [Dst, Arg]),
+ TmpRet = bif_return(erlang, 'div', 2, [Dst, Arg]),
Zero = t_from_term(0),
%% If 0 is not part of the result, it cannot be part of the argument.
case t_is_subtype(Zero, Dst) of
@@ -1630,9 +1588,9 @@ eval_inv_arith('*', _Pos, Dst, Arg) ->
end
end;
eval_inv_arith('-', 1, Dst, Arg) ->
- erl_bif_types:type(erlang, '-', 2, [Arg, Dst]);
+ bif_return(erlang, '-', 2, [Arg, Dst]);
eval_inv_arith('-', 2, Dst, Arg) ->
- erl_bif_types:type(erlang, '+', 2, [Arg, Dst]).
+ bif_return(erlang, '+', 2, [Arg, Dst]).
range_inc(neg_inf) -> neg_inf;
range_inc(pos_inf) -> pos_inf;
@@ -1642,33 +1600,20 @@ range_dec(neg_inf) -> neg_inf;
range_dec(pos_inf) -> pos_inf;
range_dec(Int) when is_integer(Int) -> Int - 1.
-get_bif_test_constr(Dst, Arg, Type, State) ->
+get_bif_test_constr(Dst, Arg, Type, _State) ->
ArgFun = fun(Map) ->
DstType = lookup_type(Dst, Map),
- case t_is_atom(true, DstType) of
+ case t_is_any_atom(true, DstType) of
true -> Type;
false -> t_any()
end
end,
ArgV = ?mk_fun_var(ArgFun, [Dst]),
- Opaques = State#state.opaques,
DstFun = fun(Map) ->
ArgType = lookup_type(Arg, Map),
case t_is_none(t_inf(ArgType, Type)) of
true ->
- case lists:member(ArgType, Opaques) of
- true ->
- OpaqueStruct = erl_types:t_opaque_structure(ArgType),
- case t_is_none(t_inf(OpaqueStruct, Type)) of
- true -> t_from_term(false);
- false ->
- case t_is_subtype(ArgType, Type) of
- true -> t_from_term(true);
- false -> t_boolean()
- end
- end;
- false -> t_from_term(false)
- end;
+ t_from_term(false);
false ->
case t_is_subtype(ArgType, Type) of
true -> t_from_term(true);
@@ -1784,7 +1729,6 @@ minimize_state(#state{
fun_arities = FunArities,
self_rec = SelfRec,
prop_types = {d, PropTypes},
- opaques = Opaques,
solvers = Solvers
}) ->
Opts = [{read_concurrency, true}],
@@ -1798,7 +1742,6 @@ minimize_state(#state{
fun_arities = FunArities,
self_rec = SelfRec,
prop_types = {e, ETSPropTypes},
- opaques = Opaques,
solvers = Solvers
}.
@@ -1956,8 +1899,7 @@ v2_solve_ref(Fun, Map, State) ->
{ok, NewMap}.
v2_solve(#constraint{}=C, Map, V2State) ->
- State = V2State#v2_state.state,
- case solve_one_c(C, Map, State#state.opaques) of
+ case solve_one_c(C, Map) of
error ->
report_failed_constraint(C, Map),
{error, V2State};
@@ -2031,7 +1973,7 @@ v2_solve_self_recursive(Cs, Map, Id, RecType0, V2State0) ->
{ok, NewMap, V2State, U} ->
pp_map("recursive finished", NewMap),
NewRecType = unsafe_lookup_type(Id, NewMap),
- case t_is_equal(NewRecType, RecType0) of
+ case is_equal(NewRecType, RecType0) of
true ->
{NewMap2, U1} = enter_var_type(RecVar, NewRecType, NewMap),
{ok, NewMap2, V2State, lists:umerge(U, U1)};
@@ -2397,7 +2339,7 @@ solve_self_recursive(Cs, Map, MapDict, Id, RecType0, State) ->
{ok, NewMapDict, NewMap} ->
pp_map("NewMap", NewMap),
NewRecType = unsafe_lookup_type(Id, NewMap),
- case t_is_equal(NewRecType, RecType0) of
+ case is_equal(NewRecType, RecType0) of
true ->
{ok, NewMapDict, enter_type(RecVar, NewRecType, NewMap)};
false ->
@@ -2447,7 +2389,7 @@ solve_cs([#constraint_list{} = C|Tail], Map, MapDict, State) ->
{error, _NewMapDict} = Error -> Error
end;
solve_cs([#constraint{} = C|Tail], Map, MapDict, State) ->
- case solve_one_c(C, Map, State#state.opaques) of
+ case solve_one_c(C, Map) of
error ->
report_failed_constraint(C, Map),
{error, MapDict};
@@ -2457,10 +2399,10 @@ solve_cs([#constraint{} = C|Tail], Map, MapDict, State) ->
solve_cs([], Map, MapDict, _State) ->
{ok, MapDict, Map}.
-solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
+solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map) ->
LhsType = lookup_type(Lhs, Map),
RhsType = lookup_type(Rhs, Map),
- Inf = t_inf(LhsType, RhsType, opaque),
+ Inf = t_inf(LhsType, RhsType),
?debug("Solving: ~s :: ~s ~w ~s :: ~s\n\tInf: ~s\n",
[format_type(Lhs), format_type(LhsType), Op,
format_type(Rhs), format_type(RhsType), format_type(Inf)]),
@@ -2468,12 +2410,12 @@ solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
true -> error;
false ->
case Op of
- sub -> solve_subtype(Lhs, Inf, Map, Opaques);
+ sub -> solve_subtype(Lhs, Inf, Map);
eq ->
- case solve_subtype(Lhs, Inf, Map, Opaques) of
+ case solve_subtype(Lhs, Inf, Map) of
error -> error;
{ok, {Map1, U1}} ->
- case solve_subtype(Rhs, Inf, Map1, Opaques) of
+ case solve_subtype(Rhs, Inf, Map1) of
error -> error;
{ok, {Map2, U2}} -> {ok, {Map2, lists:umerge(U1, U2)}}
end
@@ -2481,7 +2423,7 @@ solve_one_c(#constraint{lhs = Lhs, rhs = Rhs, op = Op}, Map, Opaques) ->
end
end.
-solve_subtype(Type, Inf, Map, Opaques) ->
+solve_subtype(Type, Inf, Map) ->
%% case cerl:is_literal(Type) of
%% true ->
%% case t_is_subtype(t_from_term(cerl:concrete(Type)), Inf) of
@@ -2489,7 +2431,7 @@ solve_subtype(Type, Inf, Map, Opaques) ->
%% false -> error
%% end;
%% false ->
- try t_unify(Type, Inf, Opaques) of
+ try t_unify(Type, Inf) of
{_, List} -> {ok, enter_type_list(List, Map)}
catch
throw:{mismatch, _T1, _T2} ->
@@ -2540,7 +2482,7 @@ join_one_key(Key, [Map|Maps], Type) ->
true -> Type;
false ->
NewType = lookup_type(Key, Map),
- case t_is_equal(NewType, Type) of
+ case is_equal(NewType, Type) of
true -> join_one_key(Key, Maps, Type);
false -> join_one_key(Key, Maps, t_sup(NewType, Type))
end
@@ -2555,7 +2497,7 @@ maps_are_equal(Map1, Map2, Deps) ->
maps_are_equal_1(Map1, Map2, [H|Tail]) ->
T1 = lookup_type(H, Map1),
T2 = lookup_type(H, Map2),
- case t_is_equal(T1, T2) of
+ case is_equal(T1, T2) of
true -> maps_are_equal_1(Map1, Map2, Tail);
false ->
?debug("~w: ~s =/= ~s\n", [H, format_type(T1), format_type(T2)]),
@@ -2587,14 +2529,20 @@ prune_keys(Map1, Map2, Deps) ->
enter_type(Key, Val, Map) when is_integer(Key) ->
?debug("Entering ~s :: ~s\n", [format_type(t_var(Key)), format_type(Val)]),
- case t_is_any(Val) of
+ %% Keep any() in the map if it is opaque:
+ case is_equal(Val, t_any()) of
true ->
erase_type(Key, Map);
false ->
LimitedVal = t_limit(Val, ?INTERNAL_TYPE_LIMIT),
+ [?debug("LimitedVal ~s\n", [format_type(LimitedVal)]) ||
+ not is_equal(LimitedVal, Val)],
case dict:find(Key, Map) of
- {ok, LimitedVal} -> Map;
- {ok, _} -> map_store(Key, LimitedVal, Map);
+ {ok, Value} ->
+ case is_equal(Value, LimitedVal) of
+ true -> Map;
+ false -> map_store(Key, LimitedVal, Map)
+ end;
error -> map_store(Key, LimitedVal, Map)
end
end;
@@ -2681,7 +2629,10 @@ updated_vars_only(U, OldMap, NewMap) ->
[V || V <- U, not is_same(V, OldMap, NewMap)].
is_same(Key, Map1, Map2) ->
- t_is_equal(lookup_type(Key, Map1), lookup_type(Key, Map2)).
+ is_equal(lookup_type(Key, Map1), lookup_type(Key, Map2)).
+
+is_equal(Type1, Type2) ->
+ t_is_equal(Type1, Type2).
pp_map(_S, _Map) ->
?debug("\t~s: ~p\n",
@@ -2716,11 +2667,6 @@ new_state(SCC0, NextLabel, CallGraph, Plt, PropTypes, Solvers) ->
state__set_rec_dict(State, RecDict) ->
State#state{records = RecDict}.
-state__set_opaques(#state{records = RecDict} = State, {M, _F, _A}) ->
- Opaques =
- erl_types:module_builtin_opaques(M) ++ t_opaque_from_records(RecDict),
- State#state{opaques = Opaques, module = M}.
-
state__set_in_match(State, Bool) ->
State#state{in_match = Bool}.
@@ -2760,7 +2706,8 @@ state__lookup_undef_var(Tree, #state{callgraph = CG, plt = Plt}) ->
{ok, MFA} ->
case dialyzer_plt:lookup(Plt, MFA) of
none -> error;
- {value, {RetType, ArgTypes}} -> {ok, t_fun(ArgTypes, RetType)}
+ {value, {RetType, ArgTypes}} ->
+ {ok, t_fun(ArgTypes, RetType)}
end
end.
@@ -2897,7 +2844,7 @@ state__get_cs(Var, #state{cmap = {d, Dict}}) ->
dict:fetch(Var, Dict).
state__is_self_rec(Fun, #state{self_rec = SelfRec}) ->
- Fun =:= SelfRec.
+ not (SelfRec =:= 'false') andalso is_equal(Fun, SelfRec).
state__store_funs(Vars0, Funs0, #state{fun_map = Map} = State) ->
debug_make_name_map(Vars0, Funs0),
@@ -2923,7 +2870,9 @@ state__finalize(State) ->
%%
%% ============================================================================
--spec mk_constraint(erl_types:erl_type(), constr_op(), fvar_or_type()) -> #constraint{}.
+-spec mk_constraint(erl_types:erl_type(),
+ constr_op(),
+ fvar_or_type()) -> #constraint{}.
mk_constraint(Lhs, Op, Rhs) ->
case t_is_any(Lhs) orelse constraint_opnd_is_any(Rhs) of
@@ -2934,9 +2883,9 @@ mk_constraint(Lhs, Op, Rhs) ->
case Deps =:= [] of
true ->
%% This constraint is constant. Solve it immediately.
- case solve_one_c(C, map_new(), []) of
+ case solve_one_c(C, map_new()) of
error -> throw(error);
- _ ->
+ _R ->
%% This is always true, keep it anyway for logistic reasons
C
end;
@@ -2944,10 +2893,13 @@ mk_constraint(Lhs, Op, Rhs) ->
C
end;
true ->
- C = mk_constraint_1(t_any(), Op, t_any()),
- C#constraint{deps = []}
+ mk_constraint_any(Op)
end.
+mk_constraint_any(Op) ->
+ C = mk_constraint_1(t_any(), Op, t_any()),
+ C#constraint{deps = []}.
+
%% the following function is used so that we do not call
%% erl_types:t_is_any/1 with a term other than an erl_type()
-spec constraint_opnd_is_any(fvar_or_type()) -> boolean().
@@ -3002,7 +2954,8 @@ mk_constraint_1(Lhs, Op, Rhs) ->
#constraint{lhs = Lhs, op = Op, rhs = Rhs}.
mk_constraints([Lhs|LhsTail], Op, [Rhs|RhsTail]) ->
- [mk_constraint(Lhs, Op, Rhs)|mk_constraints(LhsTail, Op, RhsTail)];
+ [mk_constraint(Lhs, Op, Rhs) |
+ mk_constraints(LhsTail, Op, RhsTail)];
mk_constraints([], _Op, []) ->
[].
@@ -3017,7 +2970,7 @@ mk_constraint_list(Type, List) ->
Deps = calculate_deps(List2),
case Deps =:= [] of
true -> #constraint_list{type = conj,
- list = [mk_constraint(t_any(), eq, t_any())],
+ list = [mk_constraint_any(eq)],
deps = []};
false -> #constraint_list{type = Type, list = List2, deps = Deps}
end.
@@ -3236,6 +3189,9 @@ calculate_masks([], _I, L) ->
%%
%% ============================================================================
+bif_return(M, F, A, Xs) ->
+ erl_bif_types:type(M, F, A, Xs).
+
is_singleton_non_number_type(Type) ->
case t_is_number(Type) of
true -> false;
@@ -3265,7 +3221,7 @@ is_singleton_type(Type) ->
find_element(Args, Cs) ->
[Pos, Tuple] = Args,
- case erl_types:t_is_number(Pos) of
+ case t_is_number(Pos) of
true ->
case erl_types:t_number_vals(Pos) of
'unknown' -> 'unknown';
@@ -3301,8 +3257,10 @@ find_constraint(Tuple, [_|Cs]) ->
lookup_record(Records, Tag, Arity) ->
case erl_types:lookup_record(Tag, Arity, Records) of
{ok, Fields} ->
- {ok, t_tuple([t_from_term(Tag)|
- [FieldType || {_FieldName, FieldType} <- Fields]])};
+ RecType =
+ t_tuple([t_from_term(Tag)|
+ [FieldType || {_FieldName, FieldType} <- Fields]]),
+ {ok, RecType};
error ->
error
end.
diff --git a/lib/dialyzer/test/Makefile b/lib/dialyzer/test/Makefile
index 9f8a3f1194..27cabc8ef8 100644
--- a/lib/dialyzer/test/Makefile
+++ b/lib/dialyzer/test/Makefile
@@ -7,6 +7,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
AUXILIARY_FILES=\
dialyzer.spec\
+ dialyzer.cover\
dialyzer_test_constants.hrl\
dialyzer_common.erl\
file_utils.erl\
diff --git a/lib/dialyzer/test/dialyzer.cover b/lib/dialyzer/test/dialyzer.cover
new file mode 100644
index 0000000000..cc61ea1901
--- /dev/null
+++ b/lib/dialyzer/test/dialyzer.cover
@@ -0,0 +1,3 @@
+%% -*- erlang -*-
+{incl_app,dialyzer,details}.
+%{incl_mods,dialyzer,[erl_types,erl_bif_types]}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/crash b/lib/dialyzer/test/opaque_SUITE_data/results/crash
index 1ddae5149f..69bdc00257 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/crash
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/crash
@@ -1,6 +1,6 @@
crash_1.erl:45: Record construction #targetlist{list::[]} violates the declared type of field list::'undefined' | crash_1:target()
-crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::'undefined' | crash_1:target()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+crash_1.erl:48: The call crash_1:get_using_branch2(Branch::maybe_improper_list(),L::'undefined' | crash_1:target()) will never return since it differs in the 2nd argument from the success typing arguments: (any(),maybe_improper_list())
crash_1.erl:50: The pattern <_Branch, []> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
crash_1.erl:52: The pattern <Branch, [H = {'target', _, _} | _T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
crash_1.erl:54: The pattern <Branch, [{'target', _, _} | T]> can never match the type <maybe_improper_list(),'undefined' | crash_1:target()>
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/ets b/lib/dialyzer/test/opaque_SUITE_data/results/ets
index 5498ba1538..e79696bc30 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/ets
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/ets
@@ -1,3 +1,4 @@
ets_use.erl:12: Guard test is_integer(T::atom() | tid()) breaks the opaqueness of its argument
+ets_use.erl:20: The type test is_integer(atom() | tid()) breaks the opaqueness of the term atom() | tid()
ets_use.erl:7: Guard test is_integer(T::tid()) breaks the opaqueness of its argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/ewgi b/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
index 3c8cfb59f8..5bc6b87fbb 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/ewgi
@@ -1,4 +1,4 @@
ewgi_api.erl:55: The call gb_trees:to_list({non_neg_integer(),'nil' | {_,_,_,_}}) does not have an opaque term of type gb_tree() as 1st argument
-ewgi_testapp.erl:35: The call ewgi_testapp:htmlise_data("request_data",{non_neg_integer(),'nil' | {_,_,_,_}}) will never return since it differs in the 2nd argument from the success typing arguments: ([95 | 97 | 100 | 101 | 104 | 112 | 113 | 114 | 115 | 116 | 117,...],[{_,_}])
+ewgi_testapp.erl:35: The call ewgi_testapp:htmlise_data("request_data",{non_neg_integer(),'nil' | {_,_,_,_}}) does not have a term of type [{_,_}] | gb_tree() (with opaque subterms) as 2nd argument
ewgi_testapp.erl:43: The call gb_trees:to_list(T::{non_neg_integer(),'nil' | {_,_,_,_}}) does not have an opaque term of type gb_tree() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1 b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
index eb8f304905..4fe5fcfe2d 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop1
@@ -2,4 +2,4 @@
inf_loop1.erl:119: The pattern [{_, LNorms}] can never match the type []
inf_loop1.erl:121: The pattern [{LinksA, LNormA}, {LinksB, LNormB}] can never match the type []
inf_loop1.erl:129: The pattern [{_, Norm} | _] can never match the type []
-inf_loop1.erl:71: The call gb_trees:get(Edge::any(),Etab::array()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+inf_loop1.erl:71: The call gb_trees:get(Edge::any(),Etab::array()) does not have an opaque term of type gb_tree() as 2nd argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2 b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2
new file mode 100644
index 0000000000..4f0b79eb35
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/inf_loop2
@@ -0,0 +1,5 @@
+
+inf_loop2.erl:122: The pattern [{_, LNorms}] can never match the type []
+inf_loop2.erl:124: The pattern [{LinksA, LNormA}, {LinksB, LNormB}] can never match the type []
+inf_loop2.erl:132: The pattern [{_, Norm} | _] can never match the type []
+inf_loop2.erl:74: The call gb_trees:get(Edge::any(),Etab::array()) does not have an opaque term of type gb_tree() as 2nd argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/int b/lib/dialyzer/test/opaque_SUITE_data/results/int
index 3ee4def34b..dc806fa12c 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/int
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/int
@@ -1,3 +1,3 @@
-int_adt.erl:28: Invalid type specification for function int_adt:add_f/2. The success typing is (number(),float()) -> number()
-int_adt.erl:32: Invalid type specification for function int_adt:div_f/2. The success typing is (number(),number()) -> float()
+int_adt.erl:28: Invalid type specification for function int_adt:add_f/2. The success typing is (number() | int_adt:int(),float()) -> number() | int_adt:int()
+int_adt.erl:32: Invalid type specification for function int_adt:div_f/2. The success typing is (number() | int_adt:int(),number() | int_adt:int()) -> float()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque b/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
index ab850b613e..0363be544d 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/mixed_opaque
@@ -1,2 +1,2 @@
-mixed_opaque_use.erl:31: The call mixed_opaque_rec_adt:get_a(Q::mixed_opaque_queue_adt:my_queue()) contains an opaque term as 1st argument when an opaque term of type mixed_opaque_rec_adt:rec() is expected
+mixed_opaque_use.erl:31: The call mixed_opaque_rec_adt:get_a(Q::mixed_opaque_queue_adt:my_queue()) does not have an opaque term of type mixed_opaque_rec_adt:rec() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/modules b/lib/dialyzer/test/opaque_SUITE_data/results/modules
new file mode 100644
index 0000000000..f71334b9de
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/modules
@@ -0,0 +1,3 @@
+
+opaque_digraph.erl:353: Cons will produce an improper list since its 2nd argument is number()
+opaque_digraph.erl:365: Cons will produce an improper list since its 2nd argument is number()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
index 2860b91084..1f25a6f9c3 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue
@@ -4,4 +4,4 @@ my_queue_use.erl:19: The call my_queue_adt:add(42,Q0::[]) does not have an opaqu
my_queue_use.erl:24: The attempt to match a term of type my_queue_adt:my_queue() against the pattern [42 | Q2] breaks the opaqueness of the term
my_queue_use.erl:30: Attempt to test for equality between a term of type [] and a term of opaque type my_queue_adt:my_queue()
my_queue_use.erl:34: Cons will produce an improper list since its 2nd argument is my_queue_adt:my_queue()
-my_queue_use.erl:34: The call my_queue_adt:dequeue(nonempty_improper_list(42,my_queue_adt:my_queue())) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument
+my_queue_use.erl:34: The call my_queue_adt:dequeue(nonempty_maybe_improper_list(42,my_queue_adt:my_queue())) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/opaque b/lib/dialyzer/test/opaque_SUITE_data/results/opaque
index ca76f57b54..5747f9061f 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/opaque
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/opaque
@@ -1,2 +1,3 @@
+opaque_bug3.erl:19: The pattern 'a' can never match the type #c{}
opaque_bug4.erl:20: The attempt to match a term of type opaque_adt:abc() against the pattern 'a' breaks the opaqueness of the term
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/queue b/lib/dialyzer/test/opaque_SUITE_data/results/queue
index c3f04ea64d..59ce33f098 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/queue
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/queue
@@ -5,7 +5,6 @@ queue_use.erl:27: The attempt to match a term of type queue() against the patter
queue_use.erl:33: Attempt to test for equality between a term of type {[42,...],[]} and a term of opaque type queue()
queue_use.erl:36: The attempt to match a term of type queue() against the pattern {F, _R} breaks the opaqueness of the term
queue_use.erl:40: The call queue:out({[42,...],[]}) does not have an opaque term of type queue() as 1st argument
-queue_use.erl:48: The call queue_use:add_unique(42,#db{p::[],q::queue()}) contains an opaque term as 2nd argument when terms of different types are expected in these positions
queue_use.erl:51: The call queue_use:is_in_queue(E::42,DB::#db{p::[],q::queue()}) contains an opaque term as 2nd argument when terms of different types are expected in these positions
queue_use.erl:56: The attempt to match a term of type #db{p::[],q::queue()} against the pattern {'db', _, {L1, L2}} breaks the opaqueness of queue()
queue_use.erl:62: The call queue_use:tuple_queue({42,'gazonk'}) does not have a term of type {_,queue()} (with opaque subterms) as 1st argument
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/simple b/lib/dialyzer/test/opaque_SUITE_data/results/simple
new file mode 100644
index 0000000000..f55b384cbe
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/simple
@@ -0,0 +1,87 @@
+
+exact_api.erl:17: The call exact_api:set_type(A::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph() as 1st argument
+exact_api.erl:23: The call digraph:delete(G::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph() as 1st argument
+exact_api.erl:55: The attempt to match a term of type exact_adt:exact_adt() against the pattern {'exact_adt'} breaks the opaqueness of the term
+exact_api.erl:59: The call exact_adt:exact_adt_set_type2(A::#exact_adt{}) does not have an opaque term of type exact_adt:exact_adt() as 1st argument
+is_rec.erl:10: The call erlang:is_record(simple1_adt:d1(),'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:15: The call erlang:is_record(A::simple1_adt:d1(),'r',I::1 | 2 | 3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:19: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument
+is_rec.erl:23: Guard test is_record({simple1_adt:d1(),1},'r',2) breaks the opaqueness of its argument
+is_rec.erl:41: The call erlang:is_record(A::simple1_adt:d1(),R::'a') contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:45: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),1) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+is_rec.erl:49: The call erlang:is_record(A::simple1_adt:d1(),any(),1) contains an opaque term as 1st argument when terms of different types are expected in these positions
+is_rec.erl:53: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),any()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+is_rec.erl:57: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument
+is_rec.erl:61: The record #r{f1::simple1_adt:d1()} violates the declared type for #r{}
+is_rec.erl:65: The call erlang:is_record({simple1_adt:d1(),1},'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions
+rec_api.erl:22: Record construction #r1{f1::10} violates the declared type of field f1::'undefined' | rec_api:a()
+rec_api.erl:23: The pattern {'r1', 10} violates the declared type for #r1{}
+rec_api.erl:27: The attempt to match a term of type rec_adt:r1() against the pattern {'r1', 'a'} breaks the opaqueness of the term
+rec_api.erl:29: Invalid type specification for function rec_api:adt_t1/1. The success typing is (#r1{f1::'a'}) -> #r1{f1::'a'}
+rec_api.erl:34: Invalid type specification for function rec_api:adt_r1/0. The success typing is () -> #r1{f1::'a'}
+rec_api.erl:77: The attempt to match a term of type rec_api:f() against the variable _ breaks the opaqueness of the term
+simple1_api.erl:113: The test simple1_api:d1() =:= simple1_api:d2() can never evaluate to 'true'
+simple1_api.erl:118: Guard test simple1_api:d2() =:= A::simple1_api:d1() can never succeed
+simple1_api.erl:142: Attempt to test for equality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:148: Guard test simple1_adt:o2() =:= A::simple1_adt:o1() contains an opaque term as 1st argument
+simple1_api.erl:154: Attempt to test for inequality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:160: Attempt to test for inequality between a term of type simple1_adt:o2() and a term of opaque type simple1_adt:o1()
+simple1_api.erl:165: Attempt to test for equality between a term of type simple1_adt:c2() and a term of opaque type simple1_adt:c1()
+simple1_api.erl:181: Guard test A::simple1_adt:d1() =< B::simple1_adt:d2() contains an opaque term as 1st argument
+simple1_api.erl:185: Guard test 'a' =< B::simple1_adt:d2() contains an opaque term as 2nd argument
+simple1_api.erl:189: Guard test A::simple1_adt:d1() =< 'd' contains an opaque term as 1st argument
+simple1_api.erl:197: The type test is_integer(A::simple1_adt:d1()) breaks the opaqueness of the term A::simple1_adt:d1()
+simple1_api.erl:221: Guard test A::simple1_api:i1() > 3 can never succeed
+simple1_api.erl:225: Guard test A::simple1_adt:i1() > 3 contains an opaque term as 1st argument
+simple1_api.erl:233: Guard test A::simple1_adt:i1() < 3 contains an opaque term as 1st argument
+simple1_api.erl:239: Guard test A::1 > 3 can never succeed
+simple1_api.erl:243: Guard test A::1 > 3 can never succeed
+simple1_api.erl:257: Guard test is_function(T::simple1_api:o1()) can never succeed
+simple1_api.erl:265: Guard test is_function(T::simple1_adt:o1()) breaks the opaqueness of its argument
+simple1_api.erl:269: The type test is_function(T::simple1_adt:o1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:274: Guard test is_function(T::simple1_api:o1(),A::simple1_api:i1()) can never succeed
+simple1_api.erl:284: Guard test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of its argument
+simple1_api.erl:289: The type test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:294: The call erlang:is_function(T::simple1_api:o1(),A::simple1_adt:i1()) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+simple1_api.erl:300: The type test is_function(T::simple1_adt:o1(),A::simple1_api:i1()) breaks the opaqueness of the term T::simple1_adt:o1()
+simple1_api.erl:306: Guard test B::simple1_api:b2() =:= 'true' can never succeed
+simple1_api.erl:315: Guard test A::simple1_api:b1() =:= 'false' can never succeed
+simple1_api.erl:319: Guard test not('and'('true','true')) can never succeed
+simple1_api.erl:337: Clause guard cannot succeed.
+simple1_api.erl:342: Guard test B::simple1_adt:b2() =:= 'true' contains an opaque term as 1st argument
+simple1_api.erl:347: Guard test A::simple1_adt:b1() =:= 'true' contains an opaque term as 1st argument
+simple1_api.erl:355: Invalid type specification for function simple1_api:bool_adt_t6/1. The success typing is ('true') -> 1
+simple1_api.erl:365: Clause guard cannot succeed.
+simple1_api.erl:368: Invalid type specification for function simple1_api:bool_adt_t8/2. The success typing is (boolean(),boolean()) -> 1
+simple1_api.erl:378: Clause guard cannot succeed.
+simple1_api.erl:381: Invalid type specification for function simple1_api:bool_adt_t9/2. The success typing is ('false','false') -> 1
+simple1_api.erl:407: The size simple1_adt:i1() breaks the opaqueness of A
+simple1_api.erl:418: The attempt to match a term of type non_neg_integer() against the variable A breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:425: The attempt to match a term of type non_neg_integer() against the variable B breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:432: The attempt to match a term of type non_neg_integer() against the variable B breaks the opaqueness of simple1_api:o1()
+simple1_api.erl:448: The attempt to match a term of type non_neg_integer() against the variable Sz breaks the opaqueness of simple1_adt:i1()
+simple1_api.erl:460: The attempt to match a term of type simple1_adt:bit1() against the pattern <<_/binary-unit:8>> breaks the opaqueness of the term
+simple1_api.erl:478: The call 'foo':A(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a()
+simple1_api.erl:486: The call A:'foo'(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a()
+simple1_api.erl:499: The call 'foo':A(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i()
+simple1_api.erl:503: The call 'foo':A(A::simple1_adt:i()) requires that A is of type atom() not simple1_adt:i()
+simple1_api.erl:507: The call A:'foo'(A::simple1_api:i()) requires that A is of type atom() | tuple() not simple1_api:i()
+simple1_api.erl:511: The call A:'foo'(A::simple1_adt:i()) requires that A is of type atom() | tuple() not simple1_adt:i()
+simple1_api.erl:519: Guard test A::simple1_adt:d2() == B::simple1_adt:d1() contains an opaque term as 1st argument
+simple1_api.erl:534: Guard test A::simple1_adt:d1() >= 3 contains an opaque term as 1st argument
+simple1_api.erl:536: Guard test A::simple1_adt:d1() == 3 contains an opaque term as 1st argument
+simple1_api.erl:538: Guard test A::simple1_adt:d1() =:= 3 contains an opaque term as 1st argument
+simple1_api.erl:548: The call erlang:'<'(A::simple1_adt:d1(),3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple1_api.erl:558: The call erlang:'=<'(A::simple1_adt:d1(),B::simple1_adt:d2()) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple1_api.erl:565: Guard test {digraph(),3} > {digraph(),atom() | tid()} contains an opaque term as 2nd argument
+simple1_api.erl:91: Invalid type specification for function simple1_api:tup/0. The success typing is () -> {'a','b'}
+simple2_api.erl:100: The call lists:flatten(A::simple1_adt:tuple1()) contains an opaque term as 1st argument when a structured term of type [any()] is expected
+simple2_api.erl:116: The call lists:flatten({simple1_adt:tuple1()}) will never return since it differs in the 1st argument from the success typing arguments: ([any()])
+simple2_api.erl:121: Guard test {simple1_adt:d1(),3} > {simple1_adt:d1(),simple1_adt:tuple1()} contains an opaque term as 2nd argument
+simple2_api.erl:125: The call erlang:tuple_to_list(B::simple1_adt:tuple1()) contains an opaque term as 1st argument when a structured term of type tuple() is expected
+simple2_api.erl:31: The call erlang:'!'(A::simple1_adt:d1(),'foo') contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:35: The call erlang:send(A::simple1_adt:d1(),'foo') contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:51: The call erlang:'<'(A::simple1_adt:d1(),3) contains an opaque term as 1st argument when terms of different types are expected in these positions
+simple2_api.erl:59: The call lists:keysearch(1,A::simple1_adt:d1(),[]) contains an opaque term as 2nd argument when terms of different types are expected in these positions
+simple2_api.erl:67: The call lists:keysearch('key',1,A::simple1_adt:tuple1()) contains an opaque term as 3rd argument when terms of different types are expected in these positions
+simple2_api.erl:96: The call lists:keyreplace('a',1,[{1, 2}],A::simple1_adt:tuple1()) contains an opaque term as 4th argument when terms of different types are expected in these positions
diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/wings b/lib/dialyzer/test/opaque_SUITE_data/results/wings
index a9571441f8..0ca91ae331 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/results/wings
+++ b/lib/dialyzer/test/opaque_SUITE_data/results/wings
@@ -4,7 +4,7 @@ wings_dissolve.erl:19: Guard test is_list(Faces::gb_set()) breaks the opaqueness
wings_dissolve.erl:272: Guard test is_list(Faces::gb_set()) breaks the opaqueness of its argument
wings_dissolve.erl:31: The call gb_sets:is_empty(Faces::[any(),...]) does not have an opaque term of type gb_set() as 1st argument
wings_edge.erl:205: The pattern <Edge, 'hard', Htab> can never match the type <_,'soft',_>
-wings_edge_cmd.erl:30: The call gb_trees:size(P::gb_set()) contains an opaque term as 1st argument when an opaque term of type gb_tree() is expected
+wings_edge_cmd.erl:30: The call gb_trees:size(P::gb_set()) does not have an opaque term of type gb_tree() as 1st argument
wings_edge_cmd.erl:32: The pattern [_ | Parts] can never match the type []
wings_edge_cmd.erl:32: The pattern [{_, P} | _] can never match the type []
wings_io.erl:30: The attempt to match a term of type {'empty',queue()} against the pattern {'empty', {In, Out}} breaks the opaqueness of queue()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl b/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
index d65af0af4e..4eb202f16a 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/ets/ets_use.erl
@@ -1,5 +1,5 @@
-module(ets_use).
--export([t1/0, t2/0]).
+-export([t1/0, t2/0, t3/0, t4/0]).
t1() ->
case n() of
@@ -13,4 +13,10 @@ t2() ->
T when is_atom(T) -> atm
end.
-n() -> ets:new(n, [named_table]).
+t3() ->
+ is_atom(n()). % no warning since atom() is possible
+
+t4() ->
+ is_integer(n()). % opaque warning since tid() is opaque
+
+n() -> ets:new(n, [named_table]). % -> atom() | tid()
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl b/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl
new file mode 100644
index 0000000000..659ccaf015
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/inf_loop2.erl
@@ -0,0 +1,175 @@
+%% -*- erlang-indent-level: 2 -*-
+%%----------------------------------------------------------------------------
+%% Copy of inf_loop1.erl, where the calls mentioned below have been
+%% restored.
+
+%% Non-sensical (i.e., stripped-down) program that sends the analysis
+%% into an infinite loop. The #we.es field was originally a gb_tree()
+%% but the programmer declared it as an array in order to change it to
+%% that data type instead. In the file, there are two calls to function
+%% gb_trees:get/2 which seem to be the ones responsible for sending the
+%% analysis into an infinite loop. Currently, these calls are marked and
+%% have been changed to gbee_trees:get/2 in order to be able to see that
+%% the analysis works if these two calls are taken out of the picture.
+%%----------------------------------------------------------------------------
+-module(inf_loop2).
+
+-export([command/1]).
+
+-record(we, {id,
+ es = array:new() :: array(),
+ vp,
+ mirror = none}).
+-record(edge, {vs,ve,a = none,b = none,lf,rf,ltpr,ltsu,rtpr,rtsu}).
+
+command(St) ->
+ State = drag_mode(offset_region),
+ SetupSt = wings_sel_conv:more(St),
+ Tvs = wings_sel:fold(fun(Faces, #we{id = Id} = We, Acc) ->
+ FaceRegions = wings_sel:face_regions(Faces, We),
+ {AllVs0,VsData} =
+ collect_offset_regions_data(FaceRegions, We, [], []),
+ AllVs = ordsets:from_list(AllVs0),
+ [{Id,{AllVs,offset_regions_fun(VsData, State)}}|Acc]
+ end,
+ [],
+ SetupSt),
+ wings_drag:setup(Tvs, 42, [], St).
+
+drag_mode(Type) ->
+ {Mode,Norm} = wings_pref:get_value(Type, {average,loop}),
+ {Type,Mode,Norm}.
+
+collect_offset_regions_data([Faces|Regions], We, AllVs, VsData) ->
+ {FaceNormTab,OuterEdges,RegVs} =
+ some_fake_module:faces_data_0(Faces, We, [], [], []),
+ {LoopNorm,LoopVsData,LoopVs} =
+ offset_regions_loop_data(OuterEdges, Faces, We, FaceNormTab),
+ Vs = RegVs -- LoopVs,
+ RegVsData = vertex_normals(Vs, FaceNormTab, We, LoopVsData),
+ collect_offset_regions_data(Regions, We, RegVs ++ AllVs,
+ [{LoopNorm,RegVsData}|VsData]);
+collect_offset_regions_data([], _, AllVs, VsData) ->
+ {AllVs,VsData}.
+
+offset_regions_loop_data(Edges, Faces, We, FNtab) ->
+ EdgeSet = gb_sets:from_list(Edges),
+ offset_loop_data_0(EdgeSet, Faces, We, FNtab, [], [], []).
+
+offset_loop_data_0(EdgeSet0, Faces, We, FNtab, LNorms, VData0, Vs0) ->
+ case gb_sets:is_empty(EdgeSet0) of
+ false ->
+ {Edge,EdgeSet1} = gb_sets:take_smallest(EdgeSet0),
+ {EdgeSet,VData,Links,LoopNorm,Vs} =
+ offset_loop_data_1(Edge, EdgeSet1, Faces, We, FNtab, VData0, Vs0),
+ offset_loop_data_0(EdgeSet, Faces, We, FNtab,
+ [{Links,LoopNorm}|LNorms], VData, Vs);
+ true ->
+ AvgLoopNorm = average_loop_norm(LNorms),
+ {AvgLoopNorm,VData0,Vs0}
+ end.
+
+offset_loop_data_1(Edge, EdgeSet, _Faces,
+ #we{es = Etab, vp = Vtab} = We, FNtab, VData, Vs) ->
+ #edge{vs = Va, ve = Vb, lf = Lf, ltsu = NextLeft} = gb_trees:get(Edge, Etab),
+ VposA = gb_trees:get(Va, Vtab),
+ VposB = gb_trees:get(Vb, Vtab),
+ VDir = e3d_vec:sub(VposB, VposA),
+ FNorm = wings_face:normal(Lf, We),
+ EdgeData = gb_trees:get(NextLeft, Etab),
+ offset_loop_data_2(NextLeft, EdgeData, Va, VposA, Lf, Edge, We, FNtab,
+ EdgeSet, VDir, [], [FNorm], VData, [], Vs, 0).
+
+offset_loop_data_2(CurE, #edge{vs = Va, ve = Vb, lf = PrevFace,
+ rtsu = NextEdge, ltsu = IfCurIsMember},
+ Vb, VposB, PrevFace, LastE,
+ #we{mirror = M} = We,
+ FNtab, EdgeSet0, VDir, EDir0, VNorms0, VData0, VPs0, Vs0,
+ Links) ->
+ Mirror = M == PrevFace,
+ offset_loop_is_member(Mirror, Vb, Va, VposB, CurE, IfCurIsMember, VNorms0,
+ NextEdge, EdgeSet0, VDir, EDir0, FNtab, PrevFace,
+ LastE, We, VData0, VPs0, Vs0, Links).
+
+offset_loop_is_member(Mirror, V1, V2, Vpos1, CurE, NextE, VNorms0, NEdge,
+ EdgeSet0, VDir, EDir0, FNtab, PFace, LastE, We,
+ VData0, VPs0, Vs0, Links) ->
+ #we{es = Etab, vp = Vtab} = We,
+ Vpos2 = gb_trees:get(V2, Vtab),
+ Dir = e3d_vec:sub(Vpos2, Vpos1),
+ NextVDir = e3d_vec:neg(Dir),
+ EdgeSet = gb_sets:delete(CurE, EdgeSet0),
+ EdgeData = gb_trees:get(NextE, Etab), %% HERE
+ [FNorm|_] = VNorms0,
+ VData = offset_loop_data_3(Mirror, V1, Vpos1, VNorms0, NEdge, VDir,
+ Dir, EDir0, FNtab, We, VData0),
+ VPs = [Vpos1|VPs0],
+ Vs = [V1|Vs0],
+ offset_loop_data_2(NextE, EdgeData, V2, Vpos2, PFace, LastE, We, FNtab,
+ EdgeSet, NextVDir, [], [FNorm], VData, VPs, Vs, Links + 1).
+
+offset_loop_data_3(false, V, Vpos, VNorms0, NextEdge,
+ VDir, Dir, EDir0, FNtab, We, VData0) ->
+ #we{es = Etab} = We,
+ VNorm = e3d_vec:norm(e3d_vec:add(VNorms0)),
+ NV = wings_vertex:other(V, gb_trees:get(NextEdge, Etab)), %% HERE
+ ANorm = vertex_normal(NV, FNtab, We),
+ EDir = some_fake_module:average_edge_dir(VNorm, VDir, Dir, EDir0),
+ AvgDir = some_fake_module:evaluate_vdata(VDir, Dir, VNorm),
+ ScaledDir = some_fake_module:along_edge_scale_factor(VDir, Dir, EDir, ANorm),
+ [{V,{Vpos,AvgDir,EDir,ScaledDir}}|VData0].
+
+average_loop_norm([{_,LNorms}]) ->
+ e3d_vec:norm(LNorms);
+average_loop_norm([{LinksA,LNormA},{LinksB,LNormB}]) ->
+ case LinksA < LinksB of
+ true ->
+ e3d_vec:norm(e3d_vec:add(e3d_vec:neg(LNormA), LNormB));
+ false ->
+ e3d_vec:norm(e3d_vec:add(e3d_vec:neg(LNormB), LNormA))
+ end;
+average_loop_norm(LNorms) ->
+ LoopNorms = [Norm || {_,Norm} <- LNorms],
+ e3d_vec:norm(e3d_vec:neg(e3d_vec:add(LoopNorms))).
+
+vertex_normals([V|Vs], FaceNormTab, #we{vp = Vtab, mirror = M} = We, Acc) ->
+ FaceNorms =
+ wings_vertex:fold(fun(_, Face, _, A) when Face == M ->
+ [e3d_vec:neg(wings_face:normal(M, We))|A];
+ (_, Face, _, A) ->
+ [gb_trees:get(Face, FaceNormTab)|A]
+ end, [], V, We),
+ VNorm = e3d_vec:norm(e3d_vec:add(FaceNorms)),
+ Vpos = gb_trees:get(V, Vtab),
+ vertex_normals(Vs, FaceNormTab, We, [{V,{Vpos,VNorm}}|Acc]);
+vertex_normals([], _, _, Acc) ->
+ Acc.
+
+vertex_normal(V, FaceNormTab, #we{mirror = M} = We) ->
+ wings_vertex:fold(fun(_, Face, _, A) when Face == M ->
+ [e3d_vec:neg(wings_face:normal(Face, We))|A];
+ (_, Face, _, A) ->
+ N = gb_trees:get(Face, FaceNormTab),
+ case e3d_vec:is_zero(N) of
+ true -> A;
+ false -> [N|A]
+ end
+ end, [], V, We).
+
+offset_regions_fun(OffsetData, {_,Solution,_} = State) ->
+ fun(new_mode_data, {NewState,_}) ->
+ offset_regions_fun(OffsetData, NewState);
+ ([Dist,_,_,Bump|_], A) ->
+ lists:foldl(fun({LoopNormal,VsData}, VsAcc0) ->
+ lists:foldl(fun({V,{Vpos0,VNorm}}, VsAcc) ->
+ [{V,Vpos0}|VsAcc];
+ ({V,{Vpos0,Dir,EDir,ScaledEDir}}, VsAcc) ->
+ Vec = case Solution of
+ average -> Dir;
+ along_edges -> EDir;
+ scaled -> ScaledEDir
+ end,
+ [{V,Vpos0}|VsAcc]
+ end, VsAcc0, VsData)
+ end, A, OffsetData)
+ end.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
new file mode 100644
index 0000000000..09d4229e28
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_digraph.erl
@@ -0,0 +1,655 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+%%% The Erlang scanner. All types are opaque, which puts some stress
+%%% on Dialyzer.
+
+-module(opaque_digraph).
+
+-export([new/0, new/1, delete/1, info/1]).
+
+-export([add_vertex/1, add_vertex/2, add_vertex/3]).
+-export([del_vertex/2, del_vertices/2]).
+-export([vertex/2, no_vertices/1, vertices/1]).
+-export([source_vertices/1, sink_vertices/1]).
+
+-export([add_edge/3, add_edge/4, add_edge/5]).
+-export([del_edge/2, del_edges/2, del_path/3]).
+-export([edge/2, no_edges/1, edges/1]).
+
+-export([out_neighbours/2, in_neighbours/2]).
+-export([out_edges/2, in_edges/2, edges/2]).
+-export([out_degree/2, in_degree/2]).
+-export([get_path/3, get_cycle/2]).
+
+-export([get_short_path/3, get_short_cycle/2]).
+
+-export_type([local_digraph/0, d_type/0, vertex/0]).
+
+-record(digraph, {vtab = notable :: ets:tab(),
+ etab = notable :: ets:tab(),
+ ntab = notable :: ets:tab(),
+ cyclic = true :: boolean()}).
+
+-opaque local_digraph() :: #digraph{}.
+
+-export_type([edge/0, label/0, add_edge_err_rsn/0,
+ d_protection/0, d_cyclicity/0]).
+
+-opaque edge() :: term().
+-opaque label() :: term().
+-opaque vertex() :: term().
+
+-opaque add_edge_err_rsn() :: {'bad_edge', Path :: [vertex()]}
+ | {'bad_vertex', V :: vertex()}.
+
+%%
+%% Type is a list of
+%% protected | private
+%% acyclic | cyclic
+%%
+%% default is [cyclic,protected]
+%%
+-opaque d_protection() :: 'private' | 'protected'.
+-opaque d_cyclicity() :: 'acyclic' | 'cyclic'.
+-opaque d_type() :: d_cyclicity() | d_protection().
+
+-spec new() -> local_digraph().
+
+new() -> new([]).
+
+-spec new(Type) -> local_digraph() when
+ Type :: [d_type()].
+
+new(Type) ->
+ case check_type(Type, protected, []) of
+ {Access, Ts} ->
+ V = ets:new(vertices, [set, Access]),
+ E = ets:new(edges, [set, Access]),
+ N = ets:new(neighbours, [bag, Access]),
+ ets:insert(N, [{'$vid', 0}, {'$eid', 0}]),
+ set_type(Ts, #digraph{vtab=V, etab=E, ntab=N});
+ error ->
+ erlang:error(badarg)
+ end.
+
+%%
+%% Check type of graph
+%%
+%-spec check_type([d_type()], d_protection(), [{'cyclic', boolean()}]) ->
+% {d_protection(), [{'cyclic', boolean()}]}.
+
+check_type([acyclic|Ts], A, L) ->
+ check_type(Ts, A,[{cyclic,false} | L]);
+check_type([cyclic | Ts], A, L) ->
+ check_type(Ts, A, [{cyclic,true} | L]);
+check_type([protected | Ts], _, L) ->
+ check_type(Ts, protected, L);
+check_type([private | Ts], _, L) ->
+ check_type(Ts, private, L);
+check_type([], A, L) -> {A, L};
+check_type(_, _, _) -> error.
+
+%%
+%% Set graph type
+%%
+-spec set_type([{'cyclic', boolean()}], local_digraph()) -> local_digraph().
+
+set_type([{cyclic,V} | Ks], G) ->
+ set_type(Ks, G#digraph{cyclic = V});
+set_type([], G) -> G.
+
+
+%% Data access functions
+
+-spec delete(G) -> 'true' when
+ G :: local_digraph().
+
+delete(G) ->
+ ets:delete(G#digraph.vtab),
+ ets:delete(G#digraph.etab),
+ ets:delete(G#digraph.ntab).
+
+-spec info(G) -> InfoList when
+ G :: local_digraph(),
+ InfoList :: [{'cyclicity', Cyclicity :: d_cyclicity()} |
+ {'memory', NoWords :: non_neg_integer()} |
+ {'protection', Protection :: d_protection()}].
+
+info(G) ->
+ VT = G#digraph.vtab,
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ Cyclicity = case G#digraph.cyclic of
+ true -> cyclic;
+ false -> acyclic
+ end,
+ Protection = ets:info(VT, protection),
+ Memory = ets:info(VT, memory) + ets:info(ET, memory) + ets:info(NT, memory),
+ [{cyclicity, Cyclicity}, {memory, Memory}, {protection, Protection}].
+
+-spec add_vertex(G) -> vertex() when
+ G :: local_digraph().
+
+add_vertex(G) ->
+ do_add_vertex({new_vertex_id(G), []}, G).
+
+-spec add_vertex(G, V) -> vertex() when
+ G :: local_digraph(),
+ V :: vertex().
+
+add_vertex(G, V) ->
+ do_add_vertex({V, []}, G).
+
+-spec add_vertex(G, V, Label) -> vertex() when
+ G :: local_digraph(),
+ V :: vertex(),
+ Label :: label().
+
+add_vertex(G, V, D) ->
+ do_add_vertex({V, D}, G).
+
+-spec del_vertex(G, V) -> 'true' when
+ G :: local_digraph(),
+ V :: vertex().
+
+del_vertex(G, V) ->
+ do_del_vertex(V, G).
+
+-spec del_vertices(G, Vertices) -> 'true' when
+ G :: local_digraph(),
+ Vertices :: [vertex()].
+
+del_vertices(G, Vs) ->
+ do_del_vertices(Vs, G).
+
+-spec vertex(G, V) -> {V, Label} | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Label :: label().
+
+vertex(G, V) ->
+ case ets:lookup(G#digraph.vtab, V) of
+ [] -> false;
+ [Vertex] -> Vertex
+ end.
+
+-spec no_vertices(G) -> non_neg_integer() when
+ G :: local_digraph().
+
+no_vertices(G) ->
+ ets:info(G#digraph.vtab, size).
+
+-spec vertices(G) -> Vertices when
+ G :: local_digraph(),
+ Vertices :: [vertex()].
+
+vertices(G) ->
+ ets:select(G#digraph.vtab, [{{'$1', '_'}, [], ['$1']}]).
+
+-spec source_vertices(local_digraph()) -> [vertex()].
+
+source_vertices(G) ->
+ collect_vertices(G, in).
+
+-spec sink_vertices(local_digraph()) -> [vertex()].
+
+sink_vertices(G) ->
+ collect_vertices(G, out).
+
+-spec in_degree(G, V) -> non_neg_integer() when
+ G :: local_digraph(),
+ V :: vertex().
+
+in_degree(G, V) ->
+ length(ets:lookup(G#digraph.ntab, {in, V})).
+
+-spec in_neighbours(G, V) -> Vertex when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertex :: [vertex()].
+
+in_neighbours(G, V) ->
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ collect_elems(ets:lookup(NT, {in, V}), ET, 2).
+
+-spec in_edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+in_edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{in, V}, '$1'}, [], ['$1']}]).
+
+-spec out_degree(G, V) -> non_neg_integer() when
+ G :: local_digraph(),
+ V :: vertex().
+
+out_degree(G, V) ->
+ length(ets:lookup(G#digraph.ntab, {out, V})).
+
+-spec out_neighbours(G, V) -> Vertices when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex()].
+
+out_neighbours(G, V) ->
+ ET = G#digraph.etab,
+ NT = G#digraph.ntab,
+ collect_elems(ets:lookup(NT, {out, V}), ET, 3).
+
+-spec out_edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+out_edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{out, V}, '$1'}, [], ['$1']}]).
+
+-spec add_edge(G, V1, V2) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex().
+
+add_edge(G, V1, V2) ->
+ do_add_edge({new_edge_id(G), V1, V2, []}, G).
+
+-spec add_edge(G, V1, V2, Label) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+add_edge(G, V1, V2, D) ->
+ do_add_edge({new_edge_id(G), V1, V2, D}, G).
+
+-spec add_edge(G, E, V1, V2, Label) -> edge() | {'error', add_edge_err_rsn()} when
+ G :: local_digraph(),
+ E :: edge(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+add_edge(G, E, V1, V2, D) ->
+ do_add_edge({E, V1, V2, D}, G).
+
+-spec del_edge(G, E) -> 'true' when
+ G :: local_digraph(),
+ E :: edge().
+
+del_edge(G, E) ->
+ do_del_edges([E], G).
+
+-spec del_edges(G, Edges) -> 'true' when
+ G :: local_digraph(),
+ Edges :: [edge()].
+
+del_edges(G, Es) ->
+ do_del_edges(Es, G).
+
+-spec no_edges(G) -> non_neg_integer() when
+ G :: local_digraph().
+
+no_edges(G) ->
+ ets:info(G#digraph.etab, size).
+
+-spec edges(G) -> Edges when
+ G :: local_digraph(),
+ Edges :: [edge()].
+
+edges(G) ->
+ ets:select(G#digraph.etab, [{{'$1', '_', '_', '_'}, [], ['$1']}]).
+
+-spec edges(G, V) -> Edges when
+ G :: local_digraph(),
+ V :: vertex(),
+ Edges :: [edge()].
+
+edges(G, V) ->
+ ets:select(G#digraph.ntab, [{{{out, V},'$1'}, [], ['$1']},
+ {{{in, V}, '$1'}, [], ['$1']}]).
+
+-spec edge(G, E) -> {E, V1, V2, Label} | 'false' when
+ G :: local_digraph(),
+ E :: edge(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Label :: label().
+
+edge(G, E) ->
+ case ets:lookup(G#digraph.etab,E) of
+ [] -> false;
+ [Edge] -> Edge
+ end.
+
+%%
+%% Generate a "unique" edge identifier (relative to this graph)
+%%
+-spec new_edge_id(local_digraph()) -> edge().
+
+new_edge_id(G) ->
+ NT = G#digraph.ntab,
+ [{'$eid', K}] = ets:lookup(NT, '$eid'),
+ true = ets:delete(NT, '$eid'),
+ true = ets:insert(NT, {'$eid', K+1}),
+ ['$e' | K].
+
+%%
+%% Generate a "unique" vertex identifier (relative to this graph)
+%%
+-spec new_vertex_id(local_digraph()) -> vertex().
+
+new_vertex_id(G) ->
+ NT = G#digraph.ntab,
+ [{'$vid', K}] = ets:lookup(NT, '$vid'),
+ true = ets:delete(NT, '$vid'),
+ true = ets:insert(NT, {'$vid', K+1}),
+ ['$v' | K].
+
+%%
+%% Collect elements for a index in a tuple
+%%
+collect_elems(Keys, Table, Index) ->
+ collect_elems(Keys, Table, Index, []).
+
+collect_elems([{_,Key}|Keys], Table, Index, Acc) ->
+ collect_elems(Keys, Table, Index,
+ [ets:lookup_element(Table, Key, Index)|Acc]);
+collect_elems([], _, _, Acc) -> Acc.
+
+-spec do_add_vertex({vertex(), label()}, local_digraph()) -> vertex().
+
+do_add_vertex({V, _Label} = VL, G) ->
+ ets:insert(G#digraph.vtab, VL),
+ V.
+
+%%
+%% Collect either source or sink vertices.
+%%
+collect_vertices(G, Type) ->
+ Vs = vertices(G),
+ lists:foldl(fun(V, A) ->
+ case ets:member(G#digraph.ntab, {Type, V}) of
+ true -> A;
+ false -> [V|A]
+ end
+ end, [], Vs).
+
+%%
+%% Delete vertices
+%%
+do_del_vertices([V | Vs], G) ->
+ do_del_vertex(V, G),
+ do_del_vertices(Vs, G);
+do_del_vertices([], #digraph{}) -> true.
+
+do_del_vertex(V, G) ->
+ do_del_nedges(ets:lookup(G#digraph.ntab, {in, V}), G),
+ do_del_nedges(ets:lookup(G#digraph.ntab, {out, V}), G),
+ ets:delete(G#digraph.vtab, V).
+
+do_del_nedges([{_, E}|Ns], G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E, V1, V2, _}] ->
+ do_del_edge(E, V1, V2, G),
+ do_del_nedges(Ns, G);
+ [] -> % cannot happen
+ do_del_nedges(Ns, G)
+ end;
+do_del_nedges([], #digraph{}) -> true.
+
+%%
+%% Delete edges
+%%
+do_del_edges([E|Es], G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E,V1,V2,_}] ->
+ do_del_edge(E,V1,V2,G),
+ do_del_edges(Es, G);
+ [] ->
+ do_del_edges(Es, G)
+ end;
+do_del_edges([], #digraph{}) -> true.
+
+do_del_edge(E, V1, V2, G) ->
+ ets:select_delete(G#digraph.ntab, [{{{in, V2}, E}, [], [true]},
+ {{{out,V1}, E}, [], [true]}]),
+ ets:delete(G#digraph.etab, E).
+
+-spec rm_edges([vertex(),...], local_digraph()) -> 'true'.
+
+rm_edges([V1, V2|Vs], G) ->
+ rm_edge(V1, V2, G),
+ rm_edges([V2|Vs], G);
+rm_edges(_, _) -> true.
+
+-spec rm_edge(vertex(), vertex(), local_digraph()) -> 'ok'.
+
+rm_edge(V1, V2, G) ->
+ Es = out_edges(G, V1),
+ rm_edge_0(Es, V1, V2, G).
+
+rm_edge_0([E|Es], V1, V2, G) ->
+ case ets:lookup(G#digraph.etab, E) of
+ [{E, V1, V2, _}] ->
+ do_del_edge(E, V1, V2, G),
+ rm_edge_0(Es, V1, V2, G);
+ _ ->
+ rm_edge_0(Es, V1, V2, G)
+ end;
+rm_edge_0([], _, _, #digraph{}) -> ok.
+
+%%
+%% Check that endpoints exist
+%%
+-spec do_add_edge({edge(), vertex(), vertex(), label()}, local_digraph()) ->
+ edge() | {'error', add_edge_err_rsn()}.
+
+do_add_edge({E, V1, V2, Label}, G) ->
+ case ets:member(G#digraph.vtab, V1) of
+ false -> {error, {bad_vertex, V1}};
+ true ->
+ case ets:member(G#digraph.vtab, V2) of
+ false -> {error, {bad_vertex, V2}};
+ true ->
+ case other_edge_exists(G, E, V1, V2) of
+ true -> {error, {bad_edge, [V1, V2]}};
+ false when G#digraph.cyclic =:= false ->
+ acyclic_add_edge(E, V1, V2, Label, G);
+ false ->
+ do_insert_edge(E, V1, V2, Label, G)
+ end
+ end
+ end.
+
+other_edge_exists(#digraph{etab = ET}, E, V1, V2) ->
+ case ets:lookup(ET, E) of
+ [{E, Vert1, Vert2, _}] when Vert1 =/= V1; Vert2 =/= V2 ->
+ true;
+ _ ->
+ false
+ end.
+
+-spec do_insert_edge(edge(), vertex(), vertex(), label(), local_digraph()) -> edge().
+
+do_insert_edge(E, V1, V2, Label, #digraph{ntab=NT, etab=ET}) ->
+ ets:insert(NT, [{{out, V1}, E}, {{in, V2}, E}]),
+ ets:insert(ET, {E, V1, V2, Label}),
+ E.
+
+-spec acyclic_add_edge(edge(), vertex(), vertex(), label(), local_digraph()) ->
+ edge() | {'error', {'bad_edge', [vertex()]}}.
+
+acyclic_add_edge(_E, V1, V2, _L, _G) when V1 =:= V2 ->
+ {error, {bad_edge, [V1, V2]}};
+acyclic_add_edge(E, V1, V2, Label, G) ->
+ case get_path(G, V2, V1) of
+ false -> do_insert_edge(E, V1, V2, Label, G);
+ Path -> {error, {bad_edge, Path}}
+ end.
+
+%%
+%% Delete all paths from vertex V1 to vertex V2
+%%
+
+-spec del_path(G, V1, V2) -> 'true' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex().
+
+del_path(G, V1, V2) ->
+ case get_path(G, V1, V2) of
+ false -> true;
+ Path ->
+ rm_edges(Path, G),
+ del_path(G, V1, V2)
+ end.
+
+%%
+%% Find a cycle through V
+%% return the cycle as list of vertices [V ... V]
+%% if no cycle exists false is returned
+%% if only a cycle of length one exists it will be
+%% returned as [V] but only after longer cycles have
+%% been searched.
+%%
+
+-spec get_cycle(G, V) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_cycle(G, V) ->
+ case one_path(out_neighbours(G, V), V, [], [V], [V], 2, G, 1) of
+ false ->
+ case lists:member(V, out_neighbours(G, V)) of
+ true -> [V];
+ false -> false
+ end;
+ Vs -> Vs
+ end.
+
+%%
+%% Find a path from V1 to V2
+%% return the path as list of vertices [V1 ... V2]
+%% if no path exists false is returned
+%%
+
+-spec get_path(G, V1, V2) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_path(G, V1, V2) ->
+ one_path(out_neighbours(G, V1), V2, [], [V1], [V1], 1, G, 1).
+
+%%
+%% prune_short_path (evaluate conditions on path)
+%% short : if path is too short
+%% ok : if path is ok
+%%
+prune_short_path(Counter, Min) when Counter < Min ->
+ short;
+prune_short_path(_Counter, _Min) ->
+ ok.
+
+one_path([W|Ws], W, Cont, Xs, Ps, Prune, G, Counter) ->
+ case prune_short_path(Counter, Prune) of
+ short -> one_path(Ws, W, Cont, Xs, Ps, Prune, G, Counter);
+ ok -> lists:reverse([W|Ps])
+ end;
+one_path([V|Vs], W, Cont, Xs, Ps, Prune, G, Counter) ->
+ case lists:member(V, Xs) of
+ true -> one_path(Vs, W, Cont, Xs, Ps, Prune, G, Counter);
+ false -> one_path(out_neighbours(G, V), W,
+ [{Vs,Ps} | Cont], [V|Xs], [V|Ps],
+ Prune, G, Counter+1)
+ end;
+one_path([], W, [{Vs,Ps}|Cont], Xs, _, Prune, G, Counter) ->
+ one_path(Vs, W, Cont, Xs, Ps, Prune, G, Counter-1);
+one_path([], _, [], _, _, _, _, _Counter) -> false.
+
+%%
+%% Like get_cycle/2, but a cycle of length one is preferred.
+%%
+
+-spec get_short_cycle(G, V) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_short_cycle(G, V) ->
+ get_short_path(G, V, V).
+
+%%
+%% Like get_path/3, but using a breadth-first search makes it possible
+%% to find a short path.
+%%
+
+-spec get_short_path(G, V1, V2) -> Vertices | 'false' when
+ G :: local_digraph(),
+ V1 :: vertex(),
+ V2 :: vertex(),
+ Vertices :: [vertex(),...].
+
+get_short_path(G, V1, V2) ->
+ T = new(),
+ add_vertex(T, V1),
+ Q = queue:new(),
+ Q1 = queue_out_neighbours(V1, G, Q),
+ L = spath(Q1, G, V2, T),
+ delete(T),
+ L.
+
+spath(Q, G, Sink, T) ->
+ case queue:out(Q) of
+ {{value, E}, Q1} ->
+ {_E, V1, V2, _Label} = edge(G, E),
+ if
+ Sink =:= V2 ->
+ follow_path(V1, T, [V2]);
+ true ->
+ case vertex(T, V2) of
+ false ->
+ add_vertex(T, V2),
+ add_edge(T, V2, V1),
+ NQ = queue_out_neighbours(V2, G, Q1),
+ spath(NQ, G, Sink, T);
+ _V ->
+ spath(Q1, G, Sink, T)
+ end
+ end;
+ {empty, _Q1} ->
+ false
+ end.
+
+follow_path(V, T, P) ->
+ P1 = [V | P],
+ case out_neighbours(T, V) of
+ [N] ->
+ follow_path(N, T, P1);
+ [] ->
+ P1
+ end.
+
+queue_out_neighbours(V, G, Q0) ->
+ lists:foldl(fun(E, Q) -> queue:in(E, Q) end, Q0, out_edges(G, V)).
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
new file mode 100644
index 0000000000..9ecd4f92a1
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/modules/opaque_erl_scan.erl
@@ -0,0 +1,1300 @@
+%% -*- coding: utf-8 -*-
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 1996-2014. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+%%% The Erlang scanner. All types are opaque, which puts some stress
+%%% on Dialyzer.
+
+-module(opaque_erl_scan).
+
+%%% External exports
+
+-export([string/1,string/2,string/3,tokens/3,tokens/4,
+ format_error/1,reserved_word/1,
+ token_info/1,token_info/2,
+ attributes_info/1,attributes_info/2,set_attribute/3]).
+
+%%% Private
+-export([continuation_location/1]).
+
+-export_type([error_info/0,
+ line/0,
+ location/0,
+ options/0,
+ return_cont/0,
+ token/0,
+ tokens_result/0]).
+
+%%%
+%%% Defines and type definitions
+%%%
+
+-define(COLUMN(C), (is_integer(C) andalso C >= 1)).
+%% Line numbers less than zero have always been allowed:
+-define(ALINE(L), is_integer(L)).
+-define(STRING(S), is_list(S)).
+-define(RESWORDFUN(F), is_function(F, 1)).
+-define(SETATTRFUN(F), is_function(F, 1)).
+
+-export_type([category/0, column/0, resword_fun/0, option/0, symbol/0,
+ info_line/0, attributes_data/0, attributes/0, tokens/0,
+ error_description/0, char_spec/0, cont_fun/0,
+ attribute_item/0, info_location/0, attribute_info/0,
+ token_item/0, token_info/0]).
+
+-opaque category() :: atom().
+-opaque column() :: pos_integer().
+-opaque line() :: integer().
+-opaque location() :: line() | {line(),column()}.
+-opaque resword_fun() :: fun((atom()) -> boolean()).
+-opaque option() :: 'return' | 'return_white_spaces' | 'return_comments'
+ | 'text' | {'reserved_word_fun', resword_fun()}.
+-opaque options() :: option() | [option()].
+-opaque symbol() :: atom() | float() | integer() | string().
+-opaque info_line() :: integer() | term().
+-opaque attributes_data()
+ :: [{'column', column()} | {'line', info_line()} | {'text', string()}]
+ | {line(), column()}.
+%% The fact that {line(),column()} is a possible attributes() type
+%% is hidden.
+-opaque attributes() :: line() | attributes_data().
+-opaque token() :: {category(), attributes(), symbol()}
+ | {category(), attributes()}.
+-opaque tokens() :: [token()].
+-opaque error_description() :: term().
+-opaque error_info() :: {location(), module(), error_description()}.
+
+%%% Local record.
+-record(erl_scan,
+ {resword_fun = fun reserved_word/1 :: resword_fun(),
+ ws = false :: boolean(),
+ comment = false :: boolean(),
+ text = false :: boolean()}).
+
+%%----------------------------------------------------------------------------
+
+-spec format_error(ErrorDescriptor) -> string() when
+ ErrorDescriptor :: error_description().
+format_error({string,Quote,Head}) ->
+ lists:flatten(["unterminated " ++ string_thing(Quote) ++
+ " starting with " ++
+ io_lib:write_string(Head, Quote)]);
+format_error({illegal,Type}) ->
+ lists:flatten(io_lib:fwrite("illegal ~w", [Type]));
+format_error(char) -> "unterminated character";
+format_error({base,Base}) ->
+ lists:flatten(io_lib:fwrite("illegal base '~w'", [Base]));
+format_error(Other) ->
+ lists:flatten(io_lib:write(Other)).
+
+-spec string(String) -> Return when
+ String :: string(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String) ->
+ string(String, 1, []).
+
+-spec string(String, StartLocation) -> Return when
+ String :: string(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ StartLocation :: location(),
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String, StartLocation) ->
+ string(String, StartLocation, []).
+
+-spec string(String, StartLocation, Options) -> Return when
+ String :: string(),
+ Options :: options(),
+ Return :: {'ok', Tokens :: tokens(), EndLocation}
+ | {'error', ErrorInfo :: error_info(), ErrorLocation},
+ StartLocation :: location(),
+ EndLocation :: location(),
+ ErrorLocation :: location().
+string(String, Line, Options) when ?STRING(String), ?ALINE(Line) ->
+ string1(String, options(Options), Line, no_col, []);
+string(String, {Line,Column}, Options) when ?STRING(String),
+ ?ALINE(Line),
+ ?COLUMN(Column) ->
+ string1(String, options(Options), Line, Column, []).
+
+-opaque char_spec() :: string() | 'eof'.
+-opaque cont_fun() :: fun((char_spec(), #erl_scan{}, line(), column(),
+ tokens(), any()) -> any()).
+-opaque return_cont() :: {erl_scan_continuation,
+ string(), column(), tokens(), line(),
+ #erl_scan{}, any(), cont_fun()}.
+-opaque tokens_result() :: {'ok', Tokens :: tokens(), EndLocation :: location()}
+ | {'eof', EndLocation :: location()}
+ | {'error', ErrorInfo :: error_info(),
+ EndLocation :: location()}.
+
+-spec tokens(Continuation, CharSpec, StartLocation) -> Return when
+ Continuation :: return_cont() | [],
+ CharSpec :: char_spec(),
+ StartLocation :: location(),
+ Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
+ | {'more', Continuation1 :: return_cont()}.
+tokens(Cont, CharSpec, StartLocation) ->
+ tokens(Cont, CharSpec, StartLocation, []).
+
+-spec tokens(Continuation, CharSpec, StartLocation, Options) -> Return when
+ Continuation :: return_cont() | [],
+ CharSpec :: char_spec(),
+ StartLocation :: location(),
+ Options :: options(),
+ Return :: {'done',Result :: tokens_result(),LeftOverChars :: char_spec()}
+ | {'more', Continuation1 :: return_cont()}.
+tokens([], CharSpec, Line, Options) when ?ALINE(Line) ->
+ tokens1(CharSpec, options(Options), Line, no_col, [], fun scan/6, []);
+tokens([], CharSpec, {Line,Column}, Options) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ tokens1(CharSpec, options(Options), Line, Column, [], fun scan/6, []);
+tokens({erl_scan_continuation,Cs,Col,Toks,Line,St,Any,Fun},
+ CharSpec, _Loc, _Opts) ->
+ tokens1(Cs++CharSpec, St, Line, Col, Toks, Fun, Any).
+
+continuation_location({erl_scan_continuation,_,no_col,_,Line,_,_,_}) ->
+ Line;
+continuation_location({erl_scan_continuation,_,Col,_,Line,_,_,_}) ->
+ {Line,Col}.
+
+-opaque attribute_item() :: 'column' | 'length' | 'line'
+ | 'location' | 'text'.
+-opaque info_location() :: location() | term().
+-opaque attribute_info() :: {'column', column()}| {'length', pos_integer()}
+ | {'line', info_line()}
+ | {'location', info_location()}
+ | {'text', string()}.
+-opaque token_item() :: 'category' | 'symbol' | attribute_item().
+-opaque token_info() :: {'category', category()} | {'symbol', symbol()}
+ | attribute_info().
+
+-spec token_info(Token) -> TokenInfo when
+ Token :: token(),
+ TokenInfo :: [TokenInfoTuple :: token_info()].
+token_info(Token) ->
+ Items = [category,column,length,line,symbol,text], % undefined order
+ token_info(Token, Items).
+
+-spec token_info(Token, TokenItem) -> TokenInfoTuple | 'undefined' when
+ Token :: token(),
+ TokenItem :: token_item(),
+ TokenInfoTuple :: token_info();
+ (Token, TokenItems) -> TokenInfo when
+ Token :: token(),
+ TokenItems :: [TokenItem :: token_item()],
+ TokenInfo :: [TokenInfoTuple :: token_info()].
+token_info(_Token, []) ->
+ [];
+token_info(Token, [Item|Items]) when is_atom(Item) ->
+ case token_info(Token, Item) of
+ undefined ->
+ token_info(Token, Items);
+ TokenInfo when is_tuple(TokenInfo) ->
+ [TokenInfo|token_info(Token, Items)]
+ end;
+token_info({Category,_Attrs}, category=Item) ->
+ {Item,Category};
+token_info({Category,_Attrs,_Symbol}, category=Item) ->
+ {Item,Category};
+token_info({Category,_Attrs}, symbol=Item) ->
+ {Item,Category};
+token_info({_Category,_Attrs,Symbol}, symbol=Item) ->
+ {Item,Symbol};
+token_info({_Category,Attrs}, Item) ->
+ attributes_info(Attrs, Item);
+token_info({_Category,Attrs,_Symbol}, Item) ->
+ attributes_info(Attrs, Item).
+
+-spec attributes_info(Attributes) -> AttributesInfo when
+ Attributes :: attributes(),
+ AttributesInfo :: [AttributeInfoTuple :: attribute_info()].
+attributes_info(Attributes) ->
+ Items = [column,length,line,text], % undefined order
+ attributes_info(Attributes, Items).
+
+-spec attributes_info
+ (Attributes, AttributeItem) -> AttributeInfoTuple | 'undefined' when
+ Attributes :: attributes(),
+ AttributeItem :: attribute_item(),
+ AttributeInfoTuple :: attribute_info();
+ (Attributes, AttributeItems) -> AttributeInfo when
+ Attributes :: attributes(),
+ AttributeItems :: [AttributeItem :: attribute_item()],
+ AttributeInfo :: [AttributeInfoTuple :: attribute_info()].
+attributes_info(_Attrs, []) ->
+ [];
+attributes_info(Attrs, [A|As]) when is_atom(A) ->
+ case attributes_info(Attrs, A) of
+ undefined ->
+ attributes_info(Attrs, As);
+ AttributeInfo when is_tuple(AttributeInfo) ->
+ [AttributeInfo|attributes_info(Attrs, As)]
+ end;
+attributes_info({Line,Column}, column=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Column};
+attributes_info(Line, column) when ?ALINE(Line) ->
+ undefined;
+attributes_info(Attrs, column=Item) ->
+ attr_info(Attrs, Item);
+attributes_info(Attrs, length=Item) ->
+ case attributes_info(Attrs, text) of
+ undefined ->
+ undefined;
+ {text,Text} ->
+ {Item,length(Text)}
+ end;
+attributes_info(Line, line=Item) when ?ALINE(Line) ->
+ {Item,Line};
+attributes_info({Line,Column}, line=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Line};
+attributes_info(Attrs, line=Item) ->
+ attr_info(Attrs, Item);
+attributes_info({Line,Column}=Location, location=Item) when ?ALINE(Line),
+ ?COLUMN(Column) ->
+ {Item,Location};
+attributes_info(Line, location=Item) when ?ALINE(Line) ->
+ {Item,Line};
+attributes_info(Attrs, location=Item) ->
+ {line,Line} = attributes_info(Attrs, line), % assume line is present
+ case attributes_info(Attrs, column) of
+ undefined ->
+ %% If set_attribute() has assigned a term such as {17,42}
+ %% to 'line', then Line will look like {Line,Column}. One
+ %% should not use 'location' but 'line' and 'column' in
+ %% such special cases.
+ {Item,Line};
+ {column,Column} ->
+ {Item,{Line,Column}}
+ end;
+attributes_info({Line,Column}, text) when ?ALINE(Line), ?COLUMN(Column) ->
+ undefined;
+attributes_info(Line, text) when ?ALINE(Line) ->
+ undefined;
+attributes_info(Attrs, text=Item) ->
+ attr_info(Attrs, Item);
+attributes_info(T1, T2) ->
+ erlang:error(badarg, [T1,T2]).
+
+-spec set_attribute(AttributeItem, Attributes, SetAttributeFun) -> Attributes when
+ AttributeItem :: 'line',
+ Attributes :: attributes(),
+ SetAttributeFun :: fun((info_line()) -> info_line()).
+set_attribute(Tag, Attributes, Fun) when ?SETATTRFUN(Fun) ->
+ set_attr(Tag, Attributes, Fun).
+
+%%%
+%%% Local functions
+%%%
+
+string_thing($') -> "atom"; %' Stupid Emacs
+string_thing(_) -> "string".
+
+-define(WHITE_SPACE(C),
+ is_integer(C) andalso
+ (C >= $\000 andalso C =< $\s orelse C >= $\200 andalso C =< $\240)).
+-define(DIGIT(C), C >= $0, C =< $9).
+-define(CHAR(C), is_integer(C), C >= 0).
+-define(UNICODE(C),
+ is_integer(C) andalso
+ (C >= 0 andalso C < 16#D800 orelse
+ C > 16#DFFF andalso C < 16#FFFE orelse
+ C > 16#FFFF andalso C =< 16#10FFFF)).
+
+-define(UNI255(C), C >= 0, C =< 16#ff).
+
+options(Opts0) when is_list(Opts0) ->
+ Opts = lists:foldr(fun expand_opt/2, [], Opts0),
+ [RW_fun] =
+ case opts(Opts, [reserved_word_fun], []) of
+ badarg ->
+ erlang:error(badarg, [Opts0]);
+ R ->
+ R
+ end,
+ Comment = proplists:get_bool(return_comments, Opts),
+ WS = proplists:get_bool(return_white_spaces, Opts),
+ Txt = proplists:get_bool(text, Opts),
+ #erl_scan{resword_fun = RW_fun,
+ comment = Comment,
+ ws = WS,
+ text = Txt};
+options(Opt) ->
+ options([Opt]).
+
+opts(Options, [Key|Keys], L) ->
+ V = case lists:keyfind(Key, 1, Options) of
+ {reserved_word_fun,F} when ?RESWORDFUN(F) ->
+ {ok,F};
+ {Key,_} ->
+ badarg;
+ false ->
+ {ok,default_option(Key)}
+ end,
+ case V of
+ badarg ->
+ badarg;
+ {ok,Value} ->
+ opts(Options, Keys, [Value|L])
+ end;
+opts(_Options, [], L) ->
+ lists:reverse(L).
+
+default_option(reserved_word_fun) ->
+ fun reserved_word/1.
+
+expand_opt(return, Os) ->
+ [return_comments,return_white_spaces|Os];
+expand_opt(O, Os) ->
+ [O|Os].
+
+attr_info(Attrs, Item) ->
+ try lists:keyfind(Item, 1, Attrs) of
+ {_Item, _Value} = T ->
+ T;
+ false ->
+ undefined
+ catch
+ _:_ ->
+ erlang:error(badarg, [Attrs, Item])
+ end.
+
+-spec set_attr('line', attributes(), fun((line()) -> line())) -> attributes().
+
+set_attr(line, Line, Fun) when ?ALINE(Line) ->
+ Ln = Fun(Line),
+ if
+ ?ALINE(Ln) ->
+ Ln;
+ true ->
+ [{line,Ln}]
+ end;
+set_attr(line, {Line,Column}, Fun) when ?ALINE(Line), ?COLUMN(Column) ->
+ Ln = Fun(Line),
+ if
+ ?ALINE(Ln) ->
+ {Ln,Column};
+ true ->
+ [{line,Ln},{column,Column}]
+ end;
+set_attr(line=Tag, Attrs, Fun) when is_list(Attrs) ->
+ {line,Line} = lists:keyfind(Tag, 1, Attrs),
+ case lists:keyreplace(Tag, 1, Attrs, {line,Fun(Line)}) of
+ [{line,Ln}] when ?ALINE(Ln) ->
+ Ln;
+ As ->
+ As
+ end;
+set_attr(T1, T2, T3) ->
+ erlang:error(badarg, [T1,T2,T3]).
+
+tokens1(Cs, St, Line, Col, Toks, Fun, Any) when ?STRING(Cs); Cs =:= eof ->
+ case Fun(Cs, St, Line, Col, Toks, Any) of
+ {more,{Cs0,Ncol,Ntoks,Nline,Nany,Nfun}} ->
+ {more,{erl_scan_continuation,Cs0,Ncol,Ntoks,Nline,St,Nany,Nfun}};
+ {ok,Toks0,eof,Nline,Ncol} ->
+ Res = case Toks0 of
+ [] ->
+ {eof,location(Nline, Ncol)};
+ _ ->
+ {ok,lists:reverse(Toks0),location(Nline,Ncol)}
+ end,
+ {done,Res,eof};
+ {ok,Toks0,Rest,Nline,Ncol} ->
+ {done,{ok,lists:reverse(Toks0),location(Nline, Ncol)},Rest};
+ {{error,_,_}=Error,Rest} ->
+ {done,Error,Rest}
+ end.
+
+string1(Cs, St, Line, Col, Toks) ->
+ case scan1(Cs, St, Line, Col, Toks) of
+ {more,{Cs0,Ncol,Ntoks,Nline,Any,Fun}} ->
+ case Fun(Cs0++eof, St, Nline, Ncol, Ntoks, Any) of
+ {ok,Toks1,_Rest,Line2,Col2} ->
+ {ok,lists:reverse(Toks1),location(Line2, Col2)};
+ {{error,_,_}=Error,_Rest} ->
+ Error
+ end;
+ {ok,Ntoks,[_|_]=Rest,Nline,Ncol} ->
+ string1(Rest, St, Nline, Ncol, Ntoks);
+ {ok,Ntoks,_,Nline,Ncol} ->
+ {ok,lists:reverse(Ntoks),location(Nline, Ncol)};
+ {{error,_,_}=Error,_Rest} ->
+ Error
+ end.
+
+scan(Cs, St, Line, Col, Toks, _) ->
+ scan1(Cs, St, Line, Col, Toks).
+
+scan1([$\s|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_spcs(Cs, St, Line, Col, Toks, 1);
+scan1([$\s|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1);
+scan1([$\n|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_newline(Cs, St, Line, Col, Toks);
+scan1([$\n|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line+1, new_column(Col, 1), Toks, 0);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $A, C =< $Z ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $a, C =< $z ->
+ scan_atom(Cs, St, Line, Col, Toks, [C]);
+%% Optimization: some very common punctuation characters:
+scan1([$,|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ",", ',', 1);
+scan1([$(|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "(", '(', 1);
+scan1([$)|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ")", ')', 1);
+scan1([${|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "{", '{', 1);
+scan1([$}|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "}", '}', 1);
+scan1([$[|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "[", '[', 1);
+scan1([$]|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "]", ']', 1);
+scan1([$;|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ";", ';', 1);
+scan1([$_=C|Cs], St, Line, Col, Toks) ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+%% More punctuation characters below.
+scan1([$\%|Cs], St, Line, Col, Toks) when not St#erl_scan.comment ->
+ skip_comment(Cs, St, Line, Col, Toks, 1);
+scan1([$\%=C|Cs], St, Line, Col, Toks) ->
+ scan_comment(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when ?DIGIT(C) ->
+ scan_number(Cs, St, Line, Col, Toks, [C]);
+scan1("..."++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "...", '...', 3);
+scan1(".."=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1(".."++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "..", '..', 2);
+scan1("."=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1([$.=C|Cs], St, Line, Col, Toks) ->
+ scan_dot(Cs, St, Line, Col, Toks, [C]);
+scan1([$"|Cs], St, Line, Col, Toks) -> %" Emacs
+ State0 = {[],[],Line,Col},
+ scan_string(Cs, St, Line, incr_column(Col, 1), Toks, State0);
+scan1([$'|Cs], St, Line, Col, Toks) -> %' Emacs
+ State0 = {[],[],Line,Col},
+ scan_qatom(Cs, St, Line, incr_column(Col, 1), Toks, State0);
+scan1([$$|Cs], St, Line, Col, Toks) ->
+ scan_char(Cs, St, Line, Col, Toks);
+scan1([$\r|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ white_space_end(Cs, St, Line, Col, Toks, 1, "\r");
+scan1([C|Cs], St, Line, Col, Toks) when C >= $ß, C =< $ÿ, C =/= $÷ ->
+ scan_atom(Cs, St, Line, Col, Toks, [C]);
+scan1([C|Cs], St, Line, Col, Toks) when C >= $À, C =< $Þ, C /= $× ->
+ scan_variable(Cs, St, Line, Col, Toks, [C]);
+scan1([$\t|Cs], St, Line, Col, Toks) when St#erl_scan.ws ->
+ scan_tabs(Cs, St, Line, Col, Toks, 1);
+scan1([$\t|Cs], St, Line, Col, Toks) ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1);
+scan1([C|Cs], St, Line, Col, Toks) when ?WHITE_SPACE(C) ->
+ case St#erl_scan.ws of
+ true ->
+ scan_white_space(Cs, St, Line, Col, Toks, [C]);
+ false ->
+ skip_white_space(Cs, St, Line, Col, Toks, 1)
+ end;
+%% Punctuation characters and operators, first recognise multiples.
+%% << <- <=
+scan1("<<"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<<", '<<', 2);
+scan1("<-"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<-", '<-', 2);
+scan1("<="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<=", '<=', 2);
+scan1("<"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% >> >=
+scan1(">>"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">>", '>>', 2);
+scan1(">="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">=", '>=', 2);
+scan1(">"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% -> --
+scan1("->"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "->", '->', 2);
+scan1("--"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "--", '--', 2);
+scan1("-"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% ++
+scan1("++"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "++", '++', 2);
+scan1("+"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% =:= =/= =< ==
+scan1("=:="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=:=", '=:=', 3);
+scan1("=:"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1("=/="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=/=", '=/=', 3);
+scan1("=/"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1("=<"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=<", '=<', 2);
+scan1("=="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "==", '==', 2);
+scan1("="=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% /=
+scan1("/="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "/=", '/=', 2);
+scan1("/"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% ||
+scan1("||"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "||", '||', 2);
+scan1("|"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% :-
+scan1(":-"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ":-", ':-', 2);
+%% :: for typed records
+scan1("::"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "::", '::', 2);
+scan1(":"=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% Optimization: punctuation characters less than 127:
+scan1([$=|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=", '=', 1);
+scan1([$:|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ":", ':', 1);
+scan1([$||Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "|", '|', 1);
+scan1([$#|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "#", '#', 1);
+scan1([$/|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "/", '/', 1);
+scan1([$?|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "?", '?', 1);
+scan1([$-|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "-", '-', 1);
+scan1([$+|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "+", '+', 1);
+scan1([$*|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "*", '*', 1);
+scan1([$<|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "<", '<', 1);
+scan1([$>|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ">", '>', 1);
+scan1([$!|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "!", '!', 1);
+scan1([$@|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "@", '@', 1);
+scan1([$\\|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "\\", '\\', 1);
+scan1([$^|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "^", '^', 1);
+scan1([$`|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "`", '`', 1);
+scan1([$~|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "~", '~', 1);
+scan1([$&|Cs], St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "&", '&', 1);
+%% End of optimization.
+scan1([C|Cs], St, Line, Col, Toks) when ?UNI255(C) ->
+ Str = [C],
+ tok2(Cs, St, Line, Col, Toks, Str, list_to_atom(Str), 1);
+scan1([C|Cs], _St, Line, Col, _Toks) when ?CHAR(C) ->
+ Ncol = incr_column(Col, 1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs);
+scan1([]=Cs, _St, Line, Col, Toks) ->
+ {more,{Cs,Col,Toks,Line,[],fun scan/6}};
+scan1(eof=Cs, _St, Line, Col, Toks) ->
+ {ok,Toks,Cs,Line,Col}.
+
+scan_atom(Cs0, St, Line, Col, Toks, Ncs0) ->
+ case scan_name(Cs0, Ncs0) of
+ {more,Ncs} ->
+ {more,{[],Col,Toks,Line,Ncs,fun scan_atom/6}};
+ {Wcs,Cs} ->
+ case catch list_to_atom(Wcs) of
+ Name when is_atom(Name) ->
+ case (St#erl_scan.resword_fun)(Name) of
+ true ->
+ tok2(Cs, St, Line, Col, Toks, Wcs, Name);
+ false ->
+ tok3(Cs, St, Line, Col, Toks, atom, Wcs, Name)
+ end;
+ _Error ->
+ Ncol = incr_column(Col, length(Wcs)),
+ scan_error({illegal,atom}, Line, Col, Line, Ncol, Cs)
+ end
+ end.
+
+scan_variable(Cs0, St, Line, Col, Toks, Ncs0) ->
+ case scan_name(Cs0, Ncs0) of
+ {more,Ncs} ->
+ {more,{[],Col,Toks,Line,Ncs,fun scan_variable/6}};
+ {Wcs,Cs} ->
+ case catch list_to_atom(Wcs) of
+ Name when is_atom(Name) ->
+ tok3(Cs, St, Line, Col, Toks, var, Wcs, Name);
+ _Error ->
+ Ncol = incr_column(Col, length(Wcs)),
+ scan_error({illegal,var}, Line, Col, Line, Ncol, Cs)
+ end
+ end.
+
+scan_name([C|Cs], Ncs) when C >= $a, C =< $z ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $A, C =< $Z ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([$_=C|Cs], Ncs) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when ?DIGIT(C) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([$@=C|Cs], Ncs) ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $ß, C =< $ÿ, C =/= $÷ ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([C|Cs], Ncs) when C >= $À, C =< $Þ, C =/= $× ->
+ scan_name(Cs, [C|Ncs]);
+scan_name([], Ncs) ->
+ {more,Ncs};
+scan_name(Cs, Ncs) ->
+ {lists:reverse(Ncs),Cs}.
+
+-define(STR(St, S), if St#erl_scan.text -> S; true -> [] end).
+
+scan_dot([$%|_]=Cs, St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 1)};
+scan_dot([$\n=C|Cs], St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, Ncs++[C])),
+ {ok,[{dot,Attrs}|Toks],Cs,Line+1,new_column(Col, 1)};
+scan_dot([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, Ncs++[C])),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 2)};
+scan_dot(eof=Cs, St, Line, Col, Toks, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ {ok,[{dot,Attrs}|Toks],Cs,Line,incr_column(Col, 1)};
+scan_dot(Cs, St, Line, Col, Toks, Ncs) ->
+ tok2(Cs, St, Line, Col, Toks, Ncs, '.', 1).
+
+%%% White space characters are very common, so it is worthwhile to
+%%% scan them fast and store them compactly. (The words "whitespace"
+%%% and "white space" usually mean the same thing. The Erlang
+%%% specification denotes the characters with ASCII code in the
+%%% interval 0 to 32 as "white space".)
+%%%
+%%% Convention: if there is a white newline ($\n) it will always be
+%%% the first character in the text string. As a consequence, there
+%%% cannot be more than one newline in a white_space token string.
+%%%
+%%% Some common combinations are recognized, some are not. Examples
+%%% of the latter are tab(s) followed by space(s), like "\t ".
+%%% (They will be represented by two (or more) tokens.)
+%%%
+%%% Note: the character sequence "\r\n" is *not* recognized since it
+%%% would violate the property that $\n will always be the first
+%%% character. (But since "\r\n\r\n" is common, it pays off to
+%%% recognize "\n\r".)
+
+scan_newline([$\s|Cs], St, Line, Col, Toks) ->
+ scan_nl_spcs(Cs, St, Line, Col, Toks, 2);
+scan_newline([$\t|Cs], St, Line, Col, Toks) ->
+ scan_nl_tabs(Cs, St, Line, Col, Toks, 2);
+scan_newline([$\r|Cs], St, Line, Col, Toks) ->
+ newline_end(Cs, St, Line, Col, Toks, 2, "\n\r");
+scan_newline([$\f|Cs], St, Line, Col, Toks) ->
+ newline_end(Cs, St, Line, Col, Toks, 2, "\n\f");
+scan_newline([], _St, Line, Col, Toks) ->
+ {more,{[$\n],Col,Toks,Line,[],fun scan/6}};
+scan_newline(Cs, St, Line, Col, Toks) ->
+ scan_nl_white_space(Cs, St, Line, Col, Toks, "\n").
+
+scan_nl_spcs([$\s|Cs], St, Line, Col, Toks, N) when N < 17 ->
+ scan_nl_spcs(Cs, St, Line, Col, Toks, N+1);
+scan_nl_spcs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_nl_spcs/6}};
+scan_nl_spcs(Cs, St, Line, Col, Toks, N) ->
+ newline_end(Cs, St, Line, Col, Toks, N, nl_spcs(N)).
+
+scan_nl_tabs([$\t|Cs], St, Line, Col, Toks, N) when N < 11 ->
+ scan_nl_tabs(Cs, St, Line, Col, Toks, N+1);
+scan_nl_tabs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_nl_tabs/6}};
+scan_nl_tabs(Cs, St, Line, Col, Toks, N) ->
+ newline_end(Cs, St, Line, Col, Toks, N, nl_tabs(N)).
+
+%% Note: returning {more,Cont} is meaningless here; one could just as
+%% well return several tokens. But since tokens() scans up to a full
+%% stop anyway, nothing is gained by not collecting all white spaces.
+scan_nl_white_space([$\n|Cs], #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks0, Ncs) ->
+ Toks = [{white_space,Line,lists:reverse(Ncs)}|Toks0],
+ scan_newline(Cs, St, Line+1, Col, Toks);
+scan_nl_white_space([$\n|Cs], St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ Attrs = attributes(Line, Col, St, Ncs),
+ Token = {white_space,Attrs,Ncs},
+ scan_newline(Cs, St, Line+1, new_column(Col, length(Ncs)), [Token|Toks]);
+scan_nl_white_space([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ scan_nl_white_space(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_nl_white_space([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_nl_white_space/6}};
+scan_nl_white_space(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks, Ncs) ->
+ scan1(Cs, St, Line+1, Col, [{white_space,Line,lists:reverse(Ncs)}|Toks]);
+scan_nl_white_space(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ Attrs = attributes(Line, Col, St, Ncs),
+ Token = {white_space,Attrs,Ncs},
+ scan1(Cs, St, Line+1, new_column(Col, length(Ncs)), [Token|Toks]).
+
+newline_end(Cs, #erl_scan{text = false}=St, Line, no_col=Col,
+ Toks, _N, Ncs) ->
+ scan1(Cs, St, Line+1, Col, [{white_space,Line,Ncs}|Toks]);
+newline_end(Cs, St, Line, Col, Toks, N, Ncs) ->
+ Attrs = attributes(Line, Col, St, Ncs),
+ scan1(Cs, St, Line+1, new_column(Col, N), [{white_space,Attrs,Ncs}|Toks]).
+
+scan_spcs([$\s|Cs], St, Line, Col, Toks, N) when N < 16 ->
+ scan_spcs(Cs, St, Line, Col, Toks, N+1);
+scan_spcs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_spcs/6}};
+scan_spcs(Cs, St, Line, Col, Toks, N) ->
+ white_space_end(Cs, St, Line, Col, Toks, N, spcs(N)).
+
+scan_tabs([$\t|Cs], St, Line, Col, Toks, N) when N < 10 ->
+ scan_tabs(Cs, St, Line, Col, Toks, N+1);
+scan_tabs([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun scan_tabs/6}};
+scan_tabs(Cs, St, Line, Col, Toks, N) ->
+ white_space_end(Cs, St, Line, Col, Toks, N, tabs(N)).
+
+skip_white_space([$\n|Cs], St, Line, Col, Toks, _N) ->
+ skip_white_space(Cs, St, Line+1, new_column(Col, 1), Toks, 0);
+skip_white_space([C|Cs], St, Line, Col, Toks, N) when ?WHITE_SPACE(C) ->
+ skip_white_space(Cs, St, Line, Col, Toks, N+1);
+skip_white_space([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun skip_white_space/6}};
+skip_white_space(Cs, St, Line, Col, Toks, N) ->
+ scan1(Cs, St, Line, incr_column(Col, N), Toks).
+
+%% Maybe \t and \s should break the loop.
+scan_white_space([$\n|_]=Cs, St, Line, Col, Toks, Ncs) ->
+ white_space_end(Cs, St, Line, Col, Toks, length(Ncs), lists:reverse(Ncs));
+scan_white_space([C|Cs], St, Line, Col, Toks, Ncs) when ?WHITE_SPACE(C) ->
+ scan_white_space(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_white_space([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_white_space/6}};
+scan_white_space(Cs, St, Line, Col, Toks, Ncs) ->
+ white_space_end(Cs, St, Line, Col, Toks, length(Ncs), lists:reverse(Ncs)).
+
+-compile({inline,[white_space_end/7]}).
+
+white_space_end(Cs, St, Line, Col, Toks, N, Ncs) ->
+ tok3(Cs, St, Line, Col, Toks, white_space, Ncs, Ncs, N).
+
+scan_char([$\\|Cs]=Cs0, St, Line, Col, Toks) ->
+ case scan_escape(Cs, incr_column(Col, 2)) of
+ more ->
+ {more,{[$$|Cs0],Col,Toks,Line,[],fun scan/6}};
+ {error,Ncs,Error,Ncol} ->
+ scan_error(Error, Line, Col, Line, Ncol, Ncs);
+ {eof,Ncol} ->
+ scan_error(char, Line, Col, Line, Ncol, eof);
+ {nl,Val,Str,Ncs,Ncol} ->
+ Attrs = attributes(Line, Col, St, ?STR(St, "$\\"++Str)), %"
+ Ntoks = [{char,Attrs,Val}|Toks],
+ scan1(Ncs, St, Line+1, Ncol, Ntoks);
+ {Val,Str,Ncs,Ncol} ->
+ Attrs = attributes(Line, Col, St, ?STR(St, "$\\"++Str)), %"
+ Ntoks = [{char,Attrs,Val}|Toks],
+ scan1(Ncs, St, Line, Ncol, Ntoks)
+ end;
+scan_char([$\n=C|Cs], St, Line, Col, Toks) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, [$$,C])),
+ scan1(Cs, St, Line+1, new_column(Col, 1), [{char,Attrs,C}|Toks]);
+scan_char([C|Cs], St, Line, Col, Toks) when ?UNICODE(C) ->
+ Attrs = attributes(Line, Col, St, ?STR(St, [$$,C])),
+ scan1(Cs, St, Line, incr_column(Col, 2), [{char,Attrs,C}|Toks]);
+scan_char([C|_Cs], _St, Line, Col, _Toks) when ?CHAR(C) ->
+ scan_error({illegal,character}, Line, Col, Line, incr_column(Col, 1), eof);
+scan_char([], _St, Line, Col, Toks) ->
+ {more,{[$$],Col,Toks,Line,[],fun scan/6}};
+scan_char(eof, _St, Line, Col, _Toks) ->
+ scan_error(char, Line, Col, Line, incr_column(Col, 1), eof).
+
+scan_string(Cs, St, Line, Col, Toks, {Wcs,Str,Line0,Col0}) ->
+ case scan_string0(Cs, St, Line, Col, $\", Str, Wcs) of %"
+ {more,Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ State = {Nwcs,Nstr,Line0,Col0},
+ {more,{Ncs,Ncol,Toks,Nline,State,fun scan_string/6}};
+ {char_error,Ncs,Error,Nline,Ncol,EndCol} ->
+ scan_error(Error, Nline, Ncol, Nline, EndCol, Ncs);
+ {error,Nline,Ncol,Nwcs,Ncs} ->
+ Estr = string:substr(Nwcs, 1, 16), % Expanded escape chars.
+ scan_error({string,$\",Estr}, Line0, Col0, Nline, Ncol, Ncs); %"
+ {Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ Attrs = attributes(Line0, Col0, St, Nstr),
+ scan1(Ncs, St, Nline, Ncol, [{string,Attrs,Nwcs}|Toks])
+ end.
+
+scan_qatom(Cs, St, Line, Col, Toks, {Wcs,Str,Line0,Col0}) ->
+ case scan_string0(Cs, St, Line, Col, $\', Str, Wcs) of %'
+ {more,Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ State = {Nwcs,Nstr,Line0,Col0},
+ {more,{Ncs,Ncol,Toks,Nline,State,fun scan_qatom/6}};
+ {char_error,Ncs,Error,Nline,Ncol,EndCol} ->
+ scan_error(Error, Nline, Ncol, Nline, EndCol, Ncs);
+ {error,Nline,Ncol,Nwcs,Ncs} ->
+ Estr = string:substr(Nwcs, 1, 16), % Expanded escape chars.
+ scan_error({string,$\',Estr}, Line0, Col0, Nline, Ncol, Ncs); %'
+ {Ncs,Nline,Ncol,Nstr,Nwcs} ->
+ case catch list_to_atom(Nwcs) of
+ A when is_atom(A) ->
+ Attrs = attributes(Line0, Col0, St, Nstr),
+ scan1(Ncs, St, Nline, Ncol, [{atom,Attrs,A}|Toks]);
+ _ ->
+ scan_error({illegal,atom}, Line0, Col0, Nline, Ncol, Ncs)
+ end
+ end.
+
+scan_string0(Cs, #erl_scan{text=false}, Line, no_col=Col, Q, [], Wcs) ->
+ scan_string_no_col(Cs, Line, Col, Q, Wcs);
+scan_string0(Cs, #erl_scan{text=true}, Line, no_col=Col, Q, Str, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Str, Wcs);
+scan_string0(Cs, St, Line, Col, Q, [], Wcs) ->
+ scan_string_col(Cs, St, Line, Col, Q, Wcs);
+scan_string0(Cs, _St, Line, Col, Q, Str, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Str, Wcs).
+
+%% Optimization. Col =:= no_col.
+scan_string_no_col([Q|Cs], Line, Col, Q, Wcs) ->
+ {Cs,Line,Col,_DontCare=[],lists:reverse(Wcs)};
+scan_string_no_col([$\n=C|Cs], Line, Col, Q, Wcs) ->
+ scan_string_no_col(Cs, Line+1, Col, Q, [C|Wcs]);
+scan_string_no_col([C|Cs], Line, Col, Q, Wcs) when C =/= $\\, ?UNICODE(C) ->
+ scan_string_no_col(Cs, Line, Col, Q, [C|Wcs]);
+scan_string_no_col(Cs, Line, Col, Q, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Wcs, Wcs).
+
+%% Optimization. Col =/= no_col.
+scan_string_col([Q|Cs], St, Line, Col, Q, Wcs0) ->
+ Wcs = lists:reverse(Wcs0),
+ Str = ?STR(St, [Q|Wcs++[Q]]),
+ {Cs,Line,Col+1,Str,Wcs};
+scan_string_col([$\n=C|Cs], St, Line, _xCol, Q, Wcs) ->
+ scan_string_col(Cs, St, Line+1, 1, Q, [C|Wcs]);
+scan_string_col([C|Cs], St, Line, Col, Q, Wcs) when C =/= $\\, ?UNICODE(C) ->
+ scan_string_col(Cs, St, Line, Col+1, Q, [C|Wcs]);
+scan_string_col(Cs, _St, Line, Col, Q, Wcs) ->
+ scan_string1(Cs, Line, Col, Q, Wcs, Wcs).
+
+%% Note: in those cases when a 'char_error' tuple is returned below it
+%% is tempting to skip over characters up to the first Q character,
+%% but then the end location of the error tuple would not correspond
+%% to the start location of the returned Rest string. (Maybe the end
+%% location could be modified, but that too is ugly.)
+scan_string1([Q|Cs], Line, Col, Q, Str0, Wcs0) ->
+ Wcs = lists:reverse(Wcs0),
+ Str = [Q|lists:reverse(Str0, [Q])],
+ {Cs,Line,incr_column(Col, 1),Str,Wcs};
+scan_string1([$\n=C|Cs], Line, Col, Q, Str, Wcs) ->
+ Ncol = new_column(Col, 1),
+ scan_string1(Cs, Line+1, Ncol, Q, [C|Str], [C|Wcs]);
+scan_string1([$\\|Cs]=Cs0, Line, Col, Q, Str, Wcs) ->
+ case scan_escape(Cs, Col) of
+ more ->
+ {more,Cs0,Line,Col,Str,Wcs};
+ {error,Ncs,Error,Ncol} ->
+ {char_error,Ncs,Error,Line,Col,incr_column(Ncol, 1)};
+ {eof,Ncol} ->
+ {error,Line,incr_column(Ncol, 1),lists:reverse(Wcs),eof};
+ {nl,Val,ValStr,Ncs,Ncol} ->
+ Nstr = lists:reverse(ValStr, [$\\|Str]),
+ Nwcs = [Val|Wcs],
+ scan_string1(Ncs, Line+1, Ncol, Q, Nstr, Nwcs);
+ {Val,ValStr,Ncs,Ncol} ->
+ Nstr = lists:reverse(ValStr, [$\\|Str]),
+ Nwcs = [Val|Wcs],
+ scan_string1(Ncs, Line, incr_column(Ncol, 1), Q, Nstr, Nwcs)
+ end;
+scan_string1([C|Cs], Line, no_col=Col, Q, Str, Wcs) when ?UNICODE(C) ->
+ scan_string1(Cs, Line, Col, Q, [C|Str], [C|Wcs]);
+scan_string1([C|Cs], Line, Col, Q, Str, Wcs) when ?UNICODE(C) ->
+ scan_string1(Cs, Line, Col+1, Q, [C|Str], [C|Wcs]);
+scan_string1([C|Cs], Line, Col, _Q, _Str, _Wcs) when ?CHAR(C) ->
+ {char_error,Cs,{illegal,character},Line,Col,incr_column(Col, 1)};
+scan_string1([]=Cs, Line, Col, _Q, Str, Wcs) ->
+ {more,Cs,Line,Col,Str,Wcs};
+scan_string1(eof, Line, Col, _Q, _Str, Wcs) ->
+ {error,Line,Col,lists:reverse(Wcs),eof}.
+
+-define(OCT(C), C >= $0, C =< $7).
+-define(HEX(C), C >= $0 andalso C =< $9 orelse
+ C >= $A andalso C =< $F orelse
+ C >= $a andalso C =< $f).
+
+%% \<1-3> octal digits
+scan_escape([O1,O2,O3|Cs], Col) when ?OCT(O1), ?OCT(O2), ?OCT(O3) ->
+ Val = (O1*8 + O2)*8 + O3 - 73*$0,
+ {Val,[O1,O2,O3],Cs,incr_column(Col, 3)};
+scan_escape([O1,O2], _Col) when ?OCT(O1), ?OCT(O2) ->
+ more;
+scan_escape([O1,O2|Cs], Col) when ?OCT(O1), ?OCT(O2) ->
+ Val = (O1*8 + O2) - 9*$0,
+ {Val,[O1,O2],Cs,incr_column(Col, 2)};
+scan_escape([O1], _Col) when ?OCT(O1) ->
+ more;
+scan_escape([O1|Cs], Col) when ?OCT(O1) ->
+ {O1 - $0,[O1],Cs,incr_column(Col, 1)};
+%% \x{<hex digits>}
+scan_escape([$x,${|Cs], Col) ->
+ scan_hex(Cs, incr_column(Col, 2), []);
+scan_escape([$x], _Col) ->
+ more;
+scan_escape([$x|eof], Col) ->
+ {eof,incr_column(Col, 1)};
+%% \x<2> hexadecimal digits
+scan_escape([$x,H1,H2|Cs], Col) when ?HEX(H1), ?HEX(H2) ->
+ Val = erlang:list_to_integer([H1,H2], 16),
+ {Val,[$x,H1,H2],Cs,incr_column(Col, 3)};
+scan_escape([$x,H1], _Col) when ?HEX(H1) ->
+ more;
+scan_escape([$x|Cs], Col) ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)};
+%% \^X -> CTL-X
+scan_escape([$^=C0,$\n=C|Cs], Col) ->
+ {nl,C,[C0,C],Cs,new_column(Col, 1)};
+scan_escape([$^=C0,C|Cs], Col) when ?CHAR(C) ->
+ Val = C band 31,
+ {Val,[C0,C],Cs,incr_column(Col, 2)};
+scan_escape([$^], _Col) ->
+ more;
+scan_escape([$^|eof], Col) ->
+ {eof,incr_column(Col, 1)};
+scan_escape([$\n=C|Cs], Col) ->
+ {nl,C,[C],Cs,new_column(Col, 1)};
+scan_escape([C0|Cs], Col) when ?UNICODE(C0) ->
+ C = escape_char(C0),
+ {C,[C0],Cs,incr_column(Col, 1)};
+scan_escape([C|Cs], Col) when ?CHAR(C) ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)};
+scan_escape([], _Col) ->
+ more;
+scan_escape(eof, Col) ->
+ {eof,Col}.
+
+scan_hex([C|Cs], no_col=Col, Wcs) when ?HEX(C) ->
+ scan_hex(Cs, Col, [C|Wcs]);
+scan_hex([C|Cs], Col, Wcs) when ?HEX(C) ->
+ scan_hex(Cs, Col+1, [C|Wcs]);
+scan_hex(Cs, Col, Wcs) ->
+ scan_esc_end(Cs, Col, Wcs, 16, "x{").
+
+scan_esc_end([$}|Cs], Col, Wcs0, B, Str0) ->
+ Wcs = lists:reverse(Wcs0),
+ case catch erlang:list_to_integer(Wcs, B) of
+ Val when ?UNICODE(Val) ->
+ {Val,Str0++Wcs++[$}],Cs,incr_column(Col, 1)};
+ _ ->
+ {error,Cs,{illegal,character},incr_column(Col, 1)}
+ end;
+scan_esc_end([], _Col, _Wcs, _B, _Str0) ->
+ more;
+scan_esc_end(eof, Col, _Wcs, _B, _Str0) ->
+ {eof,Col};
+scan_esc_end(Cs, Col, _Wcs, _B, _Str0) ->
+ {error,Cs,{illegal,character},Col}.
+
+escape_char($n) -> $\n; % \n = LF
+escape_char($r) -> $\r; % \r = CR
+escape_char($t) -> $\t; % \t = TAB
+escape_char($v) -> $\v; % \v = VT
+escape_char($b) -> $\b; % \b = BS
+escape_char($f) -> $\f; % \f = FF
+escape_char($e) -> $\e; % \e = ESC
+escape_char($s) -> $\s; % \s = SPC
+escape_char($d) -> $\d; % \d = DEL
+escape_char(C) -> C.
+
+scan_number([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_number(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_number([$.,C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_fraction(Cs, St, Line, Col, Toks, [C,$.|Ncs]);
+scan_number([$.]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_number/6}};
+scan_number([$#|Cs]=Cs0, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_integer(Ncs) of
+ B when B >= 2, B =< 1+$Z-$A+10 ->
+ Bcs = ?STR(St, Ncs++[$#]),
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[],Bcs});
+ B ->
+ Len = length(Ncs),
+ scan_error({base,B}, Line, Col, Line, incr_column(Col, Len), Cs0)
+ end;
+scan_number([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_number/6}};
+scan_number(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_integer(Ncs) of
+ N when is_integer(N) ->
+ tok3(Cs, St, Line, Col, Toks, integer, Ncs, N);
+ _ ->
+ Ncol = incr_column(Col, length(Ncs)),
+ scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
+ end.
+
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when ?DIGIT(C), C < $0+B ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when C >= $A, B > 10, C < $A+B-10 ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([C|Cs], St, Line, Col, Toks, {B,Ncs,Bcs})
+ when C >= $a, B > 10, C < $a+B-10 ->
+ scan_based_int(Cs, St, Line, Col, Toks, {B,[C|Ncs],Bcs});
+scan_based_int([]=Cs, _St, Line, Col, Toks, State) ->
+ {more,{Cs,Col,Toks,Line,State,fun scan_based_int/6}};
+scan_based_int(Cs, St, Line, Col, Toks, {B,Ncs0,Bcs}) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch erlang:list_to_integer(Ncs, B) of
+ N when is_integer(N) ->
+ tok3(Cs, St, Line, Col, Toks, integer, ?STR(St, Bcs++Ncs), N);
+ _ ->
+ Len = length(Bcs)+length(Ncs),
+ Ncol = incr_column(Col, Len),
+ scan_error({illegal,integer}, Line, Col, Line, Ncol, Cs)
+ end.
+
+scan_fraction([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_fraction(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_fraction([E|Cs], St, Line, Col, Toks, Ncs) when E =:= $e; E =:= $E ->
+ scan_exponent_sign(Cs, St, Line, Col, Toks, [E|Ncs]);
+scan_fraction([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_fraction/6}};
+scan_fraction(Cs, St, Line, Col, Toks, Ncs) ->
+ float_end(Cs, St, Line, Col, Toks, Ncs).
+
+scan_exponent_sign([C|Cs], St, Line, Col, Toks, Ncs) when C =:= $+; C =:= $- ->
+ scan_exponent(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_exponent_sign([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_exponent_sign/6}};
+scan_exponent_sign(Cs, St, Line, Col, Toks, Ncs) ->
+ scan_exponent(Cs, St, Line, Col, Toks, Ncs).
+
+scan_exponent([C|Cs], St, Line, Col, Toks, Ncs) when ?DIGIT(C) ->
+ scan_exponent(Cs, St, Line, Col, Toks, [C|Ncs]);
+scan_exponent([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_exponent/6}};
+scan_exponent(Cs, St, Line, Col, Toks, Ncs) ->
+ float_end(Cs, St, Line, Col, Toks, Ncs).
+
+float_end(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ case catch list_to_float(Ncs) of
+ F when is_float(F) ->
+ tok3(Cs, St, Line, Col, Toks, float, Ncs, F);
+ _ ->
+ Ncol = incr_column(Col, length(Ncs)),
+ scan_error({illegal,float}, Line, Col, Line, Ncol, Cs)
+ end.
+
+skip_comment([C|Cs], St, Line, Col, Toks, N) when C =/= $\n, ?CHAR(C) ->
+ case ?UNICODE(C) of
+ true ->
+ skip_comment(Cs, St, Line, Col, Toks, N+1);
+ false ->
+ Ncol = incr_column(Col, N+1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs)
+ end;
+skip_comment([]=Cs, _St, Line, Col, Toks, N) ->
+ {more,{Cs,Col,Toks,Line,N,fun skip_comment/6}};
+skip_comment(Cs, St, Line, Col, Toks, N) ->
+ scan1(Cs, St, Line, incr_column(Col, N), Toks).
+
+scan_comment([C|Cs], St, Line, Col, Toks, Ncs) when C =/= $\n, ?CHAR(C) ->
+ case ?UNICODE(C) of
+ true ->
+ scan_comment(Cs, St, Line, Col, Toks, [C|Ncs]);
+ false ->
+ Ncol = incr_column(Col, length(Ncs)+1),
+ scan_error({illegal,character}, Line, Col, Line, Ncol, Cs)
+ end;
+scan_comment([]=Cs, _St, Line, Col, Toks, Ncs) ->
+ {more,{Cs,Col,Toks,Line,Ncs,fun scan_comment/6}};
+scan_comment(Cs, St, Line, Col, Toks, Ncs0) ->
+ Ncs = lists:reverse(Ncs0),
+ tok3(Cs, St, Line, Col, Toks, comment, Ncs, Ncs).
+
+tok2(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, _Wcs, P) ->
+ scan1(Cs, St, Line, Col, [{P,Line}|Toks]);
+tok2(Cs, St, Line, Col, Toks, Wcs, P) ->
+ Attrs = attributes(Line, Col, St, Wcs),
+ scan1(Cs, St, Line, incr_column(Col, length(Wcs)), [{P,Attrs}|Toks]).
+
+tok2(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, _Wcs, P, _N) ->
+ scan1(Cs, St, Line, Col, [{P,Line}|Toks]);
+tok2(Cs, St, Line, Col, Toks, Wcs, P, N) ->
+ Attrs = attributes(Line, Col, St, Wcs),
+ scan1(Cs, St, Line, incr_column(Col, N), [{P,Attrs}|Toks]).
+
+tok3(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, Item, _S, Sym) ->
+ scan1(Cs, St, Line, Col, [{Item,Line,Sym}|Toks]);
+tok3(Cs, St, Line, Col, Toks, Item, String, Sym) ->
+ Token = {Item,attributes(Line, Col, St, String),Sym},
+ scan1(Cs, St, Line, incr_column(Col, length(String)), [Token|Toks]).
+
+tok3(Cs, #erl_scan{text = false}=St, Line, no_col=Col, Toks, Item,
+ _String, Sym, _Length) ->
+ scan1(Cs, St, Line, Col, [{Item,Line,Sym}|Toks]);
+tok3(Cs, St, Line, Col, Toks, Item, String, Sym, Length) ->
+ Token = {Item,attributes(Line, Col, St, String),Sym},
+ scan1(Cs, St, Line, incr_column(Col, Length), [Token|Toks]).
+
+scan_error(Error, Line, Col, EndLine, EndCol, Rest) ->
+ Loc = location(Line, Col),
+ EndLoc = location(EndLine, EndCol),
+ scan_error(Error, Loc, EndLoc, Rest).
+
+scan_error(Error, ErrorLoc, EndLoc, Rest) ->
+ {{error,{ErrorLoc,?MODULE,Error},EndLoc},Rest}.
+
+-compile({inline,[attributes/4]}).
+
+attributes(Line, no_col, #erl_scan{text = false}, _String) ->
+ Line;
+attributes(Line, no_col, #erl_scan{text = true}, String) ->
+ [{line,Line},{text,String}];
+attributes(Line, Col, #erl_scan{text = false}, _String) ->
+ {Line,Col};
+attributes(Line, Col, #erl_scan{text = true}, String) ->
+ [{line,Line},{column,Col},{text,String}].
+
+location(Line, no_col) ->
+ Line;
+location(Line, Col) when is_integer(Col) ->
+ {Line,Col}.
+
+-compile({inline,[incr_column/2,new_column/2]}).
+
+incr_column(no_col=Col, _N) ->
+ Col;
+incr_column(Col, N) when is_integer(Col) ->
+ Col + N.
+
+new_column(no_col=Col, _Ncol) ->
+ Col;
+new_column(Col, Ncol) when is_integer(Col) ->
+ Ncol.
+
+nl_spcs(2) -> "\n ";
+nl_spcs(3) -> "\n ";
+nl_spcs(4) -> "\n ";
+nl_spcs(5) -> "\n ";
+nl_spcs(6) -> "\n ";
+nl_spcs(7) -> "\n ";
+nl_spcs(8) -> "\n ";
+nl_spcs(9) -> "\n ";
+nl_spcs(10) -> "\n ";
+nl_spcs(11) -> "\n ";
+nl_spcs(12) -> "\n ";
+nl_spcs(13) -> "\n ";
+nl_spcs(14) -> "\n ";
+nl_spcs(15) -> "\n ";
+nl_spcs(16) -> "\n ";
+nl_spcs(17) -> "\n ".
+
+spcs(1) -> " ";
+spcs(2) -> " ";
+spcs(3) -> " ";
+spcs(4) -> " ";
+spcs(5) -> " ";
+spcs(6) -> " ";
+spcs(7) -> " ";
+spcs(8) -> " ";
+spcs(9) -> " ";
+spcs(10) -> " ";
+spcs(11) -> " ";
+spcs(12) -> " ";
+spcs(13) -> " ";
+spcs(14) -> " ";
+spcs(15) -> " ";
+spcs(16) -> " ".
+
+nl_tabs(2) -> "\n\t";
+nl_tabs(3) -> "\n\t\t";
+nl_tabs(4) -> "\n\t\t\t";
+nl_tabs(5) -> "\n\t\t\t\t";
+nl_tabs(6) -> "\n\t\t\t\t\t";
+nl_tabs(7) -> "\n\t\t\t\t\t\t";
+nl_tabs(8) -> "\n\t\t\t\t\t\t\t";
+nl_tabs(9) -> "\n\t\t\t\t\t\t\t\t";
+nl_tabs(10) -> "\n\t\t\t\t\t\t\t\t\t";
+nl_tabs(11) -> "\n\t\t\t\t\t\t\t\t\t\t".
+
+tabs(1) -> "\t";
+tabs(2) -> "\t\t";
+tabs(3) -> "\t\t\t";
+tabs(4) -> "\t\t\t\t";
+tabs(5) -> "\t\t\t\t\t";
+tabs(6) -> "\t\t\t\t\t\t";
+tabs(7) -> "\t\t\t\t\t\t\t";
+tabs(8) -> "\t\t\t\t\t\t\t\t";
+tabs(9) -> "\t\t\t\t\t\t\t\t\t";
+tabs(10) -> "\t\t\t\t\t\t\t\t\t\t".
+
+-spec reserved_word(Atom :: atom()) -> boolean().
+reserved_word('after') -> true;
+reserved_word('begin') -> true;
+reserved_word('case') -> true;
+reserved_word('try') -> true;
+reserved_word('cond') -> true;
+reserved_word('catch') -> true;
+reserved_word('andalso') -> true;
+reserved_word('orelse') -> true;
+reserved_word('end') -> true;
+reserved_word('fun') -> true;
+reserved_word('if') -> true;
+reserved_word('let') -> true;
+reserved_word('of') -> true;
+reserved_word('receive') -> true;
+reserved_word('when') -> true;
+reserved_word('bnot') -> true;
+reserved_word('not') -> true;
+reserved_word('div') -> true;
+reserved_word('rem') -> true;
+reserved_word('band') -> true;
+reserved_word('and') -> true;
+reserved_word('bor') -> true;
+reserved_word('bxor') -> true;
+reserved_word('bsl') -> true;
+reserved_word('bsr') -> true;
+reserved_word('or') -> true;
+reserved_word('xor') -> true;
+reserved_word(_) -> false.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
index 3456f0e9c6..cdcaa5f9e8 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/opaque/opaque_adt.erl
@@ -3,6 +3,8 @@
-opaque abc() :: 'a' | 'b' | 'c'.
+-spec atom_or_list(_) -> abc() | list().
+
atom_or_list(1) -> a;
atom_or_list(2) -> b;
atom_or_list(3) -> c;
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl
new file mode 100644
index 0000000000..7103847ae7
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_adt.erl
@@ -0,0 +1,17 @@
+-module(exact_adt).
+
+-export([exact_adt_set_type/1, exact_adt_set_type2/1]).
+
+-export_type([exact_adt/0]).
+
+-record(exact_adt, {}).
+
+-opaque exact_adt() :: #exact_adt{}.
+
+-spec exact_adt_set_type(_) -> exact_adt().
+
+exact_adt_set_type(G) -> G.
+
+-spec exact_adt_set_type2(exact_adt()) -> exact_adt().
+
+exact_adt_set_type2(G) -> G.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl
new file mode 100644
index 0000000000..5f7ab4f3aa
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl
@@ -0,0 +1,60 @@
+-module(exact_api).
+
+-export([new/0, exact_api_test/1, exact_api_new/1,
+ exact_adt_test/1, exact_adt_new/1]).
+
+-export_type([exact_api/0]).
+
+-record(digraph, {vtab = notable :: ets:tab(),
+ etab = notable :: ets:tab(),
+ ntab = notable :: ets:tab(),
+ cyclic = true :: boolean()}).
+
+-spec new() -> digraph().
+
+new() ->
+ A = #digraph{},
+ set_type(A), % does not have an opaque term as 1st argument
+ A.
+
+-spec set_type(digraph()) -> true.
+
+set_type(G) ->
+ digraph:delete(G).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% The derived spec of exact_api_new() is
+%%% -spec exact_api_new(exact_api:exact_api()) -> exact_api:exact_api().
+%%% This won't happen unless dialyzer_typesig uses
+%%% t_is_exactly_equal() rather than t_is_equal().
+%%% [As of R17B the latter considers two types equal if nothing but
+%%% their ?opaque tags differ.]
+
+-record(exact_api, {}).
+
+-opaque exact_api() :: #exact_api{}.
+
+exact_api_test(X) ->
+ #exact_api{} = exact_api_set_type(X). % OK
+
+exact_api_new(A) ->
+ A = #exact_api{},
+ _ = exact_api_set_type(A), % OK (the opaque type is local)
+ A.
+
+-spec exact_api_set_type(exact_api()) -> exact_api().
+
+exact_api_set_type(#exact_api{}=E) -> E.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+-record(exact_adt, {}).
+
+exact_adt_test(X) ->
+ #exact_adt{} = exact_adt:exact_adt_set_type(X). % breaks the opaqueness
+
+exact_adt_new(A) ->
+ A = #exact_adt{},
+ _ = exact_adt:exact_adt_set_type2(A), % does not have an opaque term as 1st argument
+ A.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl
new file mode 100644
index 0000000000..2b157483bc
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl
@@ -0,0 +1,65 @@
+-module(is_rec).
+
+-export([ri1/0, ri11/0, ri13/0, ri14/0, ri2/0, ri3/0, ri4/0, ri5/0,
+ ri6/0, ri7/0, ri8/0]).
+
+-record(r, {f1 :: integer()}).
+
+ri1() ->
+ A = simple1_adt:d1(),
+ is_record(A, r). % opaque term 1
+
+ri11() ->
+ A = simple1_adt:d1(),
+ I = '1-3'(),
+ is_record(A, r, I). % opaque term 1
+
+ri13() ->
+ A = simple1_adt:d1(),
+ if is_record(A, r) -> true end. % breaks the opaqueness
+
+ri14() ->
+ A = simple1_adt:d1(),
+ if is_record({A, 1}, r) -> true end. % breaks the opaqueness
+
+-type '1-3-t'() :: 1..3.
+
+-spec '1-3'() -> '1-3-t'().
+
+'1-3'() ->
+ random:uniform(3).
+
+
+-spec 'Atom'() -> atom().
+
+'Atom'() ->
+ a.
+
+ri2() ->
+ A = simple1_adt:d1(),
+ R = 'Atom'(),
+ is_record(A, R). % opaque term 1
+
+ri3() ->
+ A = simple1_adt:d1(),
+ is_record(A, A, 1). % opaque term 2
+
+ri4() ->
+ A = simple1_adt:d1(),
+ is_record(A, hipp:hopp(), 1). % opaque term 1
+
+ri5() ->
+ A = simple1_adt:d1(),
+ is_record(A, A, hipp:hopp()). % opaque term 2
+
+ri6() ->
+ A = simple1_adt:d1(),
+ if is_record(A, r) -> true end. % breaks opaqueness
+
+ri7() ->
+ A = simple1_adt:d1(),
+ if is_record({r, A}, r) -> true end. % A violates #r{}
+
+ri8() ->
+ A = simple1_adt:d1(),
+ is_record({A, 1}, r). % opaque term 1
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl
new file mode 100644
index 0000000000..ff80d6e99b
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_adt.erl
@@ -0,0 +1,28 @@
+-module(rec_adt).
+
+-export([f/0, r1/0]).
+
+-export_type([r1/0]).
+
+-export_type([f/0, op_t/0, a/0]).
+
+-opaque a() :: a | b.
+
+-record(r1,
+ {f1 :: a()}).
+
+-opaque r1() :: #r1{}.
+
+-opaque f() :: fun((_) -> _).
+
+-opaque op_t() :: integer().
+
+-spec f() -> f().
+
+f() ->
+ fun(_) -> 3 end.
+
+-spec r1() -> r1().
+
+r1() ->
+ #r1{f1 = a}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl
new file mode 100644
index 0000000000..d9b1d59f0c
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl
@@ -0,0 +1,77 @@
+-module(rec_api).
+
+-export([t1/0, t2/0, adt_t1/0, adt_t1/1, adt_r1/0,
+ t/1, t_adt/0, r/0, r_adt/0]).
+
+-export_type([{a,0},{r1,0}]).
+
+-export_type([f/0, op_t/0, r/0, tup/0]).
+
+-opaque a() :: a | b.
+
+-record(r1,
+ {f1 :: a()}).
+
+-opaque r1() :: #r1{}.
+
+t1() ->
+ A = #r1{f1 = a},
+ {r1, a} = A.
+
+t2() ->
+ A = {r1, 10}, % violates the type of #r1{}
+ {r1, 10} = A. % violates the type of #r1{}
+
+adt_t1() ->
+ R = rec_adt:r1(),
+ {r1, a} = R. % breaks the opaqueness
+
+-spec adt_t1(rec_adt:r1()) -> rec_adt:r1(). % invalid type spec
+
+adt_t1(R) ->
+ {r1, a} = R.
+
+-spec adt_r1() -> rec_adt:r1(). % invalid type spec
+
+adt_r1() ->
+ #r1{f1 = a}.
+
+-opaque f() :: fun((_) -> _).
+
+-opaque op_t() :: integer().
+
+-spec t(f()) -> _.
+
+t(A) ->
+ T = term(),
+ %% 3(T), % cannot test this: dialyzer_dep deliberately crashes
+ A(T).
+
+-spec term() -> op_t().
+
+term() ->
+ 3.
+
+t_adt() ->
+ A = rec_adt:f(),
+ T = term(),
+ A(T).
+
+-record(r, {f = fun(_) -> 3 end :: f(), o = 1 :: op_t()}).
+
+-opaque r() :: #r{}.
+
+-opaque tup() :: {'r', f(), op_t()}.
+
+-spec r() -> _.
+
+r() ->
+ {r, f(), 2}. % OK, f() is a local opaque type
+
+-spec f() -> f().
+
+f() ->
+ fun(_) -> 3 end.
+
+r_adt() ->
+ {r, rec_adt:f(), 2}. % breaks the opaqueness
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl
new file mode 100644
index 0000000000..21a277c1e9
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_adt.erl
@@ -0,0 +1,138 @@
+-module(simple1_adt).
+
+-export([d1/0, d2/0, i/0, n1/0, n2/0, o1/0, o2/0,
+ c1/0, c2/0, bit1/0, a/0, i1/0, tuple/0,
+ b1/0, b2/0, ty_i1/0]).
+
+-export_type([o1/0, o2/0, d1/0, d2/0]).
+
+-export_type([i1/0, i2/0, di1/0, di2/0]).
+
+-export_type([ty_i1/0, c1/0, c2/0]).
+
+-export_type([b1/0, b2/0]).
+
+-export_type([bit1/0]).
+
+-export_type([tuple1/0, a/0, i/0]).
+
+%% Equal:
+
+-opaque o1() :: a | b | c.
+
+-opaque o2() :: a | b | c.
+
+%% Disjoint:
+
+-opaque d1() :: a | b | c.
+
+-opaque d2() :: d | e | f.
+
+%% One common element:
+
+-opaque c1() :: a | b | c.
+
+-opaque c2() :: c | e | f.
+
+%% Equal integer range:
+
+-opaque i1() :: 1 | 2.
+
+-opaque i2() :: 1 | 2.
+
+%% Disjoint integer range:
+
+-opaque di1() :: 1 | 2.
+
+-opaque di2() :: 3 | 4.
+
+
+-type ty_i1() :: 1 | 2.
+
+%% Boolean types
+
+-opaque b1() :: boolean().
+
+-opaque b2() :: boolean().
+
+%% Binary types
+
+-opaque bit1() :: binary().
+
+%% Tuple types
+
+-opaque tuple1() :: tuple().
+
+%% Atom type
+
+-opaque a() :: atom().
+
+-opaque i() :: integer().
+
+-spec d1() -> d1().
+
+d1() -> a.
+
+-spec d2() -> d2().
+
+d2() -> d.
+
+-spec i() -> i().
+
+i() ->
+ 1.
+
+-spec n1() -> o1().
+
+n1() -> a.
+
+-spec n2() -> o2().
+
+n2() -> a.
+
+-spec o1() -> o1().
+
+o1() -> a.
+
+-spec o2() -> o2().
+
+o2() -> a.
+
+-spec c1() -> c1().
+
+c1() -> a.
+
+-spec c2() -> c2().
+
+c2() -> e.
+
+-spec bit1() -> bit1().
+
+bit1() ->
+ <<"hej">>.
+
+-spec a() -> a().
+
+a() ->
+ e.
+
+-spec i1() -> i1().
+
+i1() -> 1.
+
+-spec tuple() -> tuple1().
+
+tuple() -> {1,2}.
+
+-spec b1() -> b1().
+
+b1() -> true.
+
+-spec b2() -> b2().
+
+b2() -> false.
+
+-spec ty_i1() -> ty_i1().
+
+ty_i1() ->
+ 1.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl
new file mode 100644
index 0000000000..5135eb8e59
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl
@@ -0,0 +1,571 @@
+-module(simple1_api).
+
+-export([t1/1, adt_t1/1, t2/1, adt_t2/1, tup/0, t3/0, t4/0, t5/0, t6/0, t7/0,
+ t8/0, adt_t3/0, adt_t4/0, adt_t7/0, adt_t8/0, adt_t5/0,
+ c1/2, c2/2, c2/0, c3/0, c4/0, tt1/0, tt2/0,
+ cmp1/0, cmp2/0, cmp3/0, cmp4/0,
+ ty_cmp1/0, ty_cmp2/0, ty_cmp3/0, ty_cmp4/0,
+ f1/0, f2/0, adt_f1/0, adt_f2/0, f3/0, f4/0, adt_f3/0, adt_f4/0,
+ adt_f4_a/0, adt_f4_b/0,
+ bool_t1/0, bool_t2/0, bool_t3/0, bool_t4/0, bool_t5/1, bool_t6/1,
+ bool_t7/0, bool_adt_t1/0, bool_adt_t2/0, bool_adt_t5/1,
+ bool_adt_t6/1, bool_t8/0, bool_adt_t8/2, bool_t9/0, bool_adt_t9/2,
+ bit_t1/0, bit_adt_t1/0, bit_t3/1, bit_adt_t2/0, bit_adt_t3/1,
+ bit_t5/1, bit_t4/1, bit_adt_t4/1, bit_t5/0, bit_adt_t5/0,
+ call_f/1, call_f_adt/1, call_m_adt/1, call_m/1, call_f_i/1,
+ call_m_i/1, call_m_adt_i/1, call_f_adt_i/1,
+ eq1/0, eq2/0, c5/0, c6/2, c7/2, c8/0]).
+
+%%% Equal opaque types
+
+-export_type([o1/0, o2/0]).
+
+-export_type([d1/0, d2/0]).
+
+-opaque o1() :: a | b | c.
+
+-opaque o2() :: a | b | c.
+
+-export_type([i1/0, i2/0, di1/0, di2/0]).
+
+-export_type([b1/0, b2/0]).
+
+-export_type([bit1/0]).
+
+-export_type([a/0, i/0]).
+
+%% The derived spec is
+%% -spec t1('a' | 'b') -> simple1_api:o1('a') | simple1_api:o2('a').
+%% but that is not tested...
+
+t1(a) ->
+ o1();
+t1(b) ->
+ o2().
+
+-spec o1() -> o1().
+
+o1() -> a.
+
+-spec o2() -> o2().
+
+o2() -> a.
+
+%% The derived spec is
+%% -spec adt_t1('a' | 'b') -> simple1_adt:o1('a') | simple1_adt:o2('a').
+%% but that is not tested...
+
+adt_t1(a) ->
+ simple1_adt:o1();
+adt_t1(b) ->
+ simple1_adt:o2().
+
+%%% Disjunct opaque types
+
+-opaque d1() :: a | b | c.
+
+-opaque d2() :: d | e | f.
+
+%% -spec t2('a' | 'b') -> simple1_api:d1('a') | simple1_api:d2('d').
+
+t2(a) ->
+ d1();
+t2(b) ->
+ d2().
+
+-spec d1() -> d1().
+
+d1() -> a.
+
+-spec d2() -> d2().
+
+d2() -> d.
+
+%% -spec adt_t2('a' | 'b') -> simple1_adt:d1('a') | simple1_adt:d2('d').
+
+adt_t2(a) ->
+ simple1_adt:d1();
+adt_t2(b) ->
+ simple1_adt:d2().
+
+-spec tup() -> simple1_adt:tuple1(). % invalid type spec
+
+tup() ->
+ {a, b}.
+
+%%% Matching equal opaque types with different names
+
+t3() ->
+ A = n1(),
+ B = n2(),
+ A = A, % OK, of course
+ A = B. % OK since o1() and o2() are local opaque types
+
+t4() ->
+ A = n1(),
+ B = n2(),
+ true = A =:= A, % OK, of course
+ A =:= B. % OK since o1() and o2() are local opaque types
+
+t5() ->
+ A = d1(),
+ B = d2(),
+ A =:= B. % can never evaluate to true
+
+t6() ->
+ A = d1(),
+ B = d2(),
+ A = B. % can never succeed
+
+t7() ->
+ A = d1(),
+ B = d2(),
+ A =/= B. % OK (always true?)
+
+t8() ->
+ A = d1(),
+ B = d2(),
+ A /= B. % OK (always true?)
+
+-spec n1() -> o1().
+
+n1() -> a.
+
+-spec n2() -> o2().
+
+n2() -> a.
+
+adt_t3() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ true = A =:= A, % OK.
+ A =:= B. % opaque test, not OK
+
+adt_t4() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ A = A, % OK
+ A = B. % opaque term
+
+adt_t7() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ false = A =/= A, % OK
+ A =/= B. % opaque test, not OK
+
+adt_t8() ->
+ A = simple1_adt:n1(),
+ B = simple1_adt:n2(),
+ false = A /= A, % OK
+ A /= B. % opaque test, not OK
+
+adt_t5() ->
+ A = simple1_adt:c1(),
+ B = simple1_adt:c2(),
+ A =:= B. % opaque test, not OK
+
+%% Comparison in guard
+
+-spec c1(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c1(A, B) when A =< B -> true. % succ type of A and B is any() (type spec is OK)
+
+-spec c2(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c2(A, B) ->
+ if A =< B -> true end. % succ type of A and B is any() (type spec is OK)
+
+c2() ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d2(),
+ if A =< B -> ok end. % opaque term
+
+c3() ->
+ B = simple1_adt:d2(),
+ if a =< B -> ok end. % opaque term
+
+c4() ->
+ A = simple1_adt:d1(),
+ if A =< d -> ok end. % opaque term
+
+tt1() ->
+ A = o1(),
+ is_integer(A). % OK
+
+tt2() ->
+ A = simple1_adt:d1(),
+ is_integer(A). % breaks the opaqueness
+
+%% Comparison with integers
+
+-opaque i1() :: 1 | 2.
+
+-opaque i2() :: 1 | 2.
+
+-opaque di1() :: 1 | 2.
+
+-opaque di2() :: 3 | 4.
+
+-spec i1() -> i1().
+
+i1() -> 1.
+
+-type ty_i1() :: 1 | 2.
+
+-spec ty_i1() -> ty_i1().
+
+ty_i1() -> 1.
+
+cmp1() ->
+ A = i1(),
+ if A > 3 -> ok end. % can never succeed
+
+cmp2() ->
+ A = simple1_adt:i1(),
+ if A > 3 -> ok end. % opaque term
+
+cmp3() ->
+ A = i1(),
+ if A < 3 -> ok end.
+
+cmp4() ->
+ A = simple1_adt:i1(),
+ if A < 3 -> ok end. % opaque term
+
+%% -type
+
+ty_cmp1() ->
+ A = ty_i1(),
+ if A > 3 -> ok end. % can never succeed
+
+ty_cmp2() ->
+ A = simple1_adt:ty_i1(),
+ if A > 3 -> ok end. % can never succeed
+
+ty_cmp3() ->
+ A = ty_i1(),
+ if A < 3 -> ok end.
+
+ty_cmp4() ->
+ A = simple1_adt:ty_i1(),
+ if A < 3 -> ok end.
+
+%% is_function
+
+f1() ->
+ T = n1(),
+ if is_function(T) -> ok end. % can never succeed
+
+f2() ->
+ T = n1(),
+ is_function(T). % ok
+
+adt_f1() ->
+ T = simple1_adt:n1(),
+ if is_function(T) -> ok end. % breaks the opaqueness
+
+adt_f2() ->
+ T = simple1_adt:n1(),
+ is_function(T). % breaks the opaqueness
+
+f3() ->
+ A = i1(),
+ T = n1(),
+ if is_function(T, A) -> ok end. % can never succeed
+
+f4() ->
+ A = i1(),
+ T = n1(),
+ is_function(T, A). % ok
+
+adt_f3() ->
+ A = simple1_adt:i1(),
+ T = simple1_adt:n1(),
+ if is_function(T, A) -> ok end. % breaks the opaqueness
+
+adt_f4() ->
+ A = simple1_adt:i1(),
+ T = simple1_adt:n1(),
+ is_function(T, A). % breaks the opaqueness
+
+adt_f4_a() ->
+ A = simple1_adt:i1(),
+ T = n1(),
+ is_function(T, A). % opaque term
+
+
+adt_f4_b() ->
+ A = i1(),
+ T = simple1_adt:n1(),
+ is_function(T, A). % breaks the opaqueness
+
+%% A few Boolean examples
+
+bool_t1() ->
+ B = b2(),
+ if B -> ok end. % B =:= true can never succeed
+
+bool_t2() ->
+ A = b1(),
+ B = b2(),
+ if A and not B -> ok end.
+
+bool_t3() ->
+ A = b1(),
+ if not A -> ok end. % can never succeed
+
+bool_t4() ->
+ A = n1(),
+ if not ((A >= 1) and not (A < 1)) -> ok end. % can never succeed
+
+-spec bool_t5(i1()) -> integer().
+
+bool_t5(A) ->
+ if [not (A > 1)] =:=
+ [false]-> 1 end.
+
+-spec bool_t6(b1()) -> integer().
+
+bool_t6(A) ->
+ if [not A] =:=
+ [false]-> 1 end.
+
+-spec bool_t7() -> integer().
+
+bool_t7() ->
+ A = i1(),
+ if [not A] =:= % cannot succeed
+ [false]-> 1 end.
+
+bool_adt_t1() ->
+ B = simple1_adt:b2(),
+ if B -> ok end. % opaque term
+
+bool_adt_t2() ->
+ A = simple1_adt:b1(),
+ B = simple1_adt:b2(),
+ if A and not B -> ok end. % opaque term
+
+-spec bool_adt_t5(simple1_adt:i1()) -> integer().
+
+bool_adt_t5(A) ->
+ if [not (A > 1)] =:= % succ type of A is any() (type spec is OK)
+ [false]-> 1 end.
+
+-spec bool_adt_t6(simple1_adt:b1()) -> integer(). % invalid type spec
+
+bool_adt_t6(A) ->
+ if [not A] =:= % succ type of A is 'true'
+ [false]-> 1 end.
+
+-spec bool_t8() -> integer().
+
+bool_t8() ->
+ A = i1(),
+ if [A and A] =:= % cannot succeed
+ [false]-> 1 end.
+
+-spec bool_adt_t8(simple1_adt:b1(), simple1_adt:b2()) -> integer(). % invalid
+
+bool_adt_t8(A, B) ->
+ if [A and B] =:=
+ [false]-> 1 end.
+
+-spec bool_t9() -> integer().
+
+bool_t9() ->
+ A = i1(),
+ if [A or A] =:= % cannot succeed
+ [false]-> 1 end.
+
+-spec bool_adt_t9(simple1_adt:b1(), simple1_adt:b2()) -> integer(). % invalid
+
+bool_adt_t9(A, B) ->
+ if [A or B] =:=
+ [false]-> 1 end.
+
+-opaque b1() :: boolean().
+
+-opaque b2() :: boolean().
+
+-spec b1() -> b1().
+
+b1() -> true.
+
+-spec b2() -> b2().
+
+b2() -> false.
+
+%% Few (very few...) examples with bit syntax
+
+bit_t1() ->
+ A = i1(),
+ <<100:(A)>>.
+
+bit_adt_t1() ->
+ A = simple1_adt:i1(),
+ <<100:(A)>>. % breaks the opaqueness
+
+bit_t3(A) ->
+ B = i1(),
+ case none:none() of
+ <<A:B>> -> 1
+ end.
+
+bit_adt_t2() ->
+ A = simple1_adt:i1(),
+ case <<"hej">> of
+ <<_:A>> -> ok % breaks the opaqueness (but the message is strange)
+ end.
+
+
+bit_adt_t3(A) ->
+ B = simple1_adt:i1(),
+ case none:none() of
+ <<A: % breaks the opaqueness (the message is less than perfect)
+ B>> -> 1
+ end.
+
+bit_t5(A) ->
+ B = o1(),
+ case none:none() of
+ <<A:B>> -> 1 % breaks the opaqueness
+ end.
+
+-spec bit_t4(<<_:1>>) -> integer().
+
+bit_t4(A) ->
+ Sz = i1(),
+ case A of
+ <<_:Sz>> -> 1
+ end.
+
+-spec bit_adt_t4(<<_:1>>) -> integer().
+
+bit_adt_t4(A) ->
+ Sz = simple1_adt:i1(),
+ case A of
+ <<_:Sz>> -> 1 % breaks the opaqueness
+ end.
+
+bit_t5() ->
+ A = bit1(),
+ case A of
+ <<_/binary>> -> 1
+ end.
+
+bit_adt_t5() ->
+ A = simple1_adt:bit1(),
+ case A of
+ <<_/binary>> -> 1 % breaks the opaqueness
+ end.
+
+-opaque bit1() :: binary().
+
+-spec bit1() -> bit1().
+
+bit1() ->
+ <<"hej">>.
+
+%% Calls with variable module or function
+
+call_f(A) ->
+ A = a(),
+ foo:A(A).
+
+call_f_adt(A) ->
+ A = simple1_adt:a(),
+ foo:A(A). % breaks the opaqueness
+
+call_m(A) ->
+ A = a(),
+ A:foo(A).
+
+call_m_adt(A) ->
+ A = simple1_adt:a(),
+ A:foo(A). % breaks the opaqueness
+
+-opaque a() :: atom().
+
+-opaque i() :: integer().
+
+-spec a() -> a().
+
+a() ->
+ e.
+
+call_f_i(A) ->
+ A = i(),
+ foo:A(A). % A is not atom() but i()
+
+call_f_adt_i(A) ->
+ A = simple1_adt:i(),
+ foo:A(A). % A is not atom() but simple1_adt:i()
+
+call_m_i(A) ->
+ A = i(),
+ A:foo(A). % A is not atom() but i()
+
+call_m_adt_i(A) ->
+ A = simple1_adt:i(),
+ A:foo(A). % A is not atom() but simple1_adt:i()
+
+-spec eq1() -> integer().
+
+eq1() ->
+ A = simple1_adt:d2(),
+ B = simple1_adt:d1(),
+ if
+ A == B -> % opaque term
+ 0;
+ A == A ->
+ 1;
+ A =:= A -> % compiler finds this one cannot match
+ 2;
+ true -> % compiler finds this one cannot match
+ 3
+ end.
+
+eq2() ->
+ A = simple1_adt:d1(),
+ if
+ {A} >= {A} ->
+ 1;
+ A >= 3 -> % opaque term
+ 2;
+ A == 3 -> % opaque term
+ 3;
+ A =:= 3 -> % opaque term
+ 4;
+ A == A ->
+ 5;
+ A =:= A -> % compiler finds this one cannot match
+ 6
+ end.
+
+c5() ->
+ A = simple1_adt:d1(),
+ A < 3. % opaque term
+
+c6(A, B) ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d1(),
+ A =< B. % same type - no warning
+
+c7(A, B) ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:d2(),
+ A =< B. % opaque term
+
+c8() ->
+ D = digraph:new(),
+ E = ets:new(foo, []),
+ if {D, a} > {D, E} -> true; % OK
+ {1.0, 2} > {{D}, {E}} -> true; % OK
+ {D, 3} > {D, E} -> true % opaque term 2
+ end.
+
+-spec i() -> i().
+
+i() ->
+ 1.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl
new file mode 100644
index 0000000000..c86f6fd0b5
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple2_api.erl
@@ -0,0 +1,125 @@
+-module(simple2_api).
+
+-export([c1/2, c2/0, c3/0, c4/1, c5/1, c6/0, c6_b/0, c7/0, c7_b/0,
+ c7_c/0, c8/0, c9/0, c10/0, c11/0, c12/0, c13/0, c14/0, c15/0,
+ c16/0, c17/0, c18/0, c19/0, c20/0, c21/0, c22/0, c23/0,
+ c24/0, c25/0, c26/0]).
+
+-spec c1(simple1_adt:d1(), simple1_adt:d2()) -> boolean().
+
+c1(A, B) ->
+ {A} =< {B}. % succ type of A and B is any()
+
+c2() ->
+ A = simple1_adt:d1(),
+ erlang:make_tuple(1, A). % ok
+
+c3() ->
+ A = simple1_adt:d1(),
+ setelement(1, {A}, A). % ok
+
+c4(_) ->
+ A = simple1_adt:d1(),
+ halt(A). % ok (BIF fails...)
+
+c5(_) ->
+ A = simple1_adt:d1(),
+ [A] -- [A]. % ok
+
+c6() ->
+ A = simple1_adt:d1(),
+ A ! foo. % opaque term
+
+c6_b() ->
+ A = simple1_adt:d1(),
+ erlang:send(A, foo). % opaque term
+
+c7() ->
+ A = simple1_adt:d1(),
+ foo ! A. % ok
+
+c7_b() ->
+ A = simple1_adt:d1(),
+ erlang:send(foo, A). % ok
+
+c7_c() ->
+ A = simple1_adt:d1(),
+ erlang:send(foo, A, []). % ok
+
+c8() ->
+ A = simple1_adt:d1(),
+ A < 3. % opaque term
+
+c9() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(A, 1, []). % ok
+
+c10() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(1, A, []). % opaque term 2
+
+c11() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [A]). % ok
+
+c12() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, A). % opaque term 3
+
+c13() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [{A,2}]). % ok
+
+c14() ->
+ A = simple1_adt:tuple(),
+ lists:keysearch(key, 1, [{2,A}]). % ok
+
+c15() ->
+ A = simple1_adt:d1(),
+ lists:keysearch(key, 1, [A]). % ok
+
+c16() ->
+ A = simple1_adt:tuple(),
+ erlang:send(foo, A). % ok
+
+c17() ->
+ A = simple1_adt:tuple(),
+ lists:reverse([A]). % ok
+
+c18() ->
+ A = simple1_adt:tuple(),
+ lists:keyreplace(a, 1, [A], {1,2}). % ok
+
+c19() ->
+ A = simple1_adt:tuple(),
+ %% Problem. The spec says argument 4 is a tuple(). Fix that!
+ lists:keyreplace(a, 1, [{1,2}], A). % opaque term 4
+
+c20() ->
+ A = simple1_adt:tuple(),
+ lists:flatten(A). % opaque term 1
+
+c21() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([[{A}]]). % ok
+
+c22() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([[A]]). % ok
+
+c23() ->
+ A = simple1_adt:tuple(),
+ lists:flatten([A]). % ok
+
+c24() ->
+ A = simple1_adt:tuple(),
+ lists:flatten({A}). % will never return
+
+c25() ->
+ A = simple1_adt:d1(),
+ B = simple1_adt:tuple(),
+ if {A,3} > {A,B} -> true end. % opaque 2nd argument
+
+c26() ->
+ B = simple1_adt:tuple(),
+ tuple_to_list(B). % opaque term 1
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
index 5ca3202bba..d88f238190 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/union/union_adt.erl
@@ -1,10 +1,15 @@
-module(union_adt).
-export([new/1, new_a/1, new_rec/1]).
+%% Now (R17) that opaque types are no longer recognized by their shape
+%% this test case is rather meaningless.
+
-record(rec, {x = 42 :: integer()}).
-opaque u() :: 'aaa' | 'bbb' | #rec{}.
+-spec new(_) -> u().
+
new(a) -> aaa;
new(b) -> bbb;
new(X) when is_integer(X) ->
@@ -13,7 +18,11 @@ new(X) when is_integer(X) ->
%% the following two functions (and their uses in union_use.erl) test
%% that the return type is the opaque one and not just a subtype of it
+-spec new_a(_) -> u().
+
new_a(a) -> aaa.
+-spec new_rec(_) -> u().
+
new_rec(X) when is_integer(X) ->
#rec{x = X}.
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl
new file mode 100644
index 0000000000..c742990c6a
--- /dev/null
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_adt.erl
@@ -0,0 +1,5 @@
+-module(zoltan_adt).
+
+-export_type([id/0]).
+
+-opaque id() :: string().
diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
index b62b9de576..07c9f0a270 100644
--- a/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
+++ b/lib/dialyzer/test/opaque_SUITE_data/src/zoltan_kis3.erl
@@ -2,13 +2,13 @@
-export([f/0, gen/0]).
--opaque id() :: string().
+%-opaque id() :: string().
-spec f() -> char().
%% List pattern matching issue
f() -> [H|_T] = gen(), H.
--spec gen() -> id().
+-spec gen() -> zoltan_adt:id().
gen() -> "Dummy".
diff --git a/lib/dialyzer/test/small_SUITE_data/src/maps1.erl b/lib/dialyzer/test/small_SUITE_data/src/maps1.erl
new file mode 100644
index 0000000000..06ced5b69e
--- /dev/null
+++ b/lib/dialyzer/test/small_SUITE_data/src/maps1.erl
@@ -0,0 +1,41 @@
+%%
+%% File: maps1.erl
+%% Author: Björn-Egil Dahlberg
+%% Created: 2014-01-17
+%%
+
+-module(maps1).
+
+-compile([export_all]).
+
+
+-export([recv/3, decode/1]).
+
+%-record(can_pkt, {id, data :: binary(), timestamp}).
+
+-type can_pkt() :: #{ id => term(), data => binary(), timestamp => term() }.
+-type channel() :: atom() | pid() | {atom(),_}.
+
+-spec recv(<<_:64,_:_*8>>, fun((can_pkt()) -> R), channel()) -> R.
+recv(Packet, Fun, Chan) ->
+ #{id := Can_id, data := Can_data} = P = decode(Packet),
+ Fun(P).
+
+-spec decode(<<_:64,_:_*8>>) -> #{id => <<_:11>>,timestamp => char()}.
+decode(<<_:12, Len:4, Timestamp:16, 0:3, Id:11/bitstring, 0:18,
+ Data:Len/binary, _/binary>>) ->
+ #{id => Id, data => Data, timestamp => Timestamp}.
+
+
+
+t1() ->
+ #{bar=>fun t2/0}.
+
+t2() -> ok.
+
+-type map_state() :: #{ id => integer(), val => term() }.
+
+-spec update(map_state(), term()) -> map_state().
+
+update(#{ id := Id, val := Val } = M, X) when is_integer(Id) ->
+ M#{ val := [Val,X] }.
diff --git a/lib/dialyzer/vsn.mk b/lib/dialyzer/vsn.mk
index af32c5b901..95d2464e1d 100644
--- a/lib/dialyzer/vsn.mk
+++ b/lib/dialyzer/vsn.mk
@@ -1 +1 @@
-DIALYZER_VSN = 2.6.1
+DIALYZER_VSN = 2.7
diff --git a/lib/diameter/doc/src/diameter.xml b/lib/diameter/doc/src/diameter.xml
index 4804b07b30..7d6a28e51c 100644
--- a/lib/diameter/doc/src/diameter.xml
+++ b/lib/diameter/doc/src/diameter.xml
@@ -20,7 +20,8 @@
<header>
<copyright>
-<year>2011</year><year>2013</year>
+<year>2011</year>
+<year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -355,8 +356,8 @@ question communicates an address list as described in
<tag><c>{'Origin-State-Id', &dict_Unsigned32;}</c></tag>
<item>
<p>
-Origin-State-Id is optional but will be included in outgoing messages
-sent by diameter itself: CER/CEA, DWR/DWA and DPR/DPA.
+Origin-State-Id is optional but, if configured, will be included in
+outgoing CER/CEA and DWR/DWA messages.
Setting a value of <c>0</c> (zero) is equivalent to not setting a
value, as documented in &the_rfc;.
The function &origin_state_id;
diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl
index 282276827f..f76bd96c3c 100644
--- a/lib/diameter/src/base/diameter_peer_fsm.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -189,11 +189,7 @@ i({Ack, WPid, {M, Ref} = T, Opts, {Mask, Nodes, Dict0, Svc}}) ->
putr(?RESTRICT_KEY, Nodes),
Tmo = proplists:get_value(capx_timeout, Opts, ?EVENT_TIMEOUT),
- ?IS_TIMEOUT(Tmo) orelse ?ERROR({invalid, {capx_timeout, Tmo}}),
OnLengthErr = proplists:get_value(length_errors, Opts, exit),
- lists:member(OnLengthErr, [exit, handle, discard])
- orelse ?ERROR({invalid, {length_errors, OnLengthErr}}),
- %% Error checking is for configuration added in old code.
{TPid, Addrs} = start_transport(T, Rest, Svc),
@@ -782,10 +778,6 @@ set([_|_] = Ans, FailedAvp) ->
result_code(#diameter_header{is_error = true}, _) ->
{3008, []}; %% DIAMETER_INVALID_HDR_BITS
-result_code(_, [Bs|_])
- when is_bitstring(Bs) -> %% from old code
- {3009, []}; %% DIAMETER_INVALID_HDR_BITS
-
result_code(#diameter_header{version = ?DIAMETER_VERSION}, Es) ->
rc(Es);
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl
index 70e66537ed..1274e0fc48 100644
--- a/lib/diameter/src/base/diameter_service.erl
+++ b/lib/diameter/src/base/diameter_service.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -701,8 +701,7 @@ notify(Share, SvcName, T) ->
Nodes = remotes(Share),
[] /= Nodes andalso diameter_peer:notify(Nodes, SvcName, T).
%% Test for the empty list for upgrade reasons: there's no
-%% diameter_peer:notify/3 in old code so no call means no load order
-%% requirement.
+%% diameter_peer:notify/3 in old code.
remotes(false) ->
[];
diff --git a/lib/diameter/src/base/diameter_stats.erl b/lib/diameter/src/base/diameter_stats.erl
index b68d4af11f..8353613d32 100644
--- a/lib/diameter/src/base/diameter_stats.erl
+++ b/lib/diameter/src/base/diameter_stats.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -245,9 +245,6 @@ handle_call({read, Refs, Del}, _From, State) ->
handle_call({read, Refs}, _, State) ->
{reply, read_refs(Refs), State};
-handle_call({flush, Refs}, _From, State) -> %% from old code
- {reply, to_refdict(read(Refs, true)), State};
-
handle_call(Req, From, State) ->
?UNEXPECTED([Req, From]),
{reply, nok, State}.
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index 8b6f026b34..7fbb306b02 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2013. All Rights Reserved.
+%% Copyright Ericsson AB 2013-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -90,9 +90,6 @@ make_recvdata([SvcName, PeerT, Apps, Mask | _]) ->
peerT = PeerT,
apps = Apps,
sequence = Mask}.
-%% Take a list so that the caller (diameter_service) can be upgraded
-%% first if new members are added. Note that receive_message/4 might
-%% still get an old term from any watchdog started in old code.
%% ---------------------------------------------------------------------------
%% peer_up/1
@@ -305,15 +302,6 @@ errors(_, #diameter_packet{header = #diameter_header{version = V},
when V /= ?DIAMETER_VERSION ->
Pkt#diameter_packet{errors = [5011 | Es]};
-%% DIAMETER_INVALID_AVP_BITS 3009
-%% A request was received that included an AVP whose flag bits are
-%% set to an unrecognized value, or that is inconsistent with the
-%% AVP's definition.
-
-errors(_, #diameter_packet{errors = [Bs | Es]} = Pkt)
- when is_bitstring(Bs) -> %% from old code
- Pkt#diameter_packet{errors = [3009 | Es]};
-
%% DIAMETER_COMMAND_UNSUPPORTED 3001
%% The Request contained a Command-Code that the receiver did not
%% recognize or support. This MUST be used when a Diameter node
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index 9a1c8b6585..53e659e3f6 100644
--- a/lib/diameter/src/base/diameter_watchdog.erl
+++ b/lib/diameter/src/base/diameter_watchdog.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -157,8 +157,7 @@ wait(Ref, Pid) ->
config(Opts) ->
Config = proplists:get_value(watchdog_config, Opts, []),
- is_list(Config) orelse config_error({watchdog_config, Config}),
- lists:foldl(fun config/2, #config{}, Config). %% ^ added in old code
+ lists:foldl(fun config/2, #config{}, Config).
config({suspect, N}, Rec)
when ?IS_NATURAL(N) ->
@@ -166,10 +165,7 @@ config({suspect, N}, Rec)
config({okay, N}, Rec)
when ?IS_NATURAL(N) ->
- Rec#config{okay = N};
-
-config(T, _) -> %% added in old code
- config_error(T).
+ Rec#config{okay = N}.
%% start/5
@@ -252,17 +248,6 @@ handle_info(T, #watchdog{} = State) ->
?LOG(stop, T),
event(T, State, State#watchdog{status = down}),
{stop, {shutdown, T}, State}
- end;
-
-handle_info(T, State) -> %% started in old code
- handle_info(T, upgrade(State)).
-
-upgrade(State) ->
- case erlang:append_element(State, #config{}) of
- #watchdog{status = okay, config = #config{suspect = OS}} = S ->
- S#watchdog{num_dwa = OS};
- #watchdog{} = S ->
- S
end.
close({'DOWN', _, process, TPid, {shutdown, Reason}},
diff --git a/lib/diameter/src/diameter.appup.src b/lib/diameter/src/diameter.appup.src
index c7ae8a2828..0d421c229e 100644
--- a/lib/diameter/src/diameter.appup.src
+++ b/lib/diameter/src/diameter.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -20,62 +20,37 @@
{"%VSN%",
[
- {"0.9", [{restart_application, diameter}]}, %% R14B03
- {"0.10", [{restart_application, diameter}]}, %% R14B04
- {"1.0", [{restart_application, diameter}]}, %% R15B
- {"1.1", [{restart_application, diameter}]}, %% R15B01
- {"1.2", [{restart_application, diameter}]}, %% R15B02
- {"1.2.1", [{restart_application, diameter}]},
- {"1.3", [{restart_application, diameter}]}, %% R15B03
- {"1.3.1", [{restart_application, diameter}]},
- {"1.4", [{restart_application, diameter}]}, %% R16A
- {"1.4.1", [{restart_application, diameter}]}, %% R16B
+ {"0.9", [{restart_application, diameter}]}, %% R14B03
+ {"0.10", [{restart_application, diameter}]}, %% R14B04
+ {"1.0", [{restart_application, diameter}]}, %% R15B
+ {"1.1", [{restart_application, diameter}]}, %% R15B01
+ {"1.2", [{restart_application, diameter}]}, %% R15B02
+ {"1.2.1", [{restart_application, diameter}]},
+ {"1.3", [{restart_application, diameter}]}, %% R15B03
+ {"1.3.1", [{restart_application, diameter}]},
+ {"1.4", [{restart_application, diameter}]}, %% R16A
+ {"1.4.1", [{restart_application, diameter}]}, %% R16B
{"1.4.1.1", [{restart_application, diameter}]},
- {"1.4.2", [{load_module, diameter_codec}, %% R16B01
- {load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter_capx},
- {load_module, diameter_service},
- {load_module, diameter_peer_fsm},
- {load_module, diameter_watchdog},
- {load_module, diameter}]},
- {"1.4.3", [{load_module, diameter_capx}, %% R16B02
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_codec},
- {load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter}]},
- {"1.4.4", [{load_module, diameter_capx},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_config},
- {load_module, diameter}]}
+ {"1.4.2", [{restart_application, diameter}]}, %% R16B01
+ {"1.4.3", [{restart_application, diameter}]}, %% R16B02
+ {"1.4.4", [{restart_application, diameter}]},
+ {"1.5", [{restart_application, diameter}]} %% R16B03
],
[
- {"0.9", [{restart_application, diameter}]},
- {"0.10", [{restart_application, diameter}]},
- {"1.0", [{restart_application, diameter}]},
- {"1.1", [{restart_application, diameter}]},
- {"1.2", [{restart_application, diameter}]},
- {"1.2.1", [{restart_application, diameter}]},
- {"1.3", [{restart_application, diameter}]},
- {"1.3.1", [{restart_application, diameter}]},
- {"1.4", [{restart_application, diameter}]},
- {"1.4.1", [{restart_application, diameter}]},
+ {"0.9", [{restart_application, diameter}]},
+ {"0.10", [{restart_application, diameter}]},
+ {"1.0", [{restart_application, diameter}]},
+ {"1.1", [{restart_application, diameter}]},
+ {"1.2", [{restart_application, diameter}]},
+ {"1.2.1", [{restart_application, diameter}]},
+ {"1.3", [{restart_application, diameter}]},
+ {"1.3.1", [{restart_application, diameter}]},
+ {"1.4", [{restart_application, diameter}]},
+ {"1.4.1", [{restart_application, diameter}]},
{"1.4.1.1", [{restart_application, diameter}]},
- {"1.4.2", [{restart_application, diameter}]},
- {"1.4.3", [{load_module, diameter_types},
- {load_module, diameter_config},
- {load_module, diameter_codec},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter_capx},
- {load_module, diameter}]},
- {"1.4.4", [{load_module, diameter_capx},
- {load_module, diameter_config},
- {load_module, diameter_service},
- {load_module, diameter_watchdog},
- {load_module, diameter}]}
+ {"1.4.2", [{restart_application, diameter}]},
+ {"1.4.3", [{restart_application, diameter}]},
+ {"1.4.4", [{restart_application, diameter}]},
+ {"1.5", [{restart_application, diameter}]}
]
}.
diff --git a/lib/diameter/src/transport/diameter_sctp.erl b/lib/diameter/src/transport/diameter_sctp.erl
index 7a4830e40c..f5275e66b5 100644
--- a/lib/diameter/src/transport/diameter_sctp.erl
+++ b/lib/diameter/src/transport/diameter_sctp.erl
@@ -70,14 +70,14 @@
-type connect_option() :: {raddr, inet:ip_address()}
| {rport, inet:port_number()}
- | gen_sctp:open_option().
+ | term(). %% gen_sctp:open_option().
-type match() :: inet:ip_address()
| string()
| [match()].
-type listen_option() :: {accept, match()}
- | gen_sctp:open_option().
+ | term(). %% gen_sctp:open_option().
-type uint() :: non_neg_integer().
@@ -338,9 +338,6 @@ handle_call({{accept, Ref}, Pid}, _, #listener{ref = Ref,
{TPid, NewS} = accept(Ref, Pid, S),
{reply, {ok, TPid}, NewS#listener{count = N+1}};
-handle_call(T, From, {listener,_,_,_,_,_,_} = S) -> % started in old code
- handle_call(T, From, upgrade(S));
-
handle_call(_, _, State) ->
{reply, nok, State}.
@@ -359,10 +356,7 @@ handle_info(T, #transport{} = S) ->
{noreply, #transport{} = t(T,S)};
handle_info(T, #listener{} = S) ->
- {noreply, #listener{} = l(T,S)};
-
-handle_info(T, {listener,_,_,_,_,_,_} = S) -> % started in old code
- handle_info(T, upgrade(S)).
+ {noreply, #listener{} = l(T,S)}.
%% ---------------------------------------------------------------------------
%% # code_change/3
@@ -396,9 +390,6 @@ terminate(_, #listener{socket = Sock}) ->
%% ---------------------------------------------------------------------------
-upgrade(S) ->
- #listener{} = erlang:append_element(S, ?DEFAULT_ACCEPT).
-
putr(Key, Val) ->
put({?MODULE, Key}, Val).
@@ -502,8 +493,6 @@ transition({peeloff, Sock, {sctp, LSock, _RA, _RP, _Data} = Msg, Matches},
= S) ->
ok = accept_peer(Sock, Matches),
transition(Msg, S#transport{socket = Sock});
-transition({peeloff = T, _Sock, _Msg} = T, #transport{} = S) ->% from old code
- transition(erlang:append_element(T, ?DEFAULT_ACCEPT), S);
%% Incoming message.
transition({sctp, _Sock, _RA, _RP, Data}, #transport{socket = Sock} = S) ->
diff --git a/lib/diameter/vsn.mk b/lib/diameter/vsn.mk
index 9fda067f2b..54019fa46c 100644
--- a/lib/diameter/vsn.mk
+++ b/lib/diameter/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 2010-2013. All Rights Reserved.
+# Copyright Ericsson AB 2010-2014. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -18,5 +18,5 @@
# %CopyrightEnd%
APPLICATION = diameter
-DIAMETER_VSN = 1.5
+DIAMETER_VSN = 1.6
APP_VSN = $(APPLICATION)-$(DIAMETER_VSN)$(PRE_VSN)
diff --git a/lib/edoc/src/edoc_doclet.erl b/lib/edoc/src/edoc_doclet.erl
index ce1e94a26a..5653b5894b 100644
--- a/lib/edoc/src/edoc_doclet.erl
+++ b/lib/edoc/src/edoc_doclet.erl
@@ -200,7 +200,7 @@ source({M, P, Name, Path}, Dir, Suffix, Env, Set, Private, Hidden,
{Set, Error}
end;
R ->
- report("skipping source file '~ts': ~W.", [File, R, 15]),
+ report("skipping source file '~ts': ~P.", [File, R, 15]),
{Set, true}
end.
diff --git a/lib/edoc/src/edoc_layout.erl b/lib/edoc/src/edoc_layout.erl
index 7bd0615f5c..e164ff060f 100644
--- a/lib/edoc/src/edoc_layout.erl
+++ b/lib/edoc/src/edoc_layout.erl
@@ -829,6 +829,10 @@ t_type([#xmlElement{name = list, content = Es}]) ->
t_list(Es);
t_type([#xmlElement{name = nonempty_list, content = Es}]) ->
t_nonempty_list(Es);
+t_type([#xmlElement{name = map, content = Es}]) ->
+ t_map(Es);
+t_type([#xmlElement{name = map_field, content=Es}]) ->
+ t_map_field(Es);
t_type([#xmlElement{name = tuple, content = Es}]) ->
t_tuple(Es);
t_type([#xmlElement{name = 'fun', content = Es}]) ->
@@ -877,6 +881,12 @@ t_fun(Es) ->
["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
[") -> "] ++ t_utype(get_elem(type, Es))).
+t_map(Es) ->
+ ["#{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+
+t_map_field([K,V]) ->
+ [t_utype_elem(K) ++ " => " ++ t_utype_elem(V)].
+
t_record(E, Es) ->
Name = ["#"] ++ t_type(get_elem(atom, Es)),
case get_elem(field, Es) of
diff --git a/lib/edoc/src/edoc_lib.erl b/lib/edoc/src/edoc_lib.erl
index ca9df2b632..c46338a2e1 100644
--- a/lib/edoc/src/edoc_lib.erl
+++ b/lib/edoc/src/edoc_lib.erl
@@ -1032,7 +1032,7 @@ run_plugin(Name, Key, Default, Fun, Opts) when is_atom(Name) ->
{ok, Value} ->
Value;
R ->
- report("error in ~ts '~w': ~W.", [Name, Module, R, 20]),
+ report("error in ~ts '~w': ~P.", [Name, Module, R, 20]),
exit(error)
end.
diff --git a/lib/edoc/src/edoc_parser.yrl b/lib/edoc/src/edoc_parser.yrl
index 7762f2da7d..c6f8a04775 100644
--- a/lib/edoc/src/edoc_parser.yrl
+++ b/lib/edoc/src/edoc_parser.yrl
@@ -29,13 +29,14 @@ Nonterminals
start spec func_type utype_list utype_tuple utypes utype ptypes ptype
nutype function_name where_defs defs defs2 def typedef etype
throws qname ref aref mref lref pref var_list vars fields field
+utype_map utype_map_fields utype_map_field
futype_list bin_base_type bin_unit_type.
Terminals
atom float integer var an_var string start_spec start_typedef start_throws
start_ref
-'(' ')' ',' '.' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//' '*'
+'(' ')' ',' '.' '=>' '->' '{' '}' '[' ']' '|' '+' ':' '::' '=' '/' '//' '*'
'#' 'where' '<<' '>>' '..' '...'.
Rootsymbol start.
@@ -69,6 +70,14 @@ utype_list -> '(' utypes ')' : {lists:reverse('$2'), tok_line('$1')}.
futype_list -> utype_list : '$1'.
futype_list -> '(' '...' ')' : {[#t_var{name = '...'}], tok_line('$1')}.
+utype_map -> '#' '{' utype_map_fields '}' : lists:reverse('$3').
+
+utype_map_fields -> '$empty' : [].
+utype_map_fields -> utype_map_field : ['$1'].
+utype_map_fields -> utype_map_fields ',' utype_map_field : ['$3' | '$1'].
+
+utype_map_field -> utype '=>' utype : #t_map_field{ k_type = '$1', v_type = '$3'}.
+
utype_tuple -> '{' utypes '}' : lists:reverse('$2').
%% Produced in reverse order.
@@ -91,9 +100,10 @@ ptype -> var : #t_var{name = tok_val('$1')}.
ptype -> atom : #t_atom{val = tok_val('$1')}.
ptype -> integer: #t_integer{val = tok_val('$1')}.
ptype -> integer '..' integer: #t_integer_range{from = tok_val('$1'),
- to = tok_val('$3')}.
+ to = tok_val('$3')}.
ptype -> float: #t_float{val = tok_val('$1')}.
ptype -> utype_tuple : #t_tuple{types = '$1'}.
+ptype -> utype_map : #t_map{types = '$1'}.
ptype -> '[' ']' : #t_nil{}.
ptype -> '[' utype ']' : #t_list{type = '$2'}.
ptype -> '[' utype ',' '...' ']' : #t_nonempty_list{type = '$2'}.
@@ -462,3 +472,5 @@ throw_error(parse_param, L) ->
throw({error, L, "missing parameter name"});
throw_error({Where, E}, L) when is_list(Where) ->
throw({error,L,{"unknown error parsing ~ts: ~P.",[Where,E,15]}}).
+
+%% vim: ft=erlang
diff --git a/lib/edoc/src/edoc_scanner.erl b/lib/edoc/src/edoc_scanner.erl
index 754fcef643..6ff97a134c 100644
--- a/lib/edoc/src/edoc_scanner.erl
+++ b/lib/edoc/src/edoc_scanner.erl
@@ -137,6 +137,8 @@ scan1([$"|Cs0], Toks, Pos) -> % String
scan_error({illegal, string}, Pos)
end;
%% Punctuation characters and operators, first recognise multiples.
+scan1([$=,$>|Cs], Toks, Pos) ->
+ scan1(Cs, [{'=>',Pos}|Toks], Pos);
scan1([$<,$<|Cs], Toks, Pos) ->
scan1(Cs, [{'<<',Pos}|Toks], Pos);
scan1([$>,$>|Cs], Toks, Pos) ->
diff --git a/lib/edoc/src/edoc_specs.erl b/lib/edoc/src/edoc_specs.erl
index 5acf8ac0d5..466c9df951 100644
--- a/lib/edoc/src/edoc_specs.erl
+++ b/lib/edoc/src/edoc_specs.erl
@@ -358,6 +358,14 @@ d2e({type,_,tuple,any}) ->
d2e({type,_,binary,[Base,Unit]}) ->
#t_binary{base_size = element(3, Base),
unit_size = element(3, Unit)};
+d2e({type,_,map,any}) ->
+ #t_map{ types = []};
+d2e({type,_,map,Es}) ->
+ #t_map{ types = d2e(Es) };
+d2e({type,_,map_field_assoc,K,V}) ->
+ #t_map_field{ k_type = d2e(K), v_type=d2e(V) };
+d2e({type,_,map_field_exact,K,V}) ->
+ #t_map_field{ k_type = d2e(K), v_type=d2e(V) };
d2e({type,_,tuple,Ts0}) ->
Ts = d2e(Ts0),
typevar_anno(#t_tuple{types = Ts}, Ts);
@@ -476,6 +484,11 @@ xrecs(#t_fun{args = Args0, range = Range0}=T, P) ->
Args = xrecs(Args0, P),
Range = xrecs(Range0, P),
T#t_fun{args = Args, range = Range};
+xrecs(#t_map{ types = Ts0 }=T,P) ->
+ Ts = xrecs(Ts0, P),
+ T#t_map{ types = Ts };
+xrecs(#t_map_field{ k_type=Kt, v_type=Vt}=T, P) ->
+ T#t_map_field{ k_type=xrecs(Kt,P), v_type=xrecs(Vt,P)};
xrecs(#t_tuple{types = Types0}=T, P) ->
Types = xrecs(Types0, P),
T#t_tuple{types = Types};
diff --git a/lib/edoc/src/edoc_tags.erl b/lib/edoc/src/edoc_tags.erl
index eb41f1922a..74702102f0 100644
--- a/lib/edoc/src/edoc_tags.erl
+++ b/lib/edoc/src/edoc_tags.erl
@@ -460,6 +460,8 @@ check_type(#t_var{}, P, Ls, Ts) ->
check_types3(Ts, P, Ls);
check_type(#t_fun{args = Args, range = Range}, P, Ls, Ts) ->
check_type(Range, P, Ls, Args++Ts);
+check_type(#t_map{}, P, Ls, Ts) ->
+ check_types3(Ts, P, Ls);
check_type(#t_tuple{types = Types}, P, Ls, Ts) ->
check_types3(Types ++Ts, P, Ls);
check_type(#t_list{type = Type}, P, Ls, Ts) ->
diff --git a/lib/edoc/src/edoc_types.erl b/lib/edoc/src/edoc_types.erl
index 60c6cecb97..af8f1230fb 100644
--- a/lib/edoc/src/edoc_types.erl
+++ b/lib/edoc/src/edoc_types.erl
@@ -141,6 +141,10 @@ to_xml(#t_type{name = N, args = As}, Env) ->
to_xml(#t_fun{args = As, range = T}, Env) ->
{'fun', [{argtypes, map(fun wrap_utype/2, As, Env)},
wrap_utype(T, Env)]};
+to_xml(#t_map{ types = Ts}, Env) ->
+ {map, map(fun wrap_utype/2, Ts, Env)};
+to_xml(#t_map_field{ k_type=K, v_type=V}, Env) ->
+ {map_field, [wrap_utype(K,Env), wrap_utype(V, Env)]};
to_xml(#t_tuple{types = Ts}, Env) ->
{tuple, map(fun wrap_utype/2, Ts, Env)};
to_xml(#t_list{type = T}, Env) ->
diff --git a/lib/edoc/src/edoc_types.hrl b/lib/edoc/src/edoc_types.hrl
index 05c61d70ff..7fec10d936 100644
--- a/lib/edoc/src/edoc_types.hrl
+++ b/lib/edoc/src/edoc_types.hrl
@@ -155,3 +155,7 @@
%% @type t_paren() = #t_paren{a = list(), type = type()}
-record(t_paren, {a=[], type}). % parentheses
+
+-record(t_map, {a=[], types=[]}).
+-record(t_map_field, {a=[], k_type, v_type}).
+
diff --git a/lib/edoc/test/edoc_SUITE.erl b/lib/edoc/test/edoc_SUITE.erl
index 5b95c35756..b649971e99 100644
--- a/lib/edoc/test/edoc_SUITE.erl
+++ b/lib/edoc/test/edoc_SUITE.erl
@@ -22,12 +22,12 @@
init_per_group/2,end_per_group/2]).
%% Test cases
--export([build_std/1]).
+-export([build_std/1,build_map_module/1]).
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [build_std].
+ [build_std,build_map_module].
groups() ->
[].
@@ -45,25 +45,28 @@ end_per_group(_GroupName, Config) ->
Config.
-build_std(suite) ->
- [];
-build_std(doc) ->
- ["Build some documentation using standard EDoc layout"];
+build_std(suite) -> [];
+build_std(doc) -> ["Build some documentation using standard EDoc layout"];
build_std(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir, Config),
+ Overview1 = filename:join(DataDir, "overview.edoc"),
+ Overview2 = filename:join(DataDir, "overview.syntax_tools"),
+ PrivDir = ?config(priv_dir, Config),
- ?line DataDir = ?config(data_dir, Config),
- ?line Overview1 = filename:join(DataDir, "overview.edoc"),
- ?line Overview2 = filename:join(DataDir, "overview.syntax_tools"),
- ?line PrivDir = ?config(priv_dir, Config),
+ ok = edoc:application(edoc, [{overview, Overview1},
+ {def, {vsn,"TEST"}},
+ {dir, PrivDir}]),
- ?line ok = edoc:application(edoc, [{overview, Overview1},
- {def, {vsn,"TEST"}},
- {dir, PrivDir}]),
+ ok = edoc:application(syntax_tools, [{overview, Overview2},
+ {def, {vsn,"TEST"}},
+ {dir, PrivDir}]),
- ?line ok = edoc:application(syntax_tools, [{overview, Overview2},
- {def, {vsn,"TEST"}},
- {dir, PrivDir}]),
-
- ?line ok = edoc:application(xmerl, [{dir, PrivDir}]),
+ ok = edoc:application(xmerl, [{dir, PrivDir}]),
+ ok.
+build_map_module(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir, Config),
+ PrivDir = ?config(priv_dir, Config),
+ Filename = filename:join(DataDir, "map_module.erl"),
+ ok = edoc:file(Filename, [{dir, PrivDir}]),
ok.
diff --git a/lib/edoc/test/edoc_SUITE_data/map_module.erl b/lib/edoc/test/edoc_SUITE_data/map_module.erl
new file mode 100644
index 0000000000..94ee7e6f26
--- /dev/null
+++ b/lib/edoc/test/edoc_SUITE_data/map_module.erl
@@ -0,0 +1,27 @@
+-module(map_module).
+
+-export([foo1/1,foo2/3]).
+
+%% @type wazzup() = integer()
+%% @type some_type() = map()
+%% @type some_other_type() = {a, #{ list() => term()}}
+
+-type some_type() :: map().
+-type some_other_type() :: {'a', #{ list() => term()} }.
+-type wazzup() :: integer().
+
+-spec foo1(Map :: #{ 'a' => integer(), 'b' => term()}) -> term().
+
+%% @doc Gets value from map.
+
+foo1(#{ a:= 1, b := V}) -> V.
+
+%% @spec foo2(some_type(), Type2 :: some_other_type(), map()) -> Value
+%% @doc Gets value from map.
+
+-spec foo2(
+ Type1 :: some_type(),
+ Type2 :: some_other_type(),
+ Map :: #{ get => 'value', 'value' => binary()}) -> binary().
+
+foo2(Type1, {a,#{ "a" := _}}, #{get := value, value := B}) when is_map(Type1) -> B.
diff --git a/lib/erl_docgen/src/docgen_otp_specs.erl b/lib/erl_docgen/src/docgen_otp_specs.erl
index 3929e66515..3240edd68e 100644
--- a/lib/erl_docgen/src/docgen_otp_specs.erl
+++ b/lib/erl_docgen/src/docgen_otp_specs.erl
@@ -388,6 +388,8 @@ t_type([#xmlElement{name = nonempty_list, content = Es}]) ->
t_nonempty_list(Es);
t_type([#xmlElement{name = tuple, content = Es}]) ->
t_tuple(Es);
+t_type([#xmlElement{name = map}]) ->
+ t_map();
t_type([#xmlElement{name = 'fun', content = Es}]) ->
["fun("] ++ t_fun(Es) ++ [")"];
t_type([E = #xmlElement{name = record, content = Es}]) ->
@@ -430,6 +432,9 @@ t_nonempty_list(Es) ->
t_tuple(Es) ->
["{"] ++ seq(fun t_utype_elem/1, Es, ["}"]).
+t_map() ->
+ ["#{}"].
+
t_fun(Es) ->
["("] ++ seq(fun t_utype_elem/1, get_content(argtypes, Es),
[") -> "] ++ t_utype(get_elem(type, Es))).
diff --git a/lib/hipe/cerl/cerl_prettypr.erl b/lib/hipe/cerl/cerl_prettypr.erl
index fba9a48cda..22f5b8945a 100644
--- a/lib/hipe/cerl/cerl_prettypr.erl
+++ b/lib/hipe/cerl/cerl_prettypr.erl
@@ -62,7 +62,9 @@
receive_action/1, receive_clauses/1, receive_timeout/1,
seq_arg/1, seq_body/1, string_lit/1, try_arg/1,
try_body/1, try_vars/1, try_evars/1, try_handler/1,
- tuple_es/1, type/1, values_es/1, var_name/1]).
+ tuple_es/1, type/1, values_es/1, var_name/1,
+ map_es/1, map_pair_key/1, map_pair_val/1, map_pair_op/1
+ ]).
-define(PAPER, 76).
-define(RIBBON, 45).
@@ -424,6 +426,10 @@ lay_1(Node, Ctxt) ->
lay_cons(Node, Ctxt);
tuple ->
lay_tuple(Node, Ctxt);
+ map ->
+ lay_map(Node, Ctxt);
+ map_pair ->
+ lay_map_pair(Node, Ctxt);
'let' ->
lay_let(Node, Ctxt);
seq ->
@@ -589,6 +595,23 @@ lay_tuple(Node, Ctxt) ->
Ctxt, fun lay/2)),
floating(text("}")))).
+lay_map(Node, Ctxt) ->
+ beside(floating(text("~{")),
+ beside(par(seq(map_es(Node), floating(text(",")),
+ Ctxt, fun lay/2)),
+ floating(text("}~")))).
+
+lay_map_pair(Node, Ctxt) ->
+ K = map_pair_key(Node),
+ V = map_pair_val(Node),
+ OpTxt = case concrete(map_pair_op(Node)) of
+ assoc -> "::<";
+ exact -> "~<"
+ end,
+ beside(floating(text(OpTxt)),
+ beside(lay(K,Ctxt),beside(floating(text(",")), beside(lay(V,Ctxt),
+ floating(text(">")))))).
+
lay_let(Node, Ctxt) ->
V = lay_value_list(let_vars(Node), Ctxt),
D1 = par([follow(text("let"),
diff --git a/lib/hipe/cerl/erl_bif_types.erl b/lib/hipe/cerl/erl_bif_types.erl
index 42c7e360c1..8b610ac893 100644
--- a/lib/hipe/cerl/erl_bif_types.erl
+++ b/lib/hipe/cerl/erl_bif_types.erl
@@ -30,19 +30,17 @@
%-define(BITS, (hipe_rtl_arch:word_size() * 8) - ?TAG_IMMED1_SIZE).
-define(BITS, 128). %This is only in bsl to convert answer to pos_inf/neg_inf.
--define(TAG_IMMED1_SIZE, 4).
+-export([type/3, type/4, type/5, arg_types/3,
+ is_known/3, opaque_args/5, infinity_add/2]).
--export([type/3, type/4, arg_types/3,
- is_known/3, structure_inspecting_args/3, infinity_add/2]).
-
--import(erl_types, [number_max/1,
- number_min/1,
+-import(erl_types, [number_max/2,
+ number_min/2,
t_any/0,
t_arity/0,
t_atom/0,
t_atom/1,
t_atoms/1,
- t_atom_vals/1,
+ t_atom_vals/2,
t_binary/0,
t_bitstr/0,
t_boolean/0,
@@ -60,10 +58,11 @@
t_from_term/1,
t_fun/0,
t_fun/2,
- t_fun_args/1,
- t_fun_range/1,
+ t_fun_args/2,
+ t_fun_range/2,
t_identifier/0,
- t_inf/2,
+ t_has_opaque_subtype/2,
+ t_inf/3,
t_integer/0,
t_integer/1,
t_non_neg_fixnum/0,
@@ -71,30 +70,28 @@
t_pos_integer/0,
t_integers/1,
t_is_any/1,
- t_is_atom/1,
- t_is_binary/1,
- t_is_bitstr/1,
- t_is_boolean/1,
- t_is_cons/1,
- t_is_float/1,
- t_is_float/1,
- t_is_fun/1,
- t_is_integer/1,
- t_is_integer/1,
- t_is_nil/1,
+ t_is_atom/2,
+ t_is_binary/2,
+ t_is_bitstr/2,
+ t_is_boolean/2,
+ t_is_cons/2,
+ t_is_float/2,
+ t_is_fun/2,
+ t_is_integer/2,
+ t_is_nil/1, t_is_nil/2,
t_is_none/1,
t_is_none_or_unit/1,
- t_is_number/1,
- t_is_pid/1,
- t_is_port/1,
- t_is_maybe_improper_list/1,
- t_is_reference/1,
+ t_is_number/2,
+ t_is_pid/2,
+ t_is_port/2,
+ t_is_maybe_improper_list/2,
+ t_is_reference/2,
t_is_string/1,
t_is_subtype/2,
- t_is_tuple/1,
+ t_is_tuple/2,
t_list/0,
t_list/1,
- t_list_elements/1,
+ t_list_elements/2,
t_list_termination/1,
t_mfa/0,
t_module/0,
@@ -104,7 +101,7 @@
t_nonempty_list/0,
t_nonempty_list/1,
t_number/0,
- t_number_vals/1,
+ t_number_vals/2,
t_pid/0,
t_port/0,
t_maybe_improper_list/0,
@@ -115,9 +112,11 @@
t_sup/2,
t_tuple/0,
t_tuple/1,
- t_tuple_args/1,
- t_tuple_size/1,
- t_tuple_subtypes/1
+ t_tuple_args/2,
+ t_tuple_size/2,
+ t_tuple_subtypes/2,
+ t_is_map/2,
+ t_map/0
]).
-ifdef(DO_ERL_BIF_TYPES_TEST).
@@ -129,47 +128,61 @@
-spec type(atom(), atom(), arity()) -> erl_types:erl_type().
type(M, F, A) ->
- type(M, F, A, any_list(A)).
+ type(M, F, A, any_list(A), []).
%% Arguments should be checked for undefinedness, so we do not make
%% unnecessary overapproximations.
-spec type(atom(), atom(), arity(), [erl_types:erl_type()]) -> erl_types:erl_type().
+type(M, F, A, Xs) ->
+ type(M, F, A, Xs, 'universe').
+
+-type opaques() :: 'universe' | [erl_types:erl_type()].
+
+-type arg_types() :: [erl_types:erl_type()].
+
+-spec type(atom(), atom(), arity(), arg_types(), opaques()) ->
+ erl_types:erl_type().
+
%%-- erlang -------------------------------------------------------------------
-type(erlang, halt, 0, _) -> t_none();
-type(erlang, halt, 1, _) -> t_none();
-type(erlang, halt, 2, _) -> t_none();
-type(erlang, exit, 1, _) -> t_none();
-type(erlang, error, 1, _) -> t_none();
-type(erlang, error, 2, _) -> t_none();
-type(erlang, throw, 1, _) -> t_none();
-type(erlang, '==', 2, Xs = [X1, X2]) ->
- case t_is_atom(X1) andalso t_is_atom(X2) of
- true -> type(erlang, '=:=', 2, Xs);
+type(erlang, halt, 0, _, _) -> t_none();
+type(erlang, halt, 1, _, _) -> t_none();
+type(erlang, halt, 2, _, _) -> t_none();
+type(erlang, exit, 1, _, _) -> t_none();
+type(erlang, error, 1, _, _) -> t_none();
+type(erlang, error, 2, _, _) -> t_none();
+type(erlang, throw, 1, _, _) -> t_none();
+type(erlang, '==', 2, Xs = [X1, X2], Opaques) ->
+ case
+ t_is_atom(X1, Opaques) andalso t_is_atom(X2, Opaques)
+ of
+ true -> type(erlang, '=:=', 2, Xs, Opaques);
false ->
- case t_is_integer(X1) andalso t_is_integer(X2) of
- true -> type(erlang, '=:=', 2, Xs);
- false -> strict(Xs, t_boolean())
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
+ true -> type(erlang, '=:=', 2, Xs, Opaques);
+ false -> strict2(Xs, t_boolean())
end
end;
-type(erlang, '/=', 2, Xs = [X1, X2]) ->
- case t_is_atom(X1) andalso t_is_atom(X2) of
- true -> type(erlang, '=/=', 2, Xs);
+type(erlang, '/=', 2, Xs = [X1, X2], Opaques) ->
+ case
+ t_is_atom(X1, Opaques) andalso t_is_atom(X2, Opaques)
+ of
+ true -> type(erlang, '=/=', 2, Xs, Opaques);
false ->
- case t_is_integer(X1) andalso t_is_integer(X2) of
- true -> type(erlang, '=/=', 2, Xs);
- false -> strict(Xs, t_boolean())
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
+ true -> type(erlang, '=/=', 2, Xs, Opaques);
+ false -> strict2(Xs, t_boolean())
end
end;
-type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
+type(erlang, '=:=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_none(t_inf(Lhs, Rhs)) of
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
true -> t_atom('false');
false ->
- case t_is_atom(Lhs) andalso t_is_atom(Rhs) of
+ case t_is_atom(Lhs, Opaques) andalso t_is_atom(Rhs, Opaques) of
true ->
- case {t_atom_vals(Lhs), t_atom_vals(Rhs)} of
+ case {t_atom_vals(Lhs, Opaques), t_atom_vals(Rhs, Opaques)} of
{unknown, _} -> t_boolean();
{_, unknown} -> t_boolean();
{[X], [X]} -> t_atom('true');
@@ -181,16 +194,20 @@ type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
end
end;
false ->
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case
+ t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques)
+ of
false -> t_boolean();
true ->
- case {t_number_vals(Lhs), t_number_vals(Rhs)} of
+ case
+ {t_number_vals(Lhs, Opaques), t_number_vals(Rhs, Opaques)}
+ of
{[X], [X]} when is_integer(X) -> t_atom('true');
_ ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
Ans1 = (is_integer(LhsMin)
andalso is_integer(RhsMax)
andalso (LhsMin > RhsMax)),
@@ -205,15 +222,15 @@ type(erlang, '=:=', 2, Xs = [Lhs, Rhs]) ->
end
end
end,
- strict(Xs, Ans);
-type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '=/=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_none(t_inf(Lhs, Rhs)) of
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
true -> t_atom('true');
false ->
- case t_is_atom(Lhs) andalso t_is_atom(Rhs) of
+ case t_is_atom(Lhs, Opaques) andalso t_is_atom(Rhs, Opaques) of
true ->
- case {t_atom_vals(Lhs), t_atom_vals(Rhs)} of
+ case {t_atom_vals(Lhs, Opaques), t_atom_vals(Rhs, Opaques)} of
{unknown, _} -> t_boolean();
{_, unknown} -> t_boolean();
{[Val], [Val]} -> t_atom('false');
@@ -221,13 +238,15 @@ type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
t_sup([t_from_term(X =/= Y) || X <- LhsVals, Y <- RhsVals])
end;
false ->
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case
+ t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques)
+ of
false -> t_boolean();
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
Ans1 = (is_integer(LhsMin) andalso is_integer(RhsMax)
andalso (LhsMin > RhsMax)),
Ans2 = (is_integer(LhsMax) andalso is_integer(RhsMin)
@@ -244,15 +263,15 @@ type(erlang, '=/=', 2, Xs = [Lhs, Rhs]) ->
end
end
end,
- strict(Xs, Ans);
-type(erlang, '>', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '>', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -260,17 +279,17 @@ type(erlang, '>', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMax), is_integer(RhsMin), RhsMin >= LhsMax -> F;
true -> t_boolean()
end;
- false -> compare('>', Lhs, Rhs)
+ false -> compare('>', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '>=', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '>=', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -278,17 +297,17 @@ type(erlang, '>=', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMax), is_integer(RhsMin), RhsMin > LhsMax -> F;
true -> t_boolean()
end;
- false -> compare('>=', Lhs, Rhs)
+ false -> compare('>=', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '<', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '<', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -296,17 +315,17 @@ type(erlang, '<', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMin), is_integer(RhsMax), RhsMax =< LhsMin -> F;
true -> t_boolean()
end;
- false -> compare('<', Lhs, Rhs)
+ false -> compare('<', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '=<', 2, Xs = [Lhs, Rhs]) ->
+ strict2(Xs, Ans);
+type(erlang, '=<', 2, Xs = [Lhs, Rhs], Opaques) ->
Ans =
- case t_is_integer(Lhs) andalso t_is_integer(Rhs) of
+ case t_is_integer(Lhs, Opaques) andalso t_is_integer(Rhs, Opaques) of
true ->
- LhsMax = number_max(Lhs),
- LhsMin = number_min(Lhs),
- RhsMax = number_max(Rhs),
- RhsMin = number_min(Rhs),
+ LhsMax = number_max(Lhs, Opaques),
+ LhsMin = number_min(Lhs, Opaques),
+ RhsMax = number_max(Rhs, Opaques),
+ RhsMin = number_min(Rhs, Opaques),
T = t_atom('true'),
F = t_atom('false'),
if
@@ -314,232 +333,237 @@ type(erlang, '=<', 2, Xs = [Lhs, Rhs]) ->
is_integer(LhsMin), is_integer(RhsMax), RhsMax < LhsMin -> F;
true -> t_boolean()
end;
- false -> compare('=<', Lhs, Rhs)
+ false -> compare('=<', Lhs, Rhs, Opaques)
end,
- strict(Xs, Ans);
-type(erlang, '+', 1, Xs) ->
- strict(arg_types(erlang, '+', 1), Xs,
- fun ([X]) -> X end);
-type(erlang, '-', 1, Xs) ->
- strict(arg_types(erlang, '-', 1), Xs,
+ strict2(Xs, Ans);
+type(erlang, '+', 1, Xs, Opaques) ->
+ strict(erlang, '+', 1, Xs, fun ([X]) -> X end, Opaques);
+type(erlang, '-', 1, Xs, Opaques) ->
+ strict(erlang, '-', 1, Xs,
fun ([X]) ->
- case t_is_integer(X) of
+ case t_is_integer(X, Opaques) of
true -> type(erlang, '-', 2, [t_integer(0), X]);
false -> X
end
- end);
-type(erlang, '!', 2, Xs) ->
- strict(arg_types(erlang, '!', 2), Xs, fun ([_, X2]) -> X2 end);
-type(erlang, '+', 2, Xs) ->
- strict(arg_types(erlang, '+', 2), Xs,
+ end, Opaques);
+type(erlang, '!', 2, Xs, Opaques) ->
+ strict(erlang, '!', 2, Xs, fun ([_, X2]) -> X2 end, Opaques);
+type(erlang, '+', 2, Xs, Opaques) ->
+ strict(erlang, '+', 2, Xs,
fun ([X1, X2]) ->
- case arith('+', X1, X2) of
+ case arith('+', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '-', 2, Xs) ->
- strict(arg_types(erlang, '-', 2), Xs,
+ end, Opaques);
+type(erlang, '-', 2, Xs, Opaques) ->
+ strict(erlang, '-', 2, Xs,
fun ([X1, X2]) ->
- case arith('-', X1, X2) of
+ case arith('-', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '*', 2, Xs) ->
- strict(arg_types(erlang, '*', 2), Xs,
+ end, Opaques);
+type(erlang, '*', 2, Xs, Opaques) ->
+ strict(erlang, '*', 2, Xs,
fun ([X1, X2]) ->
- case arith('*', X1, X2) of
+ case arith('*', X1, X2, Opaques) of
{ok, T} -> T;
error ->
- case t_is_float(X1) orelse t_is_float(X2) of
+ case
+ t_is_float(X1, Opaques) orelse t_is_float(X2, Opaques)
+ of
true -> t_float();
false -> t_number()
end
end
- end);
-type(erlang, '/', 2, Xs) ->
- strict(arg_types(erlang, '/', 2), Xs,
- fun (_) -> t_float() end);
-type(erlang, 'div', 2, Xs) ->
- strict(arg_types(erlang, 'div', 2), Xs,
+ end, Opaques);
+type(erlang, '/', 2, Xs, Opaques) ->
+ strict(erlang, '/', 2, Xs, fun (_) -> t_float() end, Opaques);
+type(erlang, 'div', 2, Xs, Opaques) ->
+ strict(erlang, 'div', 2, Xs,
fun ([X1, X2]) ->
- case arith('div', X1, X2) of
+ case arith('div', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
-type(erlang, 'rem', 2, Xs) ->
- strict(arg_types(erlang, 'rem', 2), Xs,
+ end, Opaques);
+type(erlang, 'rem', 2, Xs, Opaques) ->
+ strict(erlang, 'rem', 2, Xs,
fun ([X1, X2]) ->
- case arith('rem', X1, X2) of
+ case arith('rem', X1, X2, Opaques) of
error -> t_non_neg_integer();
{ok, T} -> T
end
- end);
-type(erlang, '++', 2, Xs) ->
- strict(arg_types(erlang, '++', 2), Xs,
+ end, Opaques);
+type(erlang, '++', 2, Xs, Opaques) ->
+ strict(erlang, '++', 2, Xs,
fun ([X1, X2]) ->
- case t_is_nil(X1) of
+ case t_is_nil(X1, Opaques) of
true -> X2; % even if X2 is not a list
false ->
- case t_is_nil(X2) of
+ case t_is_nil(X2, Opaques) of
true -> X1;
false ->
- E1 = t_list_elements(X1),
- case t_is_cons(X1) of
+ E1 = t_list_elements(X1, Opaques),
+ case t_is_cons(X1, Opaques) of
true -> t_cons(E1, X2);
false ->
t_sup(X2, t_cons(E1, X2))
end
end
end
- end);
-type(erlang, '--', 2, Xs) ->
+ end, Opaques);
+type(erlang, '--', 2, Xs, Opaques) ->
%% We don't know which elements (if any) in X2 will be found and
%% removed from X1, even if they would have the same type. Thus, we
%% must assume that X1 can remain unchanged. However, if we succeed,
%% we know that X1 must be a proper list, but the result could
%% possibly be empty even if X1 is nonempty.
- strict(arg_types(erlang, '--', 2), Xs,
+ strict(erlang, '--', 2, Xs,
fun ([X1, X2]) ->
- case t_is_nil(X1) of
+ case t_is_nil(X1, Opaques) of
true -> t_nil();
false ->
- case t_is_nil(X2) of
+ case t_is_nil(X2, Opaques) of
true -> X1;
- false -> t_list(t_list_elements(X1))
+ false -> t_list(t_list_elements(X1, Opaques))
end
end
- end);
-type(erlang, 'and', 2, Xs) ->
- strict(arg_types(erlang, 'and', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'or', 2, Xs) ->
- strict(arg_types(erlang, 'or', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'xor', 2, Xs) ->
- strict(arg_types(erlang, 'xor', 2), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'not', 1, Xs) ->
- strict(arg_types(erlang, 'not', 1), Xs, fun (_) -> t_boolean() end);
-type(erlang, 'band', 2, Xs) ->
- strict(arg_types(erlang, 'band', 2), Xs,
+ end, Opaques);
+type(erlang, 'and', 2, Xs, Opaques) ->
+ strict(erlang, 'and', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'or', 2, Xs, Opaques) ->
+ strict(erlang, 'or', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'xor', 2, Xs, Opaques) ->
+ strict(erlang, 'xor', 2, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'not', 1, Xs, Opaques) ->
+ strict(erlang, 'not', 1, Xs, fun (_) -> t_boolean() end, Opaques);
+type(erlang, 'band', 2, Xs, Opaques) ->
+ strict(erlang, 'band', 2, Xs,
fun ([X1, X2]) ->
- case arith('band', X1, X2) of
+ case arith('band', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the smallest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'band', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_inf(X1, X2), t_byte()) end);
-type(erlang, 'bor', 2, Xs) ->
- strict(arg_types(erlang, 'bor', 2), Xs,
+%% strict(erlang, 'band', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_inf(X1, X2, Opaques), t_byte()) end, Opaques);
+type(erlang, 'bor', 2, Xs, Opaques) ->
+ strict(erlang, 'bor', 2, Xs,
fun ([X1, X2]) ->
- case arith('bor', X1, X2) of
+ case arith('bor', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the largest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'bor', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end);
-type(erlang, 'bxor', 2, Xs) ->
- strict(arg_types(erlang, 'bxor', 2), Xs,
+%% strict(erlang, 'bor', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end, Opaques);
+type(erlang, 'bxor', 2, Xs, Opaques) ->
+ strict(erlang, 'bxor', 2, Xs,
fun ([X1, X2]) ->
- case arith('bxor', X1, X2) of
+ case arith('bxor', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% The result is not wider than the largest argument. We need to
%% kill any value-sets in the result.
-%% strict(arg_types(erlang, 'bxor', 2), Xs,
-%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end);
-type(erlang, 'bsr', 2, Xs) ->
- strict(arg_types(erlang, 'bsr', 2), Xs,
+%% strict(erlang, 'bxor', 2, Xs,
+%% fun ([X1, X2]) -> t_sup(t_sup(X1, X2), t_byte()) end, Opaques);
+type(erlang, 'bsr', 2, Xs, Opaques) ->
+ strict(erlang, 'bsr', 2, Xs,
fun ([X1, X2]) ->
- case arith('bsr', X1, X2) of
+ case arith('bsr', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% If the first argument is unsigned (which is the case for
%% characters and bytes), the result is never wider. We need to kill
%% any value-sets in the result.
-%% strict(arg_types(erlang, 'bsr', 2), Xs,
-%% fun ([X, _]) -> t_sup(X, t_byte()) end);
-type(erlang, 'bsl', 2, Xs) ->
- strict(arg_types(erlang, 'bsl', 2), Xs,
+%% strict(erlang, 'bsr', 2, Xs,
+%% fun ([X, _]) -> t_sup(X, t_byte()) end, Opaques);
+type(erlang, 'bsl', 2, Xs, Opaques) ->
+ strict(erlang, 'bsl', 2, Xs,
fun ([X1, X2]) ->
- case arith('bsl', X1, X2) of
+ case arith('bsl', X1, X2, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% Not worth doing anything special here.
-%% strict(arg_types(erlang, 'bsl', 2), Xs, fun (_) -> t_integer() end);
-type(erlang, 'bnot', 1, Xs) ->
- strict(arg_types(erlang, 'bnot', 1), Xs,
+%% strict(erlang, 'bsl', 2, Xs, fun (_) -> t_integer() end, Opaques);
+type(erlang, 'bnot', 1, Xs, Opaques) ->
+ strict(erlang, 'bnot', 1, Xs,
fun ([X1]) ->
- case arith('bnot', X1) of
+ case arith('bnot', X1, Opaques) of
error -> t_integer();
{ok, T} -> T
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, abs, 1, Xs) ->
- strict(arg_types(erlang, abs, 1), Xs, fun ([X]) -> X end);
+type(erlang, abs, 1, Xs, Opaques) ->
+ strict(erlang, abs, 1, Xs, fun ([X]) -> X end, Opaques);
%% This returns (-X)-1, so it often gives a negative result.
-%% strict(arg_types(erlang, 'bnot', 1), Xs, fun (_) -> t_integer() end);
-type(erlang, append, 2, Xs) -> type(erlang, '++', 2, Xs); % alias
-type(erlang, apply, 2, Xs) ->
+%% strict(erlang, 'bnot', 1, Xs, fun (_) -> t_integer() end, Opaques);
+type(erlang, append, 2, Xs, _Opaques) -> type(erlang, '++', 2, Xs); % alias
+type(erlang, apply, 2, Xs, Opaques) ->
Fun = fun ([X, _Y]) ->
- case t_is_fun(X) of
+ case t_is_fun(X, Opaques) of
true ->
- t_fun_range(X);
+ t_fun_range(X, Opaques);
false ->
t_any()
end
end,
- strict(arg_types(erlang, apply, 2), Xs, Fun);
-type(erlang, apply, 3, Xs) ->
- strict(arg_types(erlang, apply, 3), Xs, fun (_) -> t_any() end);
+ strict(erlang, apply, 2, Xs, Fun, Opaques);
+type(erlang, apply, 3, Xs, Opaques) ->
+ strict(erlang, apply, 3, Xs, fun (_) -> t_any() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, binary_part, 2, Xs) ->
- strict(arg_types(erlang, binary_part, 2), Xs, fun (_) -> t_binary() end);
+type(erlang, binary_part, 2, Xs, Opaques) ->
+ strict(erlang, binary_part, 2, Xs, fun (_) -> t_binary() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, binary_part, 3, Xs) ->
- strict(arg_types(erlang, binary_part, 3), Xs, fun (_) -> t_binary() end);
+type(erlang, binary_part, 3, Xs, Opaques) ->
+ strict(erlang, binary_part, 3, Xs, fun (_) -> t_binary() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, bit_size, 1, Xs) ->
- strict(arg_types(erlang, bit_size, 1), Xs,
- fun (_) -> t_non_neg_integer() end);
+type(erlang, bit_size, 1, Xs, Opaques) ->
+ strict(erlang, bit_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, byte_size, 1, Xs) ->
- strict(arg_types(erlang, byte_size, 1), Xs,
- fun (_) -> t_non_neg_integer() end);
-type(erlang, disconnect_node, 1, Xs) ->
- strict(arg_types(erlang, disconnect_node, 1), Xs, fun (_) -> t_sup([t_boolean(), t_atom('ignored')]) end);
+type(erlang, byte_size, 1, Xs, Opaques) ->
+ strict(erlang, byte_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, disconnect_node, 1, Xs, Opaques) ->
+ strict(erlang, disconnect_node, 1, Xs,
+ fun (_) -> t_sup([t_boolean(), t_atom('ignored')]) end, Opaques);
%% Guard bif, needs to be here.
%% Also much more expressive than anything you could write in a spec...
-type(erlang, element, 2, Xs) ->
- strict(arg_types(erlang, element, 2), Xs,
+type(erlang, element, 2, Xs, Opaques) ->
+ strict(erlang, element, 2, Xs,
fun ([X1, X2]) ->
- case t_tuple_subtypes(X2) of
+ case t_tuple_subtypes(X2, Opaques) of
unknown -> t_any();
[_] ->
- Sz = t_tuple_size(X2),
- As = t_tuple_args(X2),
- case t_number_vals(X1) of
+ Sz = t_tuple_size(X2, Opaques),
+ As = t_tuple_args(X2, Opaques),
+ case t_number_vals(X1, Opaques) of
unknown -> t_sup(As);
Ns when is_list(Ns) ->
Fun = fun
@@ -553,165 +577,166 @@ type(erlang, element, 2, Xs) ->
Ts when is_list(Ts) ->
t_sup([type(erlang, element, 2, [X1, Y]) || Y <- Ts])
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, float, 1, Xs) ->
- strict(arg_types(erlang, float, 1), Xs, fun (_) -> t_float() end);
-type(erlang, fun_info, 1, Xs) ->
- strict(arg_types(erlang, fun_info, 1), Xs,
- fun (_) -> t_list(t_tuple([t_atom(), t_any()])) end);
-type(erlang, get_cookie, 0, _) -> t_atom(); % | t_atom('nocookie')
+type(erlang, float, 1, Xs, Opaques) ->
+ strict(erlang, float, 1, Xs, fun (_) -> t_float() end, Opaques);
+type(erlang, fun_info, 1, Xs, Opaques) ->
+ strict(erlang, fun_info, 1, Xs,
+ fun (_) -> t_list(t_tuple([t_atom(), t_any()])) end, Opaques);
+type(erlang, get_cookie, 0, _, _Opaques) -> t_atom(); % | t_atom('nocookie')
%% Guard bif, needs to be here.
-type(erlang, hd, 1, Xs) ->
- strict(arg_types(erlang, hd, 1), Xs, fun ([X]) -> t_cons_hd(X) end);
-type(erlang, integer_to_list, 2, Xs) ->
- strict(arg_types(erlang, integer_to_list, 2), Xs,
- fun (_) -> t_string() end);
-type(erlang, info, 1, Xs) -> type(erlang, system_info, 1, Xs); % alias
+type(erlang, hd, 1, Xs, Opaques) ->
+ strict(erlang, hd, 1, Xs, fun ([X]) -> t_cons_hd(X) end, Opaques);
+type(erlang, integer_to_list, 2, Xs, Opaques) ->
+ strict(erlang, integer_to_list, 2, Xs,
+ fun (_) -> t_string() end, Opaques);
+type(erlang, info, 1, Xs, _) -> type(erlang, system_info, 1, Xs); % alias
%% All type tests are guard BIF's and may be implemented in ways that
%% cannot be expressed in a type spec, why they are kept in erl_bif_types.
-type(erlang, is_atom, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_atom(Y) end, t_atom()) end,
- strict(arg_types(erlang, is_atom, 1), Xs, Fun);
-type(erlang, is_binary, 1, Xs) ->
+type(erlang, is_atom, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_atom(Y, Opaques) end,
+ t_atom(), Opaques)
+ end,
+ strict(erlang, is_atom, 1, Xs, Fun, Opaques);
+type(erlang, is_binary, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_binary(Y) end, t_binary())
+ check_guard(X, fun (Y) -> t_is_binary(Y, Opaques) end,
+ t_binary(), Opaques)
end,
- strict(arg_types(erlang, is_binary, 1), Xs, Fun);
-type(erlang, is_bitstring, 1, Xs) ->
+ strict(erlang, is_binary, 1, Xs, Fun, Opaques);
+type(erlang, is_bitstring, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_bitstr(Y) end, t_bitstr())
+ check_guard(X, fun (Y) -> t_is_bitstr(Y, Opaques) end,
+ t_bitstr(), Opaques)
end,
- strict(arg_types(erlang, is_bitstring, 1), Xs, Fun);
-type(erlang, is_boolean, 1, Xs) ->
+ strict(erlang, is_bitstring, 1, Xs, Fun, Opaques);
+type(erlang, is_boolean, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_boolean(Y) end, t_boolean())
+ check_guard(X, fun (Y) -> t_is_boolean(Y, Opaques) end,
+ t_boolean(), Opaques)
end,
- strict(arg_types(erlang, is_boolean, 1), Xs, Fun);
-type(erlang, is_float, 1, Xs) ->
+ strict(erlang, is_boolean, 1, Xs, Fun, Opaques);
+type(erlang, is_float, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_float(Y) end, t_float())
+ check_guard(X, fun (Y) -> t_is_float(Y, Opaques) end,
+ t_float(), Opaques)
end,
- strict(arg_types(erlang, is_float, 1), Xs, Fun);
-type(erlang, is_function, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_fun(Y) end, t_fun()) end,
- strict(arg_types(erlang, is_function, 1), Xs, Fun);
-type(erlang, is_function, 2, Xs) ->
+ strict(erlang, is_float, 1, Xs, Fun, Opaques);
+type(erlang, is_function, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_fun(Y, Opaques) end,
+ t_fun(), Opaques)
+ end,
+ strict(erlang, is_function, 1, Xs, Fun, Opaques);
+type(erlang, is_function, 2, Xs, Opaques) ->
Fun = fun ([FunType, ArityType]) ->
- case t_number_vals(ArityType) of
+ case t_number_vals(ArityType, Opaques) of
unknown -> t_boolean();
[Val] ->
FunConstr = t_fun(any_list(Val), t_any()),
Fun2 = fun (X) ->
t_is_subtype(X, FunConstr) andalso (not t_is_none(X))
end,
- check_guard_single(FunType, Fun2, FunConstr);
+ check_guard_single(FunType, Fun2, FunConstr, Opaques);
IntList when is_list(IntList) -> t_boolean() %% true?
end
end,
- strict(arg_types(erlang, is_function, 2), Xs, Fun);
-type(erlang, is_integer, 1, Xs) ->
+ strict(erlang, is_function, 2, Xs, Fun, Opaques);
+type(erlang, is_integer, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_integer(Y) end, t_integer())
+ check_guard(X, fun (Y) -> t_is_integer(Y, Opaques) end,
+ t_integer(), Opaques)
end,
- strict(arg_types(erlang, is_integer, 1), Xs, Fun);
-type(erlang, is_list, 1, Xs) ->
+ strict(erlang, is_integer, 1, Xs, Fun, Opaques);
+type(erlang, is_list, 1, Xs, Opaques) ->
Fun = fun (X) ->
- Fun2 = fun (Y) -> t_is_maybe_improper_list(Y) end,
- check_guard(X, Fun2, t_maybe_improper_list())
+ Fun2 = fun (Y) -> t_is_maybe_improper_list(Y, Opaques) end,
+ check_guard(X, Fun2, t_maybe_improper_list(), Opaques)
end,
- strict(arg_types(erlang, is_list, 1), Xs, Fun);
-type(erlang, is_number, 1, Xs) ->
+ strict(erlang, is_list, 1, Xs, Fun, Opaques);
+type(erlang, is_map, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_map(Y, Opaques) end,
+ t_map(), Opaques) end,
+ strict(erlang, is_map, 1, Xs, Fun, Opaques);
+type(erlang, is_number, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_number(Y) end, t_number())
+ check_guard(X, fun (Y) -> t_is_number(Y, Opaques) end,
+ t_number(), Opaques)
end,
- strict(arg_types(erlang, is_number, 1), Xs, Fun);
-type(erlang, is_pid, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_pid(Y) end, t_pid()) end,
- strict(arg_types(erlang, is_pid, 1), Xs, Fun);
-type(erlang, is_port, 1, Xs) ->
- Fun = fun (X) -> check_guard(X, fun (Y) -> t_is_port(Y) end, t_port()) end,
- strict(arg_types(erlang, is_port, 1), Xs, Fun);
-type(erlang, is_record, 2, Xs) ->
+ strict(erlang, is_number, 1, Xs, Fun, Opaques);
+type(erlang, is_pid, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_pid(Y, Opaques) end,
+ t_pid(), Opaques)
+ end,
+ strict(erlang, is_pid, 1, Xs, Fun, Opaques);
+type(erlang, is_port, 1, Xs, Opaques) ->
+ Fun = fun (X) ->
+ check_guard(X, fun (Y) -> t_is_port(Y, Opaques) end,
+ t_port(), Opaques)
+ end,
+ strict(erlang, is_port, 1, Xs, Fun, Opaques);
+type(erlang, is_record, 2, Xs, Opaques) ->
Fun = fun ([X, Y]) ->
- case t_is_tuple(X) of
+ case t_is_tuple(X, Opaques) of
false ->
- case t_is_none(t_inf(t_tuple(), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
true ->
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_boolean();
[Tuple] ->
- case t_tuple_args(Tuple) of
+ case t_tuple_args(Tuple, Opaques) of
%% any -> t_boolean();
- [Tag|_] ->
- case t_is_atom(Tag) of
- false ->
- TagAtom = t_inf(Tag, t_atom()),
- case t_is_none(TagAtom) of
- true -> t_atom('false');
- false -> t_boolean()
- end;
- true ->
- case t_atom_vals(Tag) of
- [RealTag] ->
- case t_atom_vals(Y) of
- [RealTag] -> t_atom('true');
- _ -> t_boolean()
- end;
- _ -> t_boolean()
- end
- end
+ [Tag|_] -> check_record_tag(Tag, Y, Opaques)
end;
List when length(List) >= 2 ->
t_sup([type(erlang, is_record, 2, [T, Y]) || T <- List])
end
end
end,
- strict(arg_types(erlang, is_record, 2), Xs, Fun);
-type(erlang, is_record, 3, Xs) ->
+ strict(erlang, is_record, 2, Xs, Fun, Opaques);
+type(erlang, is_record, 3, Xs, Opaques) ->
Fun = fun ([X, Y, Z]) ->
- Arity = t_number_vals(Z),
- case t_is_tuple(X) of
+ Arity = t_number_vals(Z, Opaques),
+ case t_is_tuple(X, Opaques) of
false when length(Arity) =:= 1 ->
[RealArity] = Arity,
- case t_is_none(t_inf(t_tuple(RealArity), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(RealArity), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
false ->
- case t_is_none(t_inf(t_tuple(), X)) of
- true -> t_atom('false');
+ case t_is_none(t_inf(t_tuple(), X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
false -> t_boolean()
end;
true when length(Arity) =:= 1 ->
[RealArity] = Arity,
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_boolean();
[Tuple] ->
- case t_tuple_args(Tuple) of
+ case t_tuple_args(Tuple, Opaques) of
%% any -> t_boolean();
Args when length(Args) =:= RealArity ->
- Tag = hd(Args),
- case t_is_atom(Tag) of
- false ->
- TagAtom = t_inf(Tag, t_atom()),
- case t_is_none(TagAtom) of
- true -> t_atom('false');
- false -> t_boolean()
- end;
- true ->
- case t_atom_vals(Tag) of
- [RealTag] ->
- case t_atom_vals(Y) of
- [RealTag] -> t_atom('true');
- _ -> t_boolean()
- end;
- _ -> t_boolean()
- end
- end;
+ check_record_tag(hd(Args), Y, Opaques);
Args when length(Args) =/= RealArity ->
t_atom('false')
end;
@@ -722,62 +747,69 @@ type(erlang, is_record, 3, Xs) ->
t_boolean()
end
end,
- strict(arg_types(erlang, is_record, 3), Xs, Fun);
-type(erlang, is_reference, 1, Xs) ->
+ strict(erlang, is_record, 3, Xs, Fun, Opaques);
+type(erlang, is_reference, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_reference(Y) end, t_reference())
+ check_guard(X, fun (Y) -> t_is_reference(Y, Opaques) end,
+ t_reference(), Opaques)
end,
- strict(arg_types(erlang, is_reference, 1), Xs, Fun);
-type(erlang, is_tuple, 1, Xs) ->
+ strict(erlang, is_reference, 1, Xs, Fun, Opaques);
+type(erlang, is_tuple, 1, Xs, Opaques) ->
Fun = fun (X) ->
- check_guard(X, fun (Y) -> t_is_tuple(Y) end, t_tuple())
+ check_guard(X, fun (Y) -> t_is_tuple(Y, Opaques) end,
+ t_tuple(), Opaques)
end,
- strict(arg_types(erlang, is_tuple, 1), Xs, Fun);
+ strict(erlang, is_tuple, 1, Xs, Fun, Opaques);
%% Guard bif, needs to be here.
-type(erlang, length, 1, Xs) ->
- strict(arg_types(erlang, length, 1), Xs, fun (_) -> t_non_neg_fixnum() end);
-type(erlang, make_tuple, 2, Xs) ->
- strict(arg_types(erlang, make_tuple, 2), Xs,
+type(erlang, length, 1, Xs, Opaques) ->
+ strict(erlang, length, 1, Xs, fun (_) -> t_non_neg_fixnum() end, Opaques);
+%% Guard bif, needs to be here.
+type(erlang, map_size, 1, Xs, Opaques) ->
+ strict(erlang, map_size, 1, Xs, fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, make_tuple, 2, Xs, Opaques) ->
+ strict(erlang, make_tuple, 2, Xs,
fun ([Int, _]) ->
- case t_number_vals(Int) of
+ case t_number_vals(Int, Opaques) of
[N] when is_integer(N), N >= 0 -> t_tuple(N);
_Other -> t_tuple()
end
- end);
-type(erlang, make_tuple, 3, Xs) ->
- strict(arg_types(erlang, make_tuple, 3), Xs,
+ end, Opaques);
+type(erlang, make_tuple, 3, Xs, Opaques) ->
+ strict(erlang, make_tuple, 3, Xs,
fun ([Int, _, _]) ->
- case t_number_vals(Int) of
+ case t_number_vals(Int, Opaques) of
[N] when is_integer(N), N >= 0 -> t_tuple(N);
_Other -> t_tuple()
end
- end);
-type(erlang, memory, 0, _) -> t_list(t_tuple([t_atom(), t_non_neg_fixnum()]));
-type(erlang, nif_error, 1, _) ->
- t_any(); % this BIF and the next one are stubs for NIFs and never return
-type(erlang, nif_error, 2, Xs) ->
- strict(arg_types(erlang, nif_error, 2), Xs, fun (_) -> t_any() end);
+ end, Opaques);
+type(erlang, memory, 0, _, _Opaques) ->
+ t_list(t_tuple([t_atom(), t_non_neg_fixnum()]));
+type(erlang, nif_error, 1, Xs, Opaques) ->
+ %% this BIF and the next one are stubs for NIFs and never return
+ strict(erlang, nif_error, 1, Xs, fun (_) -> t_any() end, Opaques);
+type(erlang, nif_error, 2, Xs, Opaques) ->
+ strict(erlang, nif_error, 2, Xs, fun (_) -> t_any() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, node, 0, _) -> t_node();
+type(erlang, node, 0, _, _Opaques) -> t_node();
%% Guard bif, needs to be here.
-type(erlang, node, 1, Xs) ->
- strict(arg_types(erlang, node, 1), Xs, fun (_) -> t_node() end);
+type(erlang, node, 1, Xs, Opaques) ->
+ strict(erlang, node, 1, Xs, fun (_) -> t_node() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, round, 1, Xs) ->
- strict(arg_types(erlang, round, 1), Xs, fun (_) -> t_integer() end);
+type(erlang, round, 1, Xs, Opaques) ->
+ strict(erlang, round, 1, Xs, fun (_) -> t_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, self, 0, _) -> t_pid();
-type(erlang, set_cookie, 2, Xs) ->
- strict(arg_types(erlang, set_cookie, 2), Xs, fun (_) -> t_atom('true') end);
-type(erlang, setelement, 3, Xs) ->
- strict(arg_types(erlang, setelement, 3), Xs,
+type(erlang, self, 0, _, _Opaques) -> t_pid();
+type(erlang, set_cookie, 2, Xs, Opaques) ->
+ strict(erlang, set_cookie, 2, Xs, fun (_) -> t_atom('true') end, Opaques);
+type(erlang, setelement, 3, Xs, Opaques) ->
+ strict(erlang, setelement, 3, Xs,
fun ([X1, X2, X3]) ->
- case t_tuple_subtypes(X2) of
+ case t_tuple_subtypes(X2, Opaques) of
unknown -> t_tuple();
[_] ->
- Sz = t_tuple_size(X2),
- As = t_tuple_args(X2),
- case t_number_vals(X1) of
+ Sz = t_tuple_size(X2, Opaques),
+ As = t_tuple_args(X2, Opaques),
+ case t_number_vals(X1, Opaques) of
unknown ->
t_tuple([t_sup(X, X3) || X <- As]);
[N] when is_integer(N), 1 =< N, N =< Sz ->
@@ -799,29 +831,29 @@ type(erlang, setelement, 3, Xs) ->
Ts when is_list(Ts) ->
t_sup([type(erlang, setelement, 3, [X1, Y, X3]) || Y <- Ts])
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, size, 1, Xs) ->
- strict(arg_types(erlang, size, 1), Xs, fun (_) -> t_non_neg_integer() end);
-type(erlang, spawn, 1, Xs) ->
- strict(arg_types(erlang, spawn, 1), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn, 2, Xs) ->
- strict(arg_types(erlang, spawn, 2), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn, 4, Xs) ->
- strict(arg_types(erlang, spawn, 4), Xs, fun (_) -> t_pid() end);
-type(erlang, spawn_link, 1, Xs) -> type(erlang, spawn, 1, Xs); % same
-type(erlang, spawn_link, 2, Xs) -> type(erlang, spawn, 2, Xs); % same
-type(erlang, spawn_link, 4, Xs) -> type(erlang, spawn, 4, Xs); % same
-type(erlang, subtract, 2, Xs) -> type(erlang, '--', 2, Xs); % alias
-type(erlang, suspend_process, 1, Xs) ->
- strict(arg_types(erlang, suspend_process, 1), Xs,
- fun (_) -> t_atom('true') end);
-type(erlang, system_info, 1, Xs) ->
- strict(arg_types(erlang, system_info, 1), Xs,
+type(erlang, size, 1, Xs, Opaques) ->
+ strict(erlang, size, 1, Xs, fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, spawn, 1, Xs, Opaques) ->
+ strict(erlang, spawn, 1, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn, 2, Xs, Opaques) ->
+ strict(erlang, spawn, 2, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn, 4, Xs, Opaques) ->
+ strict(erlang, spawn, 4, Xs, fun (_) -> t_pid() end, Opaques);
+type(erlang, spawn_link, 1, Xs, _) -> type(erlang, spawn, 1, Xs); % same
+type(erlang, spawn_link, 2, Xs, _) -> type(erlang, spawn, 2, Xs); % same
+type(erlang, spawn_link, 4, Xs, _) -> type(erlang, spawn, 4, Xs); % same
+type(erlang, subtract, 2, Xs, _Opaques) -> type(erlang, '--', 2, Xs); % alias
+type(erlang, suspend_process, 1, Xs, Opaques) ->
+ strict(erlang, suspend_process, 1, Xs,
+ fun (_) -> t_atom('true') end, Opaques);
+type(erlang, system_info, 1, Xs, Opaques) ->
+ strict(erlang, system_info, 1, Xs,
fun ([Type]) ->
- case t_is_atom(Type) of
+ case t_is_atom(Type, Opaques) of
true ->
- case t_atom_vals(Type) of
+ case t_atom_vals(Type, Opaques) of
['allocated_areas'] ->
t_list(t_sup([t_tuple([t_atom(),t_non_neg_integer()]),
t_tuple([t_atom(),
@@ -936,26 +968,28 @@ type(erlang, system_info, 1, Xs) ->
false -> %% This currently handles only {allocator, Alloc}
t_any() %% overapproximation as the return value might change
end
- end);
+ end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, tl, 1, Xs) ->
- strict(arg_types(erlang, tl, 1), Xs, fun ([X]) -> t_cons_tl(X) end);
+type(erlang, tl, 1, Xs, Opaques) ->
+ strict(erlang, tl, 1, Xs, fun ([X]) -> t_cons_tl(X) end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, trunc, 1, Xs) ->
- strict(arg_types(erlang, trunc, 1), Xs, fun (_) -> t_integer() end);
+type(erlang, trunc, 1, Xs, Opaques) ->
+ strict(erlang, trunc, 1, Xs, fun (_) -> t_integer() end, Opaques);
%% Guard bif, needs to be here.
-type(erlang, tuple_size, 1, Xs) ->
- strict(arg_types(erlang, tuple_size, 1), Xs, fun (_) -> t_non_neg_integer() end);
-type(erlang, tuple_to_list, 1, Xs) ->
- strict(arg_types(erlang, tuple_to_list, 1), Xs,
+type(erlang, tuple_size, 1, Xs, Opaques) ->
+ strict(erlang, tuple_size, 1, Xs,
+ fun (_) -> t_non_neg_integer() end, Opaques);
+type(erlang, tuple_to_list, 1, Xs, Opaques) ->
+ strict(erlang, tuple_to_list, 1, Xs,
fun ([X]) ->
- case t_tuple_subtypes(X) of
+ case t_tuple_subtypes(X, Opaques) of
unknown -> t_list();
SubTypes ->
- Args = lists:flatten([t_tuple_args(ST) || ST <- SubTypes]),
+ Args = lists:append([t_tuple_args(ST, Opaques) ||
+ ST <- SubTypes]),
%% Can be nil if the tuple can be {}
case lists:any(fun (T) ->
- t_tuple_size(T) =:= 0
+ t_tuple_size(T, Opaques) =:= 0
end, SubTypes) of
true ->
%% Be careful here. If we had only {} we need to
@@ -965,279 +999,284 @@ type(erlang, tuple_to_list, 1, Xs) ->
t_nonempty_list(t_sup(Args))
end
end
- end);
-type(erlang, yield, 0, _) -> t_atom('true');
+ end, Opaques);
+type(erlang, yield, 0, _, _Opaques) -> t_atom('true');
%%-- ets ----------------------------------------------------------------------
-type(ets, rename, 2, Xs) ->
- strict(arg_types(ets, rename, 2), Xs, fun ([_, Name]) -> Name end);
+type(ets, rename, 2, Xs, Opaques) ->
+ strict(ets, rename, 2, Xs, fun ([_, Name]) -> Name end, Opaques);
%%-- hipe_bifs ----------------------------------------------------------------
-type(hipe_bifs, add_ref, 2, Xs) ->
- strict(arg_types(hipe_bifs, add_ref, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, alloc_data, 2, Xs) ->
- strict(arg_types(hipe_bifs, alloc_data, 2), Xs,
- fun (_) -> t_integer() end); % address
-type(hipe_bifs, array, 2, Xs) ->
- strict(arg_types(hipe_bifs, array, 2), Xs, fun (_) -> t_immarray() end);
-type(hipe_bifs, array_length, 1, Xs) ->
- strict(arg_types(hipe_bifs, array_length, 1), Xs,
- fun (_) -> t_non_neg_fixnum() end);
-type(hipe_bifs, array_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, array_sub, 2), Xs, fun (_) -> t_immediate() end);
-type(hipe_bifs, array_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, array_update, 3), Xs,
- fun (_) -> t_immarray() end);
-type(hipe_bifs, atom_to_word, 1, Xs) ->
- strict(arg_types(hipe_bifs, atom_to_word, 1), Xs,
- fun (_) -> t_integer() end);
-type(hipe_bifs, bif_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, bif_address, 3), Xs,
- fun (_) -> t_sup(t_integer(), t_atom('false')) end);
-type(hipe_bifs, bitarray, 2, Xs) ->
- strict(arg_types(hipe_bifs, bitarray, 2), Xs, fun (_) -> t_bitarray() end);
-type(hipe_bifs, bitarray_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, bitarray_sub, 2), Xs, fun (_) -> t_boolean() end);
-type(hipe_bifs, bitarray_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, bitarray_update, 3), Xs,
- fun (_) -> t_bitarray() end);
-type(hipe_bifs, bytearray, 2, Xs) ->
- strict(arg_types(hipe_bifs, bytearray, 2), Xs, fun (_) -> t_bytearray() end);
-type(hipe_bifs, bytearray_sub, 2, Xs) ->
- strict(arg_types(hipe_bifs, bytearray_sub, 2), Xs, fun (_) -> t_byte() end);
-type(hipe_bifs, bytearray_update, 3, Xs) ->
- strict(arg_types(hipe_bifs, bytearray_update, 3), Xs,
- fun (_) -> t_bytearray() end);
-type(hipe_bifs, call_count_clear, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_clear, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_get, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_get, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_off, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_off, 1), Xs,
- fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end);
-type(hipe_bifs, call_count_on, 1, Xs) ->
- strict(arg_types(hipe_bifs, call_count_on, 1), Xs,
- fun (_) -> t_sup(t_atom('true'), t_nil()) end);
-type(hipe_bifs, check_crc, 1, Xs) ->
- strict(arg_types(hipe_bifs, check_crc, 1), Xs, fun (_) -> t_boolean() end);
-type(hipe_bifs, enter_code, 2, Xs) ->
- strict(arg_types(hipe_bifs, enter_code, 2), Xs,
+type(hipe_bifs, add_ref, 2, Xs, Opaques) ->
+ strict(hipe_bifs, add_ref, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, alloc_data, 2, Xs, Opaques) ->
+ strict(hipe_bifs, alloc_data, 2, Xs,
+ fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, array, 2, Xs, Opaques) ->
+ strict(hipe_bifs, array, 2, Xs, fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, array_length, 1, Xs, Opaques) ->
+ strict(hipe_bifs, array_length, 1, Xs,
+ fun (_) -> t_non_neg_fixnum() end, Opaques);
+type(hipe_bifs, array_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, array_sub, 2, Xs, fun (_) -> t_immediate() end, Opaques);
+type(hipe_bifs, array_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, array_update, 3, Xs,
+ fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, atom_to_word, 1, Xs, Opaques) ->
+ strict(hipe_bifs, atom_to_word, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+type(hipe_bifs, bif_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bif_address, 3, Xs,
+ fun (_) -> t_sup(t_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, bitarray, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray, 2, Xs, fun (_) -> t_bitarray() end, Opaques);
+type(hipe_bifs, bitarray_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray_sub, 2, Xs,
+ fun (_) -> t_boolean() end, Opaques);
+type(hipe_bifs, bitarray_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bitarray_update, 3, Xs,
+ fun (_) -> t_bitarray() end, Opaques);
+type(hipe_bifs, bytearray, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray, 2, Xs, fun (_) -> t_bytearray() end, Opaques);
+type(hipe_bifs, bytearray_sub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray_sub, 2, Xs, fun (_) -> t_byte() end, Opaques);
+type(hipe_bifs, bytearray_update, 3, Xs, Opaques) ->
+ strict(hipe_bifs, bytearray_update, 3, Xs,
+ fun (_) -> t_bytearray() end, Opaques);
+type(hipe_bifs, call_count_clear, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_clear, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_get, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_get, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_off, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_off, 1, Xs,
+ fun (_) -> t_sup(t_non_neg_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, call_count_on, 1, Xs, Opaques) ->
+ strict(hipe_bifs, call_count_on, 1, Xs,
+ fun (_) -> t_sup(t_atom('true'), t_nil()) end, Opaques);
+type(hipe_bifs, check_crc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, check_crc, 1, Xs, fun (_) -> t_boolean() end, Opaques);
+type(hipe_bifs, enter_code, 2, Xs, Opaques) ->
+ strict(hipe_bifs, enter_code, 2, Xs,
fun (_) -> t_tuple([t_integer(),
%% XXX: The tuple below contains integers and
%% is of size same as the length of the MFA list
- t_sup(t_nil(), t_binary())]) end);
-type(hipe_bifs, enter_sdesc, 1, Xs) ->
- strict(arg_types(hipe_bifs, enter_sdesc, 1), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, find_na_or_make_stub, 2, Xs) ->
- strict(arg_types(hipe_bifs, find_na_or_make_stub, 2), Xs,
- fun (_) -> t_integer() end); % address
-type(hipe_bifs, fun_to_address, 1, Xs) ->
- strict(arg_types(hipe_bifs, fun_to_address, 1), Xs,
- fun (_) -> t_integer() end);
-%% type(hipe_bifs, get_emu_address, 1, Xs) ->
-%% strict(arg_types(hipe_bifs, get_emu_address, 1), Xs,
-%% fun (_) -> t_integer() end); % address
-type(hipe_bifs, get_rts_param, 1, Xs) ->
- strict(arg_types(hipe_bifs, get_rts_param, 1), Xs,
- fun (_) -> t_sup(t_integer(), t_nil()) end);
-type(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs) ->
- strict(arg_types(hipe_bifs, invalidate_funinfo_native_addresses, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, make_fe, 3, Xs) ->
- strict(arg_types(hipe_bifs, make_fe, 3), Xs, fun (_) -> t_integer() end);
-%% type(hipe_bifs, make_native_stub, 2, Xs) ->
-%% strict(arg_types(hipe_bifs, make_native_stub, 2), Xs,
-%% fun (_) -> t_integer() end); % address
-type(hipe_bifs, mark_referred_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, mark_referred_from, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, merge_term, 1, Xs) ->
- strict(arg_types(hipe_bifs, merge_term, 1), Xs, fun ([X]) -> X end);
-type(hipe_bifs, nstack_used_size, 0, _) ->
+ t_sup(t_nil(), t_binary())]) end, Opaques);
+type(hipe_bifs, enter_sdesc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, enter_sdesc, 1, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, find_na_or_make_stub, 2, Xs, Opaques) ->
+ strict(hipe_bifs, find_na_or_make_stub, 2, Xs,
+ fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, fun_to_address, 1, Xs, Opaques) ->
+ strict(hipe_bifs, fun_to_address, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+%% type(hipe_bifs, get_emu_address, 1, Xs, Opaques) ->
+%% strict(hipe_bifs, get_emu_address, 1, Xs,
+%% fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, get_rts_param, 1, Xs, Opaques) ->
+ strict(hipe_bifs, get_rts_param, 1, Xs,
+ fun (_) -> t_sup(t_integer(), t_nil()) end, Opaques);
+type(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs, Opaques) ->
+ strict(hipe_bifs, invalidate_funinfo_native_addresses, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, make_fe, 3, Xs, Opaques) ->
+ strict(hipe_bifs, make_fe, 3, Xs, fun (_) -> t_integer() end, Opaques);
+%% type(hipe_bifs, make_native_stub, 2, Xs, Opaques) ->
+%% strict(hipe_bifs, make_native_stub, 2, Xs,
+%% fun (_) -> t_integer() end, Opaques); % address
+type(hipe_bifs, mark_referred_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, mark_referred_from, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, merge_term, 1, Xs, Opaques) ->
+ strict(hipe_bifs, merge_term, 1, Xs, fun ([X]) -> X end, Opaques);
+type(hipe_bifs, nstack_used_size, 0, _, _Opaques) ->
t_non_neg_fixnum();
-type(hipe_bifs, patch_call, 3, Xs) ->
- strict(arg_types(hipe_bifs, patch_call, 3), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, patch_insn, 3, Xs) ->
- strict(arg_types(hipe_bifs, patch_insn, 3), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, primop_address, 1, Xs) ->
- strict(arg_types(hipe_bifs, primop_address, 1), Xs,
- fun (_) -> t_sup(t_integer(), t_atom('false')) end);
-type(hipe_bifs, redirect_referred_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, redirect_referred_from, 1), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, ref, 1, Xs) ->
- strict(arg_types(hipe_bifs, ref, 1), Xs, fun (_) -> t_immarray() end);
-type(hipe_bifs, ref_get, 1, Xs) ->
- strict(arg_types(hipe_bifs, ref_get, 1), Xs, fun (_) -> t_immediate() end);
-type(hipe_bifs, ref_set, 2, Xs) ->
- strict(arg_types(hipe_bifs, ref_set, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, remove_refs_from, 1, Xs) ->
- strict(arg_types(hipe_bifs, remove_refs_from, 1), Xs,
- fun (_) -> t_atom('ok') end);
-type(hipe_bifs, set_funinfo_native_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, set_funinfo_native_address, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, set_native_address, 3, Xs) ->
- strict(arg_types(hipe_bifs, set_native_address, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, system_crc, 1, Xs) ->
- strict(arg_types(hipe_bifs, system_crc, 1), Xs, fun (_) -> t_crc32() end);
-type(hipe_bifs, term_to_word, 1, Xs) ->
- strict(arg_types(hipe_bifs, term_to_word, 1), Xs,
- fun (_) -> t_integer() end);
-type(hipe_bifs, update_code_size, 3, Xs) ->
- strict(arg_types(hipe_bifs, update_code_size, 3), Xs,
- fun (_) -> t_nil() end);
-type(hipe_bifs, write_u8, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u8, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, write_u32, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u32, 2), Xs, fun (_) -> t_nil() end);
-type(hipe_bifs, write_u64, 2, Xs) ->
- strict(arg_types(hipe_bifs, write_u64, 2), Xs, fun (_) -> t_nil() end);
+type(hipe_bifs, patch_call, 3, Xs, Opaques) ->
+ strict(hipe_bifs, patch_call, 3, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, patch_insn, 3, Xs, Opaques) ->
+ strict(hipe_bifs, patch_insn, 3, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, primop_address, 1, Xs, Opaques) ->
+ strict(hipe_bifs, primop_address, 1, Xs,
+ fun (_) -> t_sup(t_integer(), t_atom('false')) end, Opaques);
+type(hipe_bifs, redirect_referred_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, redirect_referred_from, 1, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, ref, 1, Xs, Opaques) ->
+ strict(hipe_bifs, ref, 1, Xs, fun (_) -> t_immarray() end, Opaques);
+type(hipe_bifs, ref_get, 1, Xs, Opaques) ->
+ strict(hipe_bifs, ref_get, 1, Xs, fun (_) -> t_immediate() end, Opaques);
+type(hipe_bifs, ref_set, 2, Xs, Opaques) ->
+ strict(hipe_bifs, ref_set, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, remove_refs_from, 1, Xs, Opaques) ->
+ strict(hipe_bifs, remove_refs_from, 1, Xs,
+ fun (_) -> t_atom('ok') end, Opaques);
+type(hipe_bifs, set_funinfo_native_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, set_funinfo_native_address, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, set_native_address, 3, Xs, Opaques) ->
+ strict(hipe_bifs, set_native_address, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, system_crc, 1, Xs, Opaques) ->
+ strict(hipe_bifs, system_crc, 1, Xs, fun (_) -> t_crc32() end, Opaques);
+type(hipe_bifs, term_to_word, 1, Xs, Opaques) ->
+ strict(hipe_bifs, term_to_word, 1, Xs,
+ fun (_) -> t_integer() end, Opaques);
+type(hipe_bifs, update_code_size, 3, Xs, Opaques) ->
+ strict(hipe_bifs, update_code_size, 3, Xs,
+ fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u8, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u8, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u32, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u32, 2, Xs, fun (_) -> t_nil() end, Opaques);
+type(hipe_bifs, write_u64, 2, Xs, Opaques) ->
+ strict(hipe_bifs, write_u64, 2, Xs, fun (_) -> t_nil() end, Opaques);
%%-- lists --------------------------------------------------------------------
-type(lists, all, 2, Xs) ->
- strict(arg_types(lists, all, 2), Xs,
+type(lists, all, 2, Xs, Opaques) ->
+ strict(lists, all, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_atom('true');
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
ok ->
- case t_is_cons(L) of
- true -> t_fun_range(F);
+ case t_is_cons(L, Opaques) of
+ true -> t_fun_range(F, Opaques);
false ->
%% The list can be empty.
- t_sup(t_atom('true'), t_fun_range(F))
+ t_sup(t_atom('true'), t_fun_range(F, Opaques))
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
- false -> t_fun_range(F)
+ false -> t_fun_range(F, Opaques)
end
end
end
- end);
-type(lists, any, 2, Xs) ->
- strict(arg_types(lists, any, 2), Xs,
+ end, Opaques);
+type(lists, any, 2, Xs, Opaques) ->
+ strict(lists, any, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_atom('false');
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
ok ->
- case t_is_cons(L) of
- true -> t_fun_range(F);
+ case t_is_cons(L, Opaques) of
+ true -> t_fun_range(F, Opaques);
false ->
%% The list can be empty
- t_sup(t_atom('false'), t_fun_range(F))
+ t_sup(t_atom('false'), t_fun_range(F, Opaques))
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
- false -> t_fun_range(F)
+ false -> t_fun_range(F, Opaques)
end
end
end
- end);
-type(lists, append, 2, Xs) -> type(erlang, '++', 2, Xs); % alias
-type(lists, delete, 2, Xs) ->
- strict(arg_types(lists, delete, 2), Xs,
+ end, Opaques);
+type(lists, append, 2, Xs, _Opaques) -> type(erlang, '++', 2, Xs); % alias
+type(lists, delete, 2, Xs, Opaques) ->
+ strict(lists, delete, 2, Xs,
fun ([_, List]) ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_cons_tl(List);
false -> List
end
- end);
-type(lists, dropwhile, 2, Xs) ->
- strict(arg_types(lists, dropwhile, 2), Xs,
+ end, Opaques);
+type(lists, dropwhile, 2, Xs, Opaques) ->
+ strict(lists, dropwhile, 2, Xs,
fun ([F, X]) ->
- case t_is_nil(X) of
+ case t_is_nil(X, Opaques) of
true -> t_nil();
false ->
- X1 = t_list_elements(X),
- case check_fun_application(F, [X1]) of
+ X1 = t_list_elements(X, Opaques),
+ case check_fun_application(F, [X1], Opaques) of
ok ->
- case t_atom_vals(t_fun_range(F)) of
+ case t_atom_vals(t_fun_range(F, Opaques), Opaques) of
['true'] ->
- case t_is_none(t_inf(t_list(), X)) of
+ case t_is_none(t_inf(t_list(), X, Opaques)) of
true -> t_none();
false -> t_nil()
end;
['false'] ->
- case t_is_none(t_inf(t_list(), X)) of
+ case t_is_none(t_inf(t_list(), X, Opaques)) of
true -> t_none();
false -> X
end;
_ ->
- t_inf(t_cons_tl(t_inf(X, t_cons())),
- t_maybe_improper_list())
+ t_inf(t_cons_tl(t_inf(X, t_cons(), Opaques)),
+ t_maybe_improper_list(), Opaques)
end;
error ->
- case t_is_cons(X) of
+ case t_is_cons(X, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, filter, 2, Xs) ->
- strict(arg_types(lists, filter, 2), Xs,
+ end, Opaques);
+type(lists, filter, 2, Xs, Opaques) ->
+ strict(lists, filter, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_nil();
false ->
- T = t_list_elements(L),
- case check_fun_application(F, [T]) of
+ T = t_list_elements(L, Opaques),
+ case check_fun_application(F, [T], Opaques) of
ok ->
- case t_atom_vals(t_fun_range(F)) =:= ['false'] of
+ RangeVals = t_atom_vals(t_fun_range(F, Opaques), Opaques),
+ case RangeVals =:= ['false'] of
true -> t_nil();
false ->
- case t_atom_vals(t_fun_range(F)) =:= ['true'] of
+ case RangeVals =:= ['true'] of
true -> L;
false -> t_list(T)
end
end;
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, flatten, 1, Xs) ->
- strict(arg_types(lists, flatten, 1), Xs,
+ end, Opaques);
+type(lists, flatten, 1, Xs, Opaques) ->
+ strict(lists, flatten, 1, Xs,
fun ([L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L; % (nil has undefined elements)
false ->
%% Avoiding infinite recursion is tricky
- X1 = t_list_elements(L),
+ X1 = t_list_elements(L, Opaques),
case t_is_any(X1) of
true ->
t_list();
false ->
- X2 = type(lists, flatten, 1, [t_inf(X1, t_list())]),
+ X2 = type(lists, flatten, 1, [t_inf(X1, t_list(), Opaques)]),
t_sup(t_list(t_subtract(X1, t_list())), X2)
end
end
- end);
-type(lists, flatmap, 2, Xs) ->
- strict(arg_types(lists, flatmap, 2), Xs,
+ end, Opaques);
+type(lists, flatmap, 2, Xs, Opaques) ->
+ strict(lists, flatmap, 2, Xs,
fun ([F, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> t_nil();
false ->
- case check_fun_application(F, [t_list_elements(List)]) of
+ case
+ check_fun_application(F, [t_list_elements(List, Opaques)],
+ Opaques)
+ of
ok ->
- R = t_fun_range(F),
+ R = t_fun_range(F, Opaques),
case t_is_nil(R) of
true -> t_nil();
false ->
- Elems = t_list_elements(R),
- case t_is_cons(List) of
+ Elems = t_list_elements(R, Opaques),
+ case t_is_cons(List, Opaques) of
true ->
case t_is_subtype(t_nil(), R) of
true -> t_list(Elems);
@@ -1247,58 +1286,65 @@ type(lists, flatmap, 2, Xs) ->
end
end;
error ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_none();
false -> t_nil()
end
end
end
- end);
-type(lists, foreach, 2, Xs) ->
- strict(arg_types(lists, foreach, 2), Xs,
+ end, Opaques);
+type(lists, foreach, 2, Xs, Opaques) ->
+ strict(lists, foreach, 2, Xs,
fun ([F, List]) ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true ->
- case check_fun_application(F, [t_list_elements(List)]) of
+ case
+ check_fun_application(F, [t_list_elements(List, Opaques)],
+ Opaques)
+ of
ok -> t_atom('ok');
error -> t_none()
end;
false ->
t_atom('ok')
end
- end);
-type(lists, foldl, 3, Xs) ->
- strict(arg_types(lists, foldl, 3), Xs,
+ end, Opaques);
+type(lists, foldl, 3, Xs, Opaques) ->
+ strict(lists, foldl, 3, Xs,
fun ([F, Acc, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> Acc;
false ->
- case check_fun_application(F, [t_list_elements(List), Acc]) of
+ case
+ check_fun_application(F,
+ [t_list_elements(List, Opaques),Acc],
+ Opaques)
+ of
ok ->
- case t_is_cons(List) of
- true -> t_fun_range(F);
- false -> t_sup(t_fun_range(F), Acc)
+ case t_is_cons(List, Opaques) of
+ true -> t_fun_range(F, Opaques);
+ false -> t_sup(t_fun_range(F, Opaques), Acc)
end;
error ->
- case t_is_cons(List) of
+ case t_is_cons(List, Opaques) of
true -> t_none();
false -> Acc
end
end
end
- end);
-type(lists, foldr, 3, Xs) -> type(lists, foldl, 3, Xs); % same
-type(lists, keydelete, 3, Xs) ->
- strict(arg_types(lists, keydelete, 3), Xs,
+ end, Opaques);
+type(lists, foldr, 3, Xs, _Opaques) -> type(lists, foldl, 3, Xs); % same
+type(lists, keydelete, 3, Xs, Opaques) ->
+ strict(lists, keydelete, 3, Xs,
fun ([_, _, L]) ->
Term = t_list_termination(L),
t_sup(Term, erl_types:lift_list_to_pos_empty(L))
- end);
-type(lists, keyfind, 3, Xs) ->
- strict(arg_types(lists, keyfind, 3), Xs,
+ end, Opaques);
+type(lists, keyfind, 3, Xs, Opaques) ->
+ strict(lists, keyfind, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
@@ -1308,58 +1354,61 @@ type(lists, keyfind, 3, Xs) ->
case t_is_any(X) of
true -> Ret;
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> Ret;
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> Ret
end
end
end
end
- end);
-type(lists, keymap, 3, Xs) ->
- strict(arg_types(lists, keymap, 3), Xs,
+ end, Opaques);
+type(lists, keymap, 3, Xs, Opaques) ->
+ strict(lists, keymap, 3, Xs,
fun ([F, _I, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L;
- false -> t_list(t_sup(t_fun_range(F), t_list_elements(L)))
+ false -> t_list(t_sup(t_fun_range(F, Opaques),
+ t_list_elements(L, Opaques)))
end
- end);
-type(lists, keymember, 3, Xs) ->
- strict(arg_types(lists, keymember, 3), Xs,
+ end, Opaques);
+type(lists, keymember, 3, Xs, Opaques) ->
+ strict(lists, keymember, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
case t_is_any(X) of
true -> t_boolean();
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> t_boolean();
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> t_boolean()
end
end
end
end
- end);
-type(lists, keymerge, 3, Xs) ->
- strict(arg_types(lists, keymerge, 3), Xs,
- fun ([_I, L1, L2]) -> type(lists, merge, 2, [L1, L2]) end);
-type(lists, keyreplace, 4, Xs) ->
- strict(arg_types(lists, keyreplace, 4), Xs,
- fun ([_K, _I, L, T]) -> t_list(t_sup(t_list_elements(L), T)) end);
-type(lists, keysearch, 3, Xs) ->
- strict(arg_types(lists, keysearch, 3), Xs,
+ end, Opaques);
+type(lists, keymerge, 3, Xs, Opaques) ->
+ strict(lists, keymerge, 3, Xs,
+ fun ([_I, L1, L2]) -> type(lists, merge, 2, [L1, L2]) end, Opaques);
+type(lists, keyreplace, 4, Xs, Opaques) ->
+ strict(lists, keyreplace, 4, Xs,
+ fun ([_K, _I, L, T]) ->
+ t_list(t_sup(t_list_elements(L, Opaques), T))
+ end, Opaques);
+type(lists, keysearch, 3, Xs, Opaques) ->
+ strict(lists, keysearch, 3, Xs,
fun ([X, Y, Z]) ->
- ListEs = t_list_elements(Z),
- Tuple = t_inf(t_tuple(), ListEs),
+ ListEs = t_list_elements(Z, Opaques),
+ Tuple = t_inf(t_tuple(), ListEs, Opaques),
case t_is_none(Tuple) of
true -> t_atom('false');
false ->
@@ -1368,91 +1417,93 @@ type(lists, keysearch, 3, Xs) ->
case t_is_any(X) of
true -> Ret;
false ->
- case t_tuple_subtypes(Tuple) of
+ case t_tuple_subtypes(Tuple, Opaques) of
unknown -> Ret;
List ->
- case key_comparisons_fail(X, Y, List) of
+ case key_comparisons_fail(X, Y, List, Opaques) of
true -> t_atom('false');
false -> Ret
end
end
end
end
- end);
-type(lists, keysort, 2, Xs) ->
- strict(arg_types(lists, keysort, 2), Xs, fun ([_, L]) -> L end);
-type(lists, last, 1, Xs) ->
- strict(arg_types(lists, last, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, map, 2, Xs) ->
- strict(arg_types(lists, map, 2), Xs,
+ end, Opaques);
+type(lists, keysort, 2, Xs, Opaques) ->
+ strict(lists, keysort, 2, Xs, fun ([_, L]) -> L end, Opaques);
+type(lists, last, 1, Xs, Opaques) ->
+ strict(lists, last, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, map, 2, Xs, Opaques) ->
+ strict(lists, map, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> L;
false ->
- El = t_list_elements(L),
- case t_is_cons(L) of
+ El = t_list_elements(L, Opaques),
+ case t_is_cons(L, Opaques) of
true ->
- case check_fun_application(F, [El]) of
- ok -> t_nonempty_list(t_fun_range(F));
+ case check_fun_application(F, [El], Opaques) of
+ ok -> t_nonempty_list(t_fun_range(F, Opaques));
error -> t_none()
end;
false ->
- case check_fun_application(F, [El]) of
- ok -> t_list(t_fun_range(F));
+ case check_fun_application(F, [El], Opaques) of
+ ok -> t_list(t_fun_range(F, Opaques));
error -> t_nil()
end
end
end
- end);
-type(lists, mapfoldl, 3, Xs) ->
- strict(arg_types(lists, mapfoldl, 3), Xs,
+ end, Opaques);
+type(lists, mapfoldl, 3, Xs, Opaques) ->
+ strict(lists, mapfoldl, 3, Xs,
fun ([F, Acc, List]) ->
- case t_is_nil(List) of
+ case t_is_nil(List, Opaques) of
true -> t_tuple([List, Acc]);
false ->
- El = t_list_elements(List),
- R = t_fun_range(F),
- case t_is_cons(List) of
+ El = t_list_elements(List, Opaques),
+ R = t_fun_range(F, Opaques),
+ case t_is_cons(List, Opaques) of
true ->
- case check_fun_application(F, [El, Acc]) of
+ case check_fun_application(F, [El, Acc], Opaques) of
ok ->
Fun = fun (RangeTuple) ->
- [T1, T2] = t_tuple_args(RangeTuple),
+ [T1, T2] = t_tuple_args(RangeTuple, Opaques),
t_tuple([t_nonempty_list(T1), T2])
end,
- t_sup([Fun(ST) || ST <- t_tuple_subtypes(R)]);
+ t_sup([Fun(ST) || ST <- t_tuple_subtypes(R, Opaques)]);
error ->
t_none()
end;
false ->
- case check_fun_application(F, [El, Acc]) of
+ case check_fun_application(F, [El, Acc], Opaques) of
ok ->
Fun = fun (RangeTuple) ->
- [T1, T2] = t_tuple_args(RangeTuple),
+ [T1, T2] = t_tuple_args(RangeTuple, Opaques),
t_tuple([t_list(T1), t_sup(Acc, T2)])
end,
- t_sup([Fun(ST) || ST <- t_tuple_subtypes(R)]);
+ t_sup([Fun(ST) || ST <- t_tuple_subtypes(R, Opaques)]);
error ->
t_tuple([t_nil(), Acc])
end
end
end
- end);
-type(lists, mapfoldr, 3, Xs) -> type(lists, mapfoldl, 3, Xs); % same
-type(lists, max, 1, Xs) ->
- strict(arg_types(lists, max, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, member, 2, Xs) ->
- strict(arg_types(lists, member, 2), Xs,
+ end, Opaques);
+type(lists, mapfoldr, 3, Xs, _Opaques) -> type(lists, mapfoldl, 3, Xs); % same
+type(lists, max, 1, Xs, Opaques) ->
+ strict(lists, max, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, member, 2, Xs, Opaques) ->
+ strict(lists, member, 2, Xs,
fun ([X, Y]) ->
- Y1 = t_list_elements(Y),
- case t_is_none(t_inf(Y1, X)) of
+ Y1 = t_list_elements(Y, Opaques),
+ case t_is_none(t_inf(Y1, X, Opaques)) of
true -> t_atom('false');
false -> t_boolean()
end
- end);
-%% type(lists, merge, 1, Xs) ->
-type(lists, merge, 2, Xs) ->
- strict(arg_types(lists, merge, 2), Xs,
+ end, Opaques);
+%% type(lists, merge, 1, Xs, Opaques) ->
+type(lists, merge, 2, Xs, Opaques) ->
+ strict(lists, merge, 2, Xs,
fun ([L1, L2]) ->
case t_is_none(L1) of
true -> L2;
@@ -1462,30 +1513,31 @@ type(lists, merge, 2, Xs) ->
false -> t_sup(L1, L2)
end
end
- end);
-type(lists, min, 1, Xs) ->
- strict(arg_types(lists, min, 1), Xs, fun ([L]) -> t_list_elements(L) end);
-type(lists, nth, 2, Xs) ->
- strict(arg_types(lists, nth, 2), Xs,
- fun ([_, Y]) -> t_list_elements(Y) end);
-type(lists, nthtail, 2, Xs) ->
- strict(arg_types(lists, nthtail, 2), Xs,
- fun ([_, Y]) -> t_sup(Y, t_list()) end);
-type(lists, partition, 2, Xs) ->
- strict(arg_types(lists, partition, 2), Xs,
+ end, Opaques);
+type(lists, min, 1, Xs, Opaques) ->
+ strict(lists, min, 1, Xs,
+ fun ([L]) -> t_list_elements(L, Opaques) end, Opaques);
+type(lists, nth, 2, Xs, Opaques) ->
+ strict(lists, nth, 2, Xs,
+ fun ([_, Y]) -> t_list_elements(Y, Opaques) end, Opaques);
+type(lists, nthtail, 2, Xs, Opaques) ->
+ strict(lists, nthtail, 2, Xs,
+ fun ([_, Y]) -> t_sup(Y, t_list()) end, Opaques);
+type(lists, partition, 2, Xs, Opaques) ->
+ strict(lists, partition, 2, Xs,
fun ([F, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_tuple([L,L]);
false ->
- El = t_list_elements(L),
- case check_fun_application(F, [El]) of
+ El = t_list_elements(L, Opaques),
+ case check_fun_application(F, [El], Opaques) of
error ->
- case t_is_cons(L) of
+ case t_is_cons(L, Opaques) of
true -> t_none();
false -> t_tuple([t_nil(), t_nil()])
end;
ok ->
- case t_atom_vals(t_fun_range(F)) of
+ case t_atom_vals(t_fun_range(F, Opaques), Opaques) of
['true'] -> t_tuple([L, t_nil()]);
['false'] -> t_tuple([t_nil(), L]);
[_, _] ->
@@ -1494,123 +1546,131 @@ type(lists, partition, 2, Xs) ->
end
end
end
- end);
-type(lists, reverse, 1, Xs) ->
- strict(arg_types(lists, reverse, 1), Xs, fun ([X]) -> X end);
-type(lists, reverse, 2, Xs) ->
+ end, Opaques);
+type(lists, reverse, 1, Xs, Opaques) ->
+ strict(lists, reverse, 1, Xs, fun ([X]) -> X end, Opaques);
+type(lists, reverse, 2, Xs, _Opaques) ->
type(erlang, '++', 2, Xs); % reverse-onto is just like append
-type(lists, sort, 1, Xs) ->
- strict(arg_types(lists, sort, 1), Xs, fun ([X]) -> X end);
-type(lists, sort, 2, Xs) ->
- strict(arg_types(lists, sort, 2), Xs,
+type(lists, sort, 1, Xs, Opaques) ->
+ strict(lists, sort, 1, Xs, fun ([X]) -> X end, Opaques);
+type(lists, sort, 2, Xs, Opaques) ->
+ strict(lists, sort, 2, Xs,
fun ([F, L]) ->
- R = t_fun_range(F),
- case t_is_boolean(R) of
+ R = t_fun_range(F, Opaques),
+ case t_is_boolean(R, Opaques) of
true -> L;
false ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_nil();
false -> t_none()
end
end
- end);
-type(lists, split, 2, Xs) ->
- strict(arg_types(lists, split, 2), Xs,
+ end, Opaques);
+type(lists, split, 2, Xs, Opaques) ->
+ strict(lists, split, 2, Xs,
fun ([_, L]) ->
- case t_is_nil(L) of
+ case t_is_nil(L, Opaques) of
true -> t_tuple([L, L]);
false ->
- T = t_list_elements(L),
+ T = t_list_elements(L, Opaques),
t_tuple([t_list(T), t_list(T)])
end
- end);
-type(lists, splitwith, 2, Xs) ->
+ end, Opaques);
+type(lists, splitwith, 2, Xs, _Opaques) ->
T1 = type(lists, takewhile, 2, Xs),
T2 = type(lists, dropwhile, 2, Xs),
case t_is_none(T1) orelse t_is_none(T2) of
true -> t_none();
false -> t_tuple([T1, T2])
end;
-type(lists, subtract, 2, Xs) -> type(erlang, '--', 2, Xs); % alias
-type(lists, takewhile, 2, Xs) ->
- strict(arg_types(lists, takewhile, 2), Xs,
+type(lists, subtract, 2, Xs, _Opaques) -> type(erlang, '--', 2, Xs); % alias
+type(lists, takewhile, 2, Xs, Opaques) ->
+ strict(lists, takewhile, 2, Xs,
fun([F, L]) ->
- case t_is_none(t_inf(t_list(), L)) of
+ case t_is_none(t_inf(t_list(), L, Opaques)) of
false -> type(lists, filter, 2, Xs);
true ->
%% This works for non-proper lists as well.
- El = t_list_elements(L),
+ El = t_list_elements(L, Opaques),
type(lists, filter, 2, [F, t_list(El)])
end
- end);
-type(lists, usort, 1, Xs) -> type(lists, sort, 1, Xs); % same
-type(lists, usort, 2, Xs) -> type(lists, sort, 2, Xs); % same
-type(lists, unzip, 1, Xs) ->
- strict(arg_types(lists, unzip, 1), Xs,
+ end, Opaques);
+type(lists, usort, 1, Xs, _Opaques) -> type(lists, sort, 1, Xs); % same
+type(lists, usort, 2, Xs, _Opaques) -> type(lists, sort, 2, Xs); % same
+type(lists, unzip, 1, Xs, Opaques) ->
+ strict(lists, unzip, 1, Xs,
fun ([Ps]) ->
- case t_is_nil(Ps) of
+ case t_is_nil(Ps, Opaques) of
true ->
t_tuple([t_nil(), t_nil()]);
false -> % Ps is a proper list of pairs
- TupleTypes = t_tuple_subtypes(t_list_elements(Ps)),
+ TupleTypes = t_tuple_subtypes(t_list_elements(Ps, Opaques),
+ Opaques),
lists:foldl(fun(Tuple, Acc) ->
- [A, B] = t_tuple_args(Tuple),
+ [A, B] = t_tuple_args(Tuple, Opaques),
t_sup(t_tuple([t_list(A), t_list(B)]), Acc)
end, t_none(), TupleTypes)
end
- end);
-type(lists, unzip3, 1, Xs) ->
- strict(arg_types(lists, unzip3, 1), Xs,
+ end, Opaques);
+type(lists, unzip3, 1, Xs, Opaques) ->
+ strict(lists, unzip3, 1, Xs,
fun ([Ts]) ->
- case t_is_nil(Ts) of
+ case t_is_nil(Ts, Opaques) of
true ->
t_tuple([t_nil(), t_nil(), t_nil()]);
false -> % Ps is a proper list of triples
- TupleTypes = t_tuple_subtypes(t_list_elements(Ts)),
+ TupleTypes = t_tuple_subtypes(t_list_elements(Ts, Opaques),
+ Opaques),
lists:foldl(fun(T, Acc) ->
- [A, B, C] = t_tuple_args(T),
+ [A, B, C] = t_tuple_args(T, Opaques),
t_sup(t_tuple([t_list(A),
t_list(B),
t_list(C)]),
Acc)
end, t_none(), TupleTypes)
end
- end);
-type(lists, zip, 2, Xs) ->
- strict(arg_types(lists, zip, 2), Xs,
+ end, Opaques);
+type(lists, zip, 2, Xs, Opaques) ->
+ strict(lists, zip, 2, Xs,
fun ([As, Bs]) ->
- case (t_is_nil(As) orelse t_is_nil(Bs)) of
+ case (t_is_nil(As, Opaques) orelse t_is_nil(Bs, Opaques)) of
true -> t_nil();
false ->
- A = t_list_elements(As),
- B = t_list_elements(Bs),
+ A = t_list_elements(As, Opaques),
+ B = t_list_elements(Bs, Opaques),
t_list(t_tuple([A, B]))
end
- end);
-type(lists, zip3, 3, Xs) ->
- strict(arg_types(lists, zip3, 3), Xs,
+ end, Opaques);
+type(lists, zip3, 3, Xs, Opaques) ->
+ strict(lists, zip3, 3, Xs,
fun ([As, Bs, Cs]) ->
- case (t_is_nil(As) orelse t_is_nil(Bs) orelse t_is_nil(Cs)) of
+ case
+ (t_is_nil(As, Opaques)
+ orelse t_is_nil(Bs, Opaques)
+ orelse t_is_nil(Cs, Opaques))
+ of
true -> t_nil();
false ->
- A = t_list_elements(As),
- B = t_list_elements(Bs),
- C = t_list_elements(Cs),
+ A = t_list_elements(As, Opaques),
+ B = t_list_elements(Bs, Opaques),
+ C = t_list_elements(Cs, Opaques),
t_list(t_tuple([A, B, C]))
end
- end);
-type(lists, zipwith, 3, Xs) ->
- strict(arg_types(lists, zipwith, 3), Xs,
- fun ([F, _As, _Bs]) -> t_sup(t_list(t_fun_range(F)), t_nil()) end);
-type(lists, zipwith3, 4, Xs) ->
- strict(arg_types(lists, zipwith3, 4), Xs,
- fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F)), t_nil()) end);
+ end, Opaques);
+type(lists, zipwith, 3, Xs, Opaques) ->
+ strict(lists, zipwith, 3, Xs,
+ fun ([F, _As, _Bs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
+ t_nil()) end, Opaques);
+type(lists, zipwith3, 4, Xs, Opaques) ->
+ strict(lists, zipwith3, 4, Xs,
+ fun ([F,_As,_Bs,_Cs]) -> t_sup(t_list(t_fun_range(F, Opaques)),
+ t_nil()) end, Opaques);
%%-- string -------------------------------------------------------------------
-type(string, chars, 2, Xs) -> % NOTE: added to avoid loss of information
- strict(arg_types(string, chars, 2), Xs, fun (_) -> t_string() end);
-type(string, chars, 3, Xs) -> % NOTE: added to avoid loss of information
- strict(arg_types(string, chars, 3), Xs,
+type(string, chars, 2, Xs, Opaques) -> % NOTE: added to avoid loss of info
+ strict(string, chars, 2, Xs, fun (_) -> t_string() end, Opaques);
+type(string, chars, 3, Xs, Opaques) -> % NOTE: added to avoid loss of info
+ strict(string, chars, 3, Xs,
fun ([Char, N, Tail]) ->
case t_is_nil(Tail) of
true ->
@@ -1623,10 +1683,10 @@ type(string, chars, 3, Xs) -> % NOTE: added to avoid loss of information
t_sup(t_sup(t_string(), Tail), t_cons(Char, Tail))
end
end
- end);
+ end, Opaques);
%%-----------------------------------------------------------------------------
-type(M, F, A, Xs) when is_atom(M), is_atom(F),
+type(M, F, A, Xs, _O) when is_atom(M), is_atom(F),
is_integer(A), 0 =< A, A =< 255 ->
strict(Xs, t_any()). % safe approximation for all functions.
@@ -1635,13 +1695,20 @@ type(M, F, A, Xs) when is_atom(M), is_atom(F),
%% Auxiliary functions
%%-----------------------------------------------------------------------------
-strict(Xs, Ts, F) ->
- %% io:format("inf lists arg~n1:~p~n2:~p ~n", [Xs, Ts]),
- Xs1 = inf_lists(Xs, Ts),
+strict(M, F, A, Xs, Fun, Opaques) ->
+ Ts = arg_types(M, F, A),
+ %% io:format("inf lists arg~nXs: ~p~nTs: ~p ~n", [Xs, Ts]),
+ Xs1 = inf_lists(Xs, Ts, Opaques),
%% io:format("inf lists return ~p ~n", [Xs1]),
case any_is_none_or_unit(Xs1) of
true -> t_none();
- false -> F(Xs1)
+ false -> Fun(Xs1)
+ end.
+
+strict2(Xs, X) ->
+ case any_is_none_or_unit(Xs) of
+ true -> t_none();
+ false -> X
end.
strict(Xs, X) ->
@@ -1650,9 +1717,9 @@ strict(Xs, X) ->
false -> X
end.
-inf_lists([X | Xs], [T | Ts]) ->
- [t_inf(X, T) | inf_lists(Xs, Ts)];
-inf_lists([], []) ->
+inf_lists([X | Xs], [T | Ts], Opaques) ->
+ [t_inf(X, T, Opaques) | inf_lists(Xs, Ts, Opaques)];
+inf_lists([], [], _Opaques) ->
[].
any_list(N) -> any_list(N, t_any()).
@@ -1670,20 +1737,43 @@ list_replace(1, E, [_X | Xs]) ->
any_is_none_or_unit(Ts) ->
lists:any(fun erl_types:t_is_none_or_unit/1, Ts).
-check_guard([X], Test, Type) ->
- check_guard_single(X, Test, Type).
+check_guard([X], Test, Type, Opaques) ->
+ check_guard_single(X, Test, Type, Opaques).
-check_guard_single(X, Test, Type) ->
+check_guard_single(X, Test, Type, Opaques) ->
case Test(X) of
true -> t_atom('true');
false ->
- case erl_types:t_is_opaque(X) of
- true -> t_none();
- false ->
- case t_is_none(t_inf(Type, X)) of
- true -> t_atom('false');
- false -> t_boolean()
- end
+ case t_is_none(t_inf(Type, X, Opaques)) of
+ true ->
+ case t_has_opaque_subtype(X, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
+ false -> t_boolean()
+ end
+ end.
+
+check_record_tag(Tag, Y, Opaques) ->
+ case t_is_atom(Tag, Opaques) of
+ false ->
+ TagAtom = t_inf(Tag, t_atom(), Opaques),
+ case t_is_none(TagAtom) of
+ true ->
+ case t_has_opaque_subtype(Tag, Opaques) of
+ true -> t_none();
+ false -> t_atom('false')
+ end;
+ false -> t_boolean()
+ end;
+ true ->
+ case t_atom_vals(Tag, Opaques) of
+ [RealTag] ->
+ case t_atom_vals(Y, Opaques) of
+ [RealTag] -> t_atom('true');
+ _ -> t_boolean()
+ end;
+ _ -> t_boolean()
end
end.
@@ -1828,12 +1918,12 @@ negwidth(X, N) ->
false -> negwidth(X, N+1)
end.
-arith('bnot', X1) ->
- case t_is_integer(X1) of
+arith('bnot', X1, Opaques) ->
+ case t_is_integer(X1, Opaques) of
false -> error;
true ->
- Min1 = number_min(X1),
- Max1 = number_max(X1),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
{ok, t_from_range(infinity_add(infinity_inv(Max1), -1),
infinity_add(infinity_inv(Min1), -1))}
end.
@@ -1907,13 +1997,13 @@ arith_bor_range_set({Min, Max}, [Int|IntList]) ->
IntList),
{infinity_bor(Min, SafeAnd), infinity_bor(Max, SafeAnd)}.
-arith_band(X1, X2) ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+arith_band(X1, X2, Opaques) ->
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
case {L1 =:= unknown, L2 =:= unknown} of
{true, false} ->
arith_band_range_set(arith_band_ranges(Min1, Max1, Min2, Max2), L2);
@@ -1923,13 +2013,13 @@ arith_band(X1, X2) ->
arith_band_ranges(Min1, Max1, Min2, Max2)
end.
-arith_bor(X1, X2) ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+arith_bor(X1, X2, Opaques) ->
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
case {L1 =:= unknown, L2 =:= unknown} of
{true, false} ->
arith_bor_range_set(arith_bor_ranges(Min1, Max1, Min2, Max2), L2);
@@ -1967,19 +2057,19 @@ arith_bor_ranges(Min1, Max1, Min2, Max2) ->
end,
{Min, Max}.
-arith(Op, X1, X2) ->
+arith(Op, X1, X2, Opaques) ->
%% io:format("arith ~p ~p ~p~n", [Op, X1, X2]),
- case t_is_integer(X1) andalso t_is_integer(X2) of
+ case t_is_integer(X1, Opaques) andalso t_is_integer(X2, Opaques) of
false -> error;
true ->
- L1 = t_number_vals(X1),
- L2 = t_number_vals(X2),
+ L1 = t_number_vals(X1, Opaques),
+ L2 = t_number_vals(X2, Opaques),
case (L1 =:= unknown) orelse (L2 =:= unknown) of
true ->
- Min1 = number_min(X1),
- Max1 = number_max(X1),
- Min2 = number_min(X2),
- Max2 = number_max(X2),
+ Min1 = number_min(X1, Opaques),
+ Max1 = number_max(X1, Opaques),
+ Min2 = number_min(X2, Opaques),
+ Max2 = number_max(X2, Opaques),
{NewMin, NewMax} =
case Op of
'+' -> {infinity_add(Min1, Min2), infinity_add(Max1, Max2)};
@@ -1992,8 +2082,8 @@ arith(Op, X1, X2) ->
'bsr' -> NewMin2 = infinity_inv(Max2),
NewMax2 = infinity_inv(Min2),
arith_bsl(Min1, Max1, NewMin2, NewMax2);
- 'band' -> arith_band(X1, X2);
- 'bor' -> arith_bor(X1, X2);
+ 'band' -> arith_band(X1, X2, Opaques);
+ 'bor' -> arith_bor(X1, X2, Opaques);
'bxor' -> arith_bor_ranges(Min1, Max1, Min2, Max2) %% overaprox.
end,
%% io:format("done arith ~p = ~p~n", [Op, {NewMin, NewMax}]),
@@ -2025,58 +2115,62 @@ arith(Op, X1, X2) ->
%% Comparison of terms
%%=============================================================================
-compare(Op, Lhs, Rhs) ->
- case t_is_none(t_inf(Lhs, Rhs)) of
+compare(Op, Lhs, Rhs, Opaques) ->
+ case t_is_none(t_inf(Lhs, Rhs, Opaques)) of
false -> t_boolean();
true ->
- case Op of
- '<' -> always_smaller(Lhs, Rhs);
- '>' -> always_smaller(Rhs, Lhs);
- '=<' -> always_smaller(Lhs, Rhs);
- '>=' -> always_smaller(Rhs, Lhs)
+ case opaque_args(erlang, Op, 2, [Lhs, Rhs], Opaques) =:= [] of
+ true ->
+ case Op of
+ '<' -> always_smaller(Lhs, Rhs, Opaques);
+ '>' -> always_smaller(Rhs, Lhs, Opaques);
+ '=<' -> always_smaller(Lhs, Rhs, Opaques);
+ '>=' -> always_smaller(Rhs, Lhs, Opaques)
+ end;
+ false -> t_none()
end
end.
-always_smaller(Type1, Type2) ->
- {Min1, Max1} = type_ranks(Type1),
- {Min2, Max2} = type_ranks(Type2),
+always_smaller(Type1, Type2, Opaques) ->
+ {Min1, Max1} = type_ranks(Type1, Opaques),
+ {Min2, Max2} = type_ranks(Type2, Opaques),
if Max1 < Min2 -> t_atom('true');
Min1 > Max2 -> t_atom('false');
true -> t_boolean()
end.
-type_ranks(Type) ->
- type_ranks(Type, 1, 0, 0, type_order()).
+type_ranks(Type, Opaques) ->
+ type_ranks(Type, 1, 0, 0, type_order(), Opaques).
-type_ranks(_Type, _I, Min, Max, []) -> {Min, Max};
-type_ranks(Type, I, Min, Max, [TypeClass|Rest]) ->
+type_ranks(_Type, _I, Min, Max, [], _Opaques) -> {Min, Max};
+type_ranks(Type, I, Min, Max, [TypeClass|Rest], Opaques) ->
{NewMin, NewMax} =
- case t_is_none(t_inf(Type, TypeClass)) of
+ case t_is_none(t_inf(Type, TypeClass, Opaques)) of
true -> {Min, Max};
false -> case Min of
0 -> {I, I};
_ -> {Min, I}
end
end,
- type_ranks(Type, I+1, NewMin, NewMax, Rest).
+ type_ranks(Type, I+1, NewMin, NewMax, Rest, Opaques).
type_order() ->
[t_number(), t_atom(), t_reference(), t_fun(), t_port(), t_pid(), t_tuple(),
t_list(), t_binary()].
-key_comparisons_fail(X0, KeyPos, TupleList) ->
- X = case t_is_number(t_inf(X0, t_number())) of
+key_comparisons_fail(X0, KeyPos, TupleList, Opaques) ->
+ X = case t_is_number(t_inf(X0, t_number(), Opaques), Opaques) of
false -> X0;
true -> t_number()
end,
lists:all(fun(Tuple) ->
Key = type(erlang, element, 2, [KeyPos, Tuple]),
- t_is_none(t_inf(Key, X))
+ t_is_none(t_inf(Key, X, Opaques))
end, TupleList).
%%=============================================================================
--spec arg_types(atom(), atom(), arity()) -> [erl_types:erl_type()] | 'unknown'.
+-spec arg_types(atom(), atom(), arity()) -> arg_types() | 'unknown'.
%%------- erlang --------------------------------------------------------------
arg_types(erlang, '!', 2) ->
@@ -2213,6 +2307,8 @@ arg_types(erlang, is_integer, 1) ->
[t_any()];
arg_types(erlang, is_list, 1) ->
[t_any()];
+arg_types(erlang, is_map, 1) ->
+ [t_any()];
arg_types(erlang, is_number, 1) ->
[t_any()];
arg_types(erlang, is_pid, 1) ->
@@ -2230,6 +2326,9 @@ arg_types(erlang, is_tuple, 1) ->
%% Guard bif, needs to be here.
arg_types(erlang, length, 1) ->
[t_list()];
+%% Guard bif, needs to be here.
+arg_types(erlang, map_size, 1) ->
+ [t_map()];
arg_types(erlang, make_tuple, 2) ->
[t_non_neg_fixnum(), t_any()]; % the value 0 is OK as first argument
arg_types(erlang, make_tuple, 3) ->
@@ -2508,47 +2607,78 @@ arg_types(M, F, A) when is_atom(M), is_atom(F),
unknown. % safe approximation for all functions.
--spec is_known(atom(), atom(), arity()) -> boolean().
+-spec is_known(module(), atom(), arity()) -> boolean().
is_known(M, F, A) ->
arg_types(M, F, A) =/= unknown.
+-spec opaque_args(module(), atom(), arity(),
+ arg_types(), opaques()) -> [pos_integer()].
+
+%% Use this function to find out which argument caused empty type.
+
+opaque_args(_M, _F, _A, _Xs, 'universe') -> [];
+opaque_args(M, F, A, Xs, Opaques) ->
+ case kind_of_check(M, F, A) of
+ record ->
+ [X,Y|_] = Xs,
+ [1 ||
+ case t_is_tuple(X, Opaques) of
+ true ->
+ case t_tuple_subtypes(X, Opaques) of
+ unknown -> false;
+ List when length(List) >= 1 -> opaque_recargs(List, Y, Opaques)
+ end;
+ false -> t_has_opaque_subtype(X, Opaques)
+ end];
+ subtype ->
+ [N ||
+ {N, X} <- lists:zip(lists:seq(1, length(Xs)), Xs),
+ t_has_opaque_subtype(X, Opaques)];
+ find_unknown ->
+ [L, R] = Xs,
+ erl_types:t_find_unknown_opaque(L, R, Opaques);
+ no_check -> []
+ end.
--spec structure_inspecting_args(atom(), atom(), arity()) -> [1..255].
-
-structure_inspecting_args(erlang, element, 2) -> [2];
-structure_inspecting_args(erlang, is_atom, 1) -> [1];
-structure_inspecting_args(erlang, is_boolean, 1) -> [1];
-structure_inspecting_args(erlang, is_binary, 1) -> [1];
-structure_inspecting_args(erlang, is_bitstring, 1) -> [1];
-structure_inspecting_args(erlang, is_float, 1) -> [1];
-structure_inspecting_args(erlang, is_function, 1) -> [1];
-structure_inspecting_args(erlang, is_integer, 1) -> [1];
-structure_inspecting_args(erlang, is_list, 1) -> [1];
-structure_inspecting_args(erlang, is_number, 1) -> [1];
-structure_inspecting_args(erlang, is_pid, 1) -> [1];
-structure_inspecting_args(erlang, is_port, 1) -> [1];
-structure_inspecting_args(erlang, is_reference, 1) -> [1];
-structure_inspecting_args(erlang, is_tuple, 1) -> [1];
-structure_inspecting_args(erlang, length, 1) -> [1];
-%%structure_inspecting_args(erlang, setelement, 3) -> [2].
-structure_inspecting_args(_, _, _) -> []. % XXX: assume no arg needs inspection
-
-
-check_fun_application(Fun, Args) ->
- case t_is_fun(Fun) of
+kind_of_check(erlang, is_record, 3) ->
+ record;
+kind_of_check(erlang, is_record, 2) ->
+ record;
+kind_of_check(erlang, F, A) ->
+ case erl_internal:guard_bif(F, A) orelse erl_internal:bool_op(F, A) of
+ true -> subtype;
+ false ->
+ case erl_internal:comp_op(F, A) of
+ true -> find_unknown;
+ false -> no_check
+ end
+ end;
+kind_of_check(_M, _F, _A) -> no_check.
+
+opaque_recargs(Tuples, Y, Opaques) ->
+ Fun = fun(Tuple) ->
+ case t_tuple_args(Tuple, Opaques) of
+ [Tag|_] -> t_is_none(check_record_tag(Tag, Y, Opaques));
+ _ -> false
+ end
+ end,
+ lists:all(Fun, Tuples).
+
+check_fun_application(Fun, Args, Opaques) ->
+ case t_is_fun(Fun, Opaques) of
true ->
- case t_fun_args(Fun) of
+ case t_fun_args(Fun, Opaques) of
unknown ->
- case t_is_none_or_unit(t_fun_range(Fun)) of
+ case t_is_none_or_unit(t_fun_range(Fun, Opaques)) of
true -> error;
false -> ok
end;
FunDom when length(FunDom) =:= length(Args) ->
- case any_is_none_or_unit(inf_lists(FunDom, Args)) of
+ case any_is_none_or_unit(inf_lists(FunDom, Args, Opaques)) of
true -> error;
false ->
- case t_is_none_or_unit(t_fun_range(Fun)) of
+ case t_is_none_or_unit(t_fun_range(Fun, Opaques)) of
true -> error;
false -> ok
end
diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl
index d7d8a878c5..af34e355bb 100644
--- a/lib/hipe/cerl/erl_types.erl
+++ b/lib/hipe/cerl/erl_types.erl
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -42,15 +42,15 @@
max/2,
module_builtin_opaques/1,
min/2,
- number_max/1,
- number_min/1,
+ number_max/1, number_max/2,
+ number_min/1, number_min/2,
t_abstract_records/2,
t_any/0,
t_arity/0,
t_atom/0,
t_atom/1,
t_atoms/1,
- t_atom_vals/1,
+ t_atom_vals/1, t_atom_vals/2,
t_binary/0,
t_bitstr/0,
t_bitstr/2,
@@ -66,12 +66,14 @@
t_collect_vars/1,
t_cons/0,
t_cons/2,
- t_cons_hd/1,
- t_cons_tl/1,
+ t_cons_hd/1, t_cons_hd/2,
+ t_cons_tl/1, t_cons_tl/2,
t_constant/0,
- t_contains_opaque/1,
+ t_contains_opaque/1, t_contains_opaque/2,
+ t_decorate_with_opaque/3,
t_elements/1,
t_find_opaque_mismatch/2,
+ t_find_unknown_opaque/3,
t_fixnum/0,
t_map/2,
t_non_neg_fixnum/0,
@@ -87,18 +89,18 @@
t_fun/0,
t_fun/1,
t_fun/2,
- t_fun_args/1,
- t_fun_arity/1,
- t_fun_range/1,
- t_has_opaque_subtype/1,
+ t_fun_args/1, t_fun_args/2,
+ t_fun_arity/1, t_fun_arity/2,
+ t_fun_range/1, t_fun_range/2,
+ t_has_opaque_subtype/2,
t_has_var/1,
t_identifier/0,
%% t_improper_list/2,
- t_inf/2,
- t_inf/3,
- t_inf_lists/2,
- t_inf_lists/3,
- t_inf_lists_masked/3,
+ t_inf/1,
+ t_inf/2,
+ t_inf/3,
+ t_inf_lists/2,
+ t_inf_lists/3,
t_integer/0,
t_integer/1,
t_non_neg_integer/0,
@@ -107,44 +109,44 @@
t_iodata/0,
t_iolist/0,
t_is_any/1,
- t_is_atom/1,
- t_is_atom/2,
- t_is_binary/1,
- t_is_bitstr/1,
+ t_is_atom/1, t_is_atom/2,
+ t_is_any_atom/2, t_is_any_atom/3,
+ t_is_binary/1, t_is_binary/2,
+ t_is_bitstr/1, t_is_bitstr/2,
t_is_bitwidth/1,
- t_is_boolean/1,
+ t_is_boolean/1, t_is_boolean/2,
%% t_is_byte/1,
%% t_is_char/1,
- t_is_cons/1,
+ t_is_cons/1, t_is_cons/2,
t_is_constant/1,
t_is_equal/2,
t_is_fixnum/1,
- t_is_float/1,
- t_is_fun/1,
+ t_is_float/1, t_is_float/2,
+ t_is_fun/1, t_is_fun/2,
t_is_instance/2,
- t_is_integer/1,
+ t_is_integer/1, t_is_integer/2,
t_is_list/1,
t_is_matchstate/1,
- t_is_nil/1,
+ t_is_nil/1, t_is_nil/2,
t_is_non_neg_integer/1,
t_is_none/1,
t_is_none_or_unit/1,
- t_is_number/1,
- t_is_opaque/1,
- t_is_pid/1,
- t_is_port/1,
- t_is_maybe_improper_list/1,
- t_is_reference/1,
+ t_is_number/1, t_is_number/2,
+ t_is_opaque/1, t_is_opaque/2,
+ t_is_pid/1, t_is_pid/2,
+ t_is_port/1, t_is_port/2,
+ t_is_maybe_improper_list/1, t_is_maybe_improper_list/2,
+ t_is_reference/1, t_is_reference/2,
t_is_remote/1,
t_is_string/1,
t_is_subtype/2,
- t_is_tuple/1,
+ t_is_tuple/1, t_is_tuple/2,
t_is_unit/1,
t_is_var/1,
t_limit/2,
t_list/0,
t_list/1,
- t_list_elements/1,
+ t_list_elements/1, t_list_elements/2,
t_list_termination/1,
t_matchstate/0,
t_matchstate/2,
@@ -163,11 +165,8 @@
t_nonempty_string/0,
t_number/0,
t_number/1,
- t_number_vals/1,
+ t_number_vals/1, t_number_vals/2,
t_opaque_from_records/1,
- t_opaque_match_atom/2,
- t_opaque_match_record/2,
- t_opaque_matching_structure/2,
t_opaque_structure/1,
%% t_parameterized_module/0,
t_pid/0,
@@ -192,16 +191,14 @@
t_to_tlist/1,
t_tuple/0,
t_tuple/1,
- t_tuple_args/1,
- t_tuple_size/1,
+ t_tuple_args/1, t_tuple_args/2,
+ t_tuple_size/1, t_tuple_size/2,
t_tuple_sizes/1,
t_tuple_subtypes/1,
+ t_tuple_subtypes/2,
t_unify/2,
- t_unify/3,
t_unit/0,
- t_unopaque/1,
- t_unopaque/2,
- t_unopaque_on_mismatch/3,
+ t_unopaque/1, t_unopaque/2,
t_var/1,
t_var_name/1,
%% t_assign_variables_to_subtype/2,
@@ -209,8 +206,13 @@
record_field_diffs_to_string/2,
subst_all_vars_to_any/1,
lift_list_to_pos_empty/1,
+ is_opaque_type/2,
is_erl_type/1,
- atom_to_string/1
+ atom_to_string/1,
+
+ t_is_map/2,
+ t_map/1,
+ t_map/0
]).
%%-define(DO_ERL_TYPES_TEST, true).
@@ -228,6 +230,14 @@
-export_type([erl_type/0]).
+%%-define(DEBUG, true).
+
+-ifdef(DEBUG).
+-define(debug(__A), __A).
+-else.
+-define(debug(__A), ok).
+-endif.
+
%%=============================================================================
%%
%% Definition of the type structure
@@ -260,6 +270,7 @@
-define(function_tag, function).
-define(identifier_tag, identifier).
-define(list_tag, list).
+-define(map_tag, map).
-define(matchstate_tag, matchstate).
-define(nil_tag, nil).
-define(number_tag, number).
@@ -272,7 +283,7 @@
-define(var_tag, var).
-type tag() :: ?atom_tag | ?binary_tag | ?function_tag | ?identifier_tag
- | ?list_tag | ?matchstate_tag | ?nil_tag | ?number_tag
+ | ?list_tag | ?map_tag | ?matchstate_tag | ?nil_tag | ?number_tag
| ?opaque_tag | ?product_tag | ?remote_tag
| ?tuple_tag | ?tuple_set_tag | ?union_tag | ?var_tag.
@@ -310,6 +321,9 @@
-record(int_set, {set :: [integer()]}).
-record(int_rng, {from :: rng_elem(), to :: rng_elem()}).
+%% Note: the definition of #opaque{} was changed to 'mod' and 'name';
+%% it used to be an ordsets of {Mod, Name} pairs. The Dialyzer version
+%% was updated to 2.7 due to this change.
-record(opaque, {mod :: module(), name :: atom(),
args = [] :: [erl_type()], struct :: erl_type()}).
-record(remote, {mod:: module(), name :: atom(), args = [] :: [erl_type()]}).
@@ -329,6 +343,7 @@
-define(nonempty_list(Types, Term),?list(Types, Term, ?nonempty_qual)).
-define(number(Set, Qualifier), #c{tag=?number_tag, elements=Set,
qualifier=Qualifier}).
+-define(map(Pairs), #c{tag=?map_tag, elements=Pairs}).
-define(opaque(Optypes), #c{tag=?opaque_tag, elements=Optypes}).
-define(product(Types), #c{tag=?product_tag, elements=Types}).
-define(remote(RemTypes), #c{tag=?remote_tag, elements=RemTypes}).
@@ -346,22 +361,25 @@
-define(integer_non_neg, ?int_range(0, pos_inf)).
-define(integer_neg, ?int_range(neg_inf, -1)).
+-type opaques() :: [erl_type()] | 'universe'.
+
%%-----------------------------------------------------------------------------
%% Unions
%%
--define(union(List), #c{tag=?union_tag, elements=[_,_,_,_,_,_,_,_,_,_]=List}).
-
--define(atom_union(T), ?union([T,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
--define(bitstr_union(T), ?union([?none,T,?none,?none,?none,?none,?none,?none,?none,?none])).
--define(function_union(T), ?union([?none,?none,T,?none,?none,?none,?none,?none,?none,?none])).
--define(identifier_union(T), ?union([?none,?none,?none,T,?none,?none,?none,?none,?none,?none])).
--define(list_union(T), ?union([?none,?none,?none,?none,T,?none,?none,?none,?none,?none])).
--define(number_union(T), ?union([?none,?none,?none,?none,?none,T,?none,?none,?none,?none])).
--define(tuple_union(T), ?union([?none,?none,?none,?none,?none,?none,T,?none,?none,?none])).
--define(matchstate_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,T,?none,?none])).
--define(opaque_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,T,?none])).
--define(remote_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,T])).
+-define(union(List), #c{tag=?union_tag, elements=[_,_,_,_,_,_,_,_,_,_,_]=List}).
+
+-define(atom_union(T), ?union([T,?none,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
+-define(bitstr_union(T), ?union([?none,T,?none,?none,?none,?none,?none,?none,?none,?none,?none])).
+-define(function_union(T), ?union([?none,?none,T,?none,?none,?none,?none,?none,?none,?none,?none])).
+-define(identifier_union(T), ?union([?none,?none,?none,T,?none,?none,?none,?none,?none,?none,?none])).
+-define(list_union(T), ?union([?none,?none,?none,?none,T,?none,?none,?none,?none,?none,?none])).
+-define(number_union(T), ?union([?none,?none,?none,?none,?none,T,?none,?none,?none,?none,?none])).
+-define(tuple_union(T), ?union([?none,?none,?none,?none,?none,?none,T,?none,?none,?none,?none])).
+-define(matchstate_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,T,?none,?none,?none])).
+-define(opaque_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,T,?none,?none])).
+-define(remote_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,T,?none])).
+-define(map_union(T), ?union([?none,?none,?none,?none,?none,?none,?none,?none,?none,?none,T])).
-define(integer_union(T), ?number_union(T)).
-define(float_union(T), ?number_union(T)).
-define(nil_union(T), ?list_union(T)).
@@ -384,8 +402,11 @@ t_any() ->
-spec t_is_any(erl_type()) -> boolean().
-t_is_any(?any) -> true;
-t_is_any(_) -> false.
+t_is_any(Type) ->
+ do_opaque(Type, 'universe', fun is_any/1).
+
+is_any(?any) -> true;
+is_any(_) -> false.
-spec t_none() -> erl_type().
@@ -407,16 +428,25 @@ t_opaque(Mod, Name, Args, Struct) ->
O = #opaque{mod = Mod, name = Name, args = Args, struct = Struct},
?opaque(set_singleton(O)).
+-spec t_is_opaque(erl_type(), [erl_type()]) -> boolean().
+
+t_is_opaque(?opaque(_) = Type, Opaques) ->
+ not is_opaque_type(Type, Opaques);
+t_is_opaque(_Type, _Opaques) -> false.
+
-spec t_is_opaque(erl_type()) -> boolean().
t_is_opaque(?opaque(_)) -> true;
t_is_opaque(_) -> false.
--spec t_has_opaque_subtype(erl_type()) -> boolean().
+-spec t_has_opaque_subtype(erl_type(), opaques()) -> boolean().
+
+t_has_opaque_subtype(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun has_opaque_subtype/1).
-t_has_opaque_subtype(?union(Ts)) ->
+has_opaque_subtype(?union(Ts)) ->
lists:any(fun t_is_opaque/1, Ts);
-t_has_opaque_subtype(T) ->
+has_opaque_subtype(T) ->
t_is_opaque(T).
-spec t_opaque_structure(erl_type()) -> erl_type().
@@ -424,74 +454,65 @@ t_has_opaque_subtype(T) ->
t_opaque_structure(?opaque(Elements)) ->
t_sup([Struct || #opaque{struct = Struct} <- ordsets:to_list(Elements)]).
--spec t_opaque_module(erl_type()) -> module().
+-spec t_opaque_modules(erl_type()) -> [module()].
-t_opaque_module(?opaque(Elements)) ->
+t_opaque_modules(?opaque(Elements)) ->
case ordsets:size(Elements) of
1 ->
- [#opaque{mod = Module}] = ordsets:to_list(Elements),
- Module;
+ [#opaque{mod = Mod}] = set_to_list(Elements),
+ [Mod];
_ -> throw({error, "Unexpected multiple opaque types"})
end.
-%% This only makes sense if we know that Type matches Opaque
--spec t_opaque_matching_structure(erl_type(), erl_type()) -> erl_type().
-
-t_opaque_matching_structure(Type, Opaque) ->
- OpaqueStruct = t_opaque_structure(Opaque),
- case OpaqueStruct of
- ?union(L1) ->
- case Type of
- ?union(_L2) -> OpaqueStruct;
- _OtherType -> t_opaque_matching_structure_list(Type, L1)
- end;
- ?tuple_set(_Set1) = TupleSet ->
- case Type of
- ?tuple_set(_Set2) -> OpaqueStruct;
- _ -> t_opaque_matching_structure_list(Type, t_tuple_subtypes(TupleSet))
- end;
- _Other -> OpaqueStruct
- end.
-
-t_opaque_matching_structure_list(Type, List) ->
- NewList = [t_inf(Element, Type) || Element <- List],
- Results = [NotNone || NotNone <- NewList, NotNone =/= ?none],
- case Results of
- [] -> ?none;
- [First|_] -> First
- end.
-
-spec t_contains_opaque(erl_type()) -> boolean().
-t_contains_opaque(?any) -> false;
-t_contains_opaque(?none) -> false;
-t_contains_opaque(?unit) -> false;
-t_contains_opaque(?atom(_Set)) -> false;
-t_contains_opaque(?bitstr(_Unit, _Base)) -> false;
-t_contains_opaque(?float) -> false;
-t_contains_opaque(?function(Domain, Range)) ->
- t_contains_opaque(Domain) orelse t_contains_opaque(Range);
-t_contains_opaque(?identifier(_Types)) -> false;
-t_contains_opaque(?integer(_Types)) -> false;
-t_contains_opaque(?int_range(_From, _To)) -> false;
-t_contains_opaque(?int_set(_Set)) -> false;
-t_contains_opaque(?list(Type, _, _)) -> t_contains_opaque(Type);
-t_contains_opaque(?matchstate(_P, _Slots)) -> false;
-t_contains_opaque(?nil) -> false;
-t_contains_opaque(?number(_Set, _Tag)) -> false;
-t_contains_opaque(?opaque(_)) -> true;
-t_contains_opaque(?product(Types)) -> list_contains_opaque(Types);
-t_contains_opaque(?tuple(?any, _, _)) -> false;
-t_contains_opaque(?tuple(Types, _, _)) -> list_contains_opaque(Types);
-t_contains_opaque(?tuple_set(_Set) = T) ->
- list_contains_opaque(t_tuple_subtypes(T));
-t_contains_opaque(?union(List)) -> list_contains_opaque(List);
-t_contains_opaque(?var(_Id)) -> false.
-
--spec list_contains_opaque([erl_type()]) -> boolean().
-
-list_contains_opaque(List) ->
- lists:any(fun t_contains_opaque/1, List).
+t_contains_opaque(Type) ->
+ t_contains_opaque(Type, []).
+
+%% Returns 'true' iff there is an opaque type that is *not* one of
+%% the types of the second argument.
+
+-spec t_contains_opaque(erl_type(), [erl_type()]) -> boolean().
+
+t_contains_opaque(?any, _Opaques) -> false;
+t_contains_opaque(?none, _Opaques) -> false;
+t_contains_opaque(?unit, _Opaques) -> false;
+t_contains_opaque(?atom(_Set), _Opaques) -> false;
+t_contains_opaque(?bitstr(_Unit, _Base), _Opaques) -> false;
+t_contains_opaque(?float, _Opaques) -> false;
+t_contains_opaque(?function(Domain, Range), Opaques) ->
+ t_contains_opaque(Domain, Opaques)
+ orelse t_contains_opaque(Range, Opaques);
+t_contains_opaque(?identifier(_Types), _Opaques) -> false;
+t_contains_opaque(?integer(_Types), _Opaques) -> false;
+t_contains_opaque(?int_range(_From, _To), _Opaques) -> false;
+t_contains_opaque(?int_set(_Set), _Opaques) -> false;
+t_contains_opaque(?list(Type, Tail, _), Opaques) ->
+ t_contains_opaque(Type, Opaques) orelse t_contains_opaque(Tail, Opaques);
+t_contains_opaque(?map(Pairs), Opaques) ->
+ list_contains_opaque([V||{_,V}<-Pairs], Opaques) orelse
+ list_contains_opaque([K||{K,_}<-Pairs], Opaques);
+t_contains_opaque(?matchstate(_P, _Slots), _Opaques) -> false;
+t_contains_opaque(?nil, _Opaques) -> false;
+t_contains_opaque(?number(_Set, _Tag), _Opaques) -> false;
+t_contains_opaque(?opaque(_)=T, Opaques) ->
+ not is_opaque_type(T, Opaques)
+ orelse t_contains_opaque(t_opaque_structure(T));
+t_contains_opaque(?product(Types), Opaques) ->
+ list_contains_opaque(Types, Opaques);
+t_contains_opaque(?tuple(?any, _, _), _Opaques) -> false;
+t_contains_opaque(?tuple(Types, _, _), Opaques) ->
+ list_contains_opaque(Types, Opaques);
+t_contains_opaque(?tuple_set(_Set) = T, Opaques) ->
+ list_contains_opaque(t_tuple_subtypes(T), Opaques);
+t_contains_opaque(?union(List), Opaques) ->
+ list_contains_opaque(List, Opaques);
+t_contains_opaque(?var(_Id), _Opaques) -> false.
+
+-spec list_contains_opaque([erl_type()], [erl_type()]) -> boolean().
+
+list_contains_opaque(List, Opaques) ->
+ lists:any(fun(E) -> t_contains_opaque(E, Opaques) end, List).
%% t_find_opaque_mismatch/2 of two types should only be used if their
%% t_inf is t_none() due to some opaque type violation.
@@ -506,9 +527,12 @@ t_find_opaque_mismatch(T1, T2) ->
t_find_opaque_mismatch(?any, _Type, _TopType) -> error;
t_find_opaque_mismatch(?none, _Type, _TopType) -> error;
-t_find_opaque_mismatch(?list(T1, _, _), ?list(T2, _, _), TopType) ->
- t_find_opaque_mismatch(T1, T2, TopType);
+t_find_opaque_mismatch(?list(T1, Tl1, _), ?list(T2, Tl2, _), TopType) ->
+ t_find_opaque_mismatch_ordlists([T1, Tl1], [T2, Tl2], TopType);
t_find_opaque_mismatch(_T1, ?opaque(_) = T2, TopType) -> {ok, TopType, T2};
+t_find_opaque_mismatch(?opaque(_) = T1, _T2, TopType) ->
+ %% The generated message is somewhat misleading:
+ {ok, TopType, T1};
t_find_opaque_mismatch(?product(T1), ?product(T2), TopType) ->
t_find_opaque_mismatch_ordlists(T1, T2, TopType);
t_find_opaque_mismatch(?tuple(T1, Arity, _), ?tuple(T2, Arity, _), TopType) ->
@@ -538,6 +562,166 @@ t_find_opaque_mismatch_list([H|T]) ->
error -> t_find_opaque_mismatch_list(T)
end.
+-spec t_find_unknown_opaque(erl_type(), erl_type(), opaques()) ->
+ [pos_integer()].
+
+%% The nice thing about using two types and t_inf() as compared to
+%% calling t_contains_opaque/2 is that the traversal stops when
+%% there is a mismatch which means that unknown opaque types "below"
+%% the mismatch are not found.
+%% XXX. Returns one element even if both oparands contain opaque types.
+%% XXX. Slow since t_inf() is called but the results are ignored.
+t_find_unknown_opaque(_T1, _T2, 'universe') -> [];
+t_find_unknown_opaque(T1, T2, Opaques) ->
+ try t_inf(T1, T2, {match, Opaques}) of
+ _ -> []
+ catch throw:N when is_integer(N) -> [N]
+ end.
+
+-spec t_decorate_with_opaque(erl_type(), erl_type(), [erl_type()]) -> erl_type().
+
+%% The first argument can contain opaque types. The second argument
+%% is assumed to be taken from the contract.
+
+t_decorate_with_opaque(T1, T2, Opaques) ->
+ case t_is_equal(T1, T2) orelse not t_contains_opaque(T2) of
+ true -> T1;
+ false ->
+ T = t_inf(T1, T2),
+ case t_contains_opaque(T) of
+ false -> T1;
+ true ->
+ R = decorate(T1, T, Opaques),
+ ?debug(case catch t_is_equal(t_unopaque(R), t_unopaque(T1)) of
+ true -> ok;
+ false ->
+ io:format("T1 = ~p,\n", [T1]),
+ io:format("T2 = ~p,\n", [T2]),
+ io:format("O = ~p,\n", [Opaques]),
+ io:format("erl_types:t_decorate_with_opaque(T1,T2,O).\n"),
+ throw({error, "Failed to handle opaque types"})
+ end),
+ R
+ end
+ end.
+
+decorate(?none=Type, _, _Opaques) -> Type;
+decorate(?function(Domain, Range), ?function(D, R), Opaques) ->
+ ?function(decorate(Domain, D, Opaques), decorate(Range, R, Opaques));
+decorate(?list(Types, Tail, Size), ?list(Ts, Tl, _Sz), Opaques) ->
+ ?list(decorate(Types, Ts, Opaques), decorate(Tail, Tl, Opaques), Size);
+decorate(?product(Types), ?product(Ts), Opaques) ->
+ ?product(list_decorate(Types, Ts, Opaques));
+decorate(?tuple(_, _, _)=T, ?tuple(?any, _, _), _Opaques) -> T;
+decorate(?tuple(?any, _, _)=T, ?tuple(_, _, _), _Opaques) -> T;
+decorate(?tuple(Types, Arity, Tag), ?tuple(Ts, Arity, _), Opaques) ->
+ ?tuple(list_decorate(Types, Ts, Opaques), Arity, Tag);
+decorate(?tuple_set(List), ?tuple(_, Arity, _) = T, Opaques) ->
+ decorate_tuple_sets(List, [{Arity, [T]}], Opaques);
+decorate(?tuple_set(List), ?tuple_set(L), Opaques) ->
+ decorate_tuple_sets(List, L, Opaques);
+decorate(?union(List), T, Opaques) when T =/= ?any ->
+ ?union(L) = force_union(T),
+ union_decorate(List, L, Opaques);
+decorate(?opaque(_)=T, _, _Opaques) -> T;
+decorate(T, ?union(L), Opaques) when T =/= ?any ->
+ ?union(List) = force_union(T),
+ union_decorate(List, L, Opaques);
+decorate(Type, ?opaque(_)=T, Opaques) ->
+ decorate_with_opaque(Type, T, Opaques);
+decorate(Type, _T, _Opaques) -> Type.
+
+%% Note: it is important that #opaque.struct is a subtype of the
+%% opaque type.
+decorate_with_opaque(Type, ?opaque(Set2), Opaques) ->
+ case decoration(set_to_list(Set2), Type, Opaques, [], false) of
+ {[], false} -> Type;
+ {List, All} when List =/= [] ->
+ NewType = ?opaque(ordsets:from_list(List)),
+ case All of
+ true -> NewType;
+ false -> t_sup(NewType, Type)
+ end
+ end.
+
+decoration([#opaque{struct = S} = Opaque|OpaqueTypes], Type, Opaques,
+ NewOpaqueTypes, All) ->
+ IsOpaque = is_opaque_type2(Opaque, Opaques),
+ I = t_inf(Type, S),
+ case not IsOpaque orelse t_is_none(I = t_inf(Type, S)) of
+ true -> decoration(OpaqueTypes, Type, Opaques, NewOpaqueTypes, All);
+ false ->
+ NewOpaque = Opaque#opaque{struct = decorate(I, S, Opaques)},
+ NewAll = All orelse t_is_equal(I, Type),
+ decoration(OpaqueTypes, Type, Opaques, [NewOpaque|NewOpaqueTypes], NewAll)
+ end;
+decoration([], _Type, _Opaques, NewOpaqueTypes, All) ->
+ {NewOpaqueTypes, All}.
+
+-spec list_decorate([erl_type()], [erl_type()], opaques()) -> [erl_type()].
+
+list_decorate(List, L, Opaques) ->
+ [decorate(Elem, E, Opaques) || {Elem, E} <- lists:zip(List, L)].
+
+union_decorate(U1, U2, Opaques) ->
+ Union = union_decorate(U1, U2, Opaques, 0, []),
+ [A,B,F,I,L,N,T,M,_,_R,Map] = U1,
+ [_,_,_,_,_,_,_,_,Opaque,_,_] = U2,
+ List = [A,B,F,I,L,N,T,M,Map],
+ DecList = [Dec ||
+ E <- List,
+ not t_is_none(Dec = decorate(E, Opaque, Opaques))],
+ t_sup([Union|DecList]).
+
+union_decorate([?none|Left1], [_|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N, [?none|Acc]);
+union_decorate([T1|Left1], [?none|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N+1, [T1|Acc]);
+union_decorate([T1|Left1], [T2|Left2], Opaques, N, Acc) ->
+ union_decorate(Left1, Left2, Opaques, N+1, [decorate(T1, T2, Opaques)|Acc]);
+union_decorate([], [], _Opaques, N, Acc) ->
+ if N =:= 0 -> ?none;
+ N =:= 1 ->
+ [Type] = [T || T <- Acc, T =/= ?none],
+ Type;
+ N >= 2 -> ?union(lists:reverse(Acc))
+ end.
+
+decorate_tuple_sets(List, L, Opaques) ->
+ decorate_tuple_sets(List, L, Opaques, []).
+
+decorate_tuple_sets([{Arity, Tuples}|List], [{Arity, Ts}|L], Opaques, Acc) ->
+ DecTs = decorate_tuples_in_sets(Tuples, Ts, Opaques),
+ decorate_tuple_sets(List, L, Opaques, [{Arity, DecTs}|Acc]);
+decorate_tuple_sets([ArTup|List], L, Opaques, Acc) ->
+ decorate_tuple_sets(List, L, Opaques, [ArTup|Acc]);
+decorate_tuple_sets([], _L, _Opaques, Acc) ->
+ ?tuple_set(lists:reverse(Acc)).
+
+decorate_tuples_in_sets([?tuple(Elements, _, ?any)], Ts, Opaques) ->
+ NewList = [list_decorate(Elements, Es, Opaques) || ?tuple(Es, _, _) <- Ts],
+ case t_sup([t_tuple(Es) || Es <- NewList]) of
+ ?tuple_set([{_Arity, Tuples}]) -> Tuples;
+ ?tuple(_, _, _)=Tuple -> [Tuple]
+ end;
+decorate_tuples_in_sets(Tuples, Ts, Opaques) ->
+ decorate_tuples_in_sets(Tuples, Ts, Opaques, []).
+
+decorate_tuples_in_sets([?tuple(Elements, Arity, Tag1) = T1|Tuples] = L1,
+ [?tuple(Es, Arity, Tag2)|Ts] = L2, Opaques, Acc) ->
+ if
+ Tag1 < Tag2 -> decorate_tuples_in_sets(Tuples, L2, Opaques, [T1|Acc]);
+ Tag1 > Tag2 -> decorate_tuples_in_sets(L1, Ts, Opaques, Acc);
+ Tag1 =:= Tag2 ->
+ NewElements = list_decorate(Elements, Es, Opaques),
+ NewAcc = [?tuple(NewElements, Arity, Tag1)|Acc],
+ decorate_tuples_in_sets(Tuples, Ts, Opaques, NewAcc)
+ end;
+decorate_tuples_in_sets([T1|Tuples], L2, Opaques, Acc) ->
+ decorate_tuples_in_sets(Tuples, L2, Opaques, [T1|Acc]);
+decorate_tuples_in_sets([], _L, _Opaques, Acc) ->
+ lists:reverse(Acc).
+
-spec t_opaque_from_records(dict()) -> [erl_type()].
t_opaque_from_records(RecDict) ->
@@ -559,44 +743,6 @@ t_opaque_from_records(RecDict) ->
end, OpaqueRecDict),
[OpaqueType || {_Key, OpaqueType} <- dict:to_list(OpaqueTypeDict)].
--spec t_opaque_match_atom(erl_type(), [erl_type()]) -> [erl_type()].
-
-t_opaque_match_atom(?atom(_) = Atom, Opaques) ->
- case t_atom_vals(Atom) of
- unknown -> [];
- _ -> [O || O <- Opaques, t_inf(Atom, O, opaque) =/= ?none,
- t_opaque_atom_vals(t_opaque_structure(O)) =/= unknown]
- end;
-t_opaque_match_atom(_, _) -> [].
-
--spec t_opaque_atom_vals(erl_type()) -> 'unknown' | [atom(),...].
-
-t_opaque_atom_vals(OpaqueStruct) ->
- case OpaqueStruct of
- ?atom(_) -> t_atom_vals(OpaqueStruct);
- ?union([Atom,_,_,_,_,_,_,_,_,_]) -> t_atom_vals(Atom);
- _ -> unknown
- end.
-
--spec t_opaque_match_record(erl_type(), [erl_type()]) -> [erl_type()].
-
-t_opaque_match_record(?tuple([?atom(_) = Tag|_Fields], _, _) = Rec, Opaques) ->
- [O || O <- Opaques, t_inf(Rec, O, opaque) =/= ?none,
- lists:member(Tag, t_opaque_tuple_tags(t_opaque_structure(O)))];
-t_opaque_match_record(_, _) -> [].
-
--spec t_opaque_tuple_tags(erl_type()) -> [erl_type()].
-
-t_opaque_tuple_tags(OpaqueStruct) ->
- case OpaqueStruct of
- ?tuple([?atom(_) = Tag|_Fields], _, _) -> [Tag];
- ?tuple_set(_) = TupleSet ->
- Tuples = t_tuple_subtypes(TupleSet),
- lists:flatten([t_opaque_tuple_tags(T) || T <- Tuples]);
- ?union([_,_,_,_,_,_,Tuples,_,_,_]) -> t_opaque_tuple_tags(Tuples);
- _ -> []
- end.
-
%% Decompose opaque instances of type arg2 to structured types, in arg1
%% XXX: Same as t_unopaque
-spec t_struct_from_opaque(erl_type(), [erl_type()]) -> erl_type().
@@ -605,9 +751,10 @@ t_struct_from_opaque(?function(Domain, Range), Opaques) ->
?function(t_struct_from_opaque(Domain, Opaques),
t_struct_from_opaque(Range, Opaques));
t_struct_from_opaque(?list(Types, Term, Size), Opaques) ->
- ?list(t_struct_from_opaque(Types, Opaques), Term, Size);
+ ?list(t_struct_from_opaque(Types, Opaques),
+ t_struct_from_opaque(Term, Opaques), Size);
t_struct_from_opaque(?opaque(_) = T, Opaques) ->
- case lists:member(T, Opaques) of
+ case is_opaque_type(T, Opaques) of
true -> t_opaque_structure(T);
false -> T
end;
@@ -627,24 +774,10 @@ t_struct_from_opaque(Type, _Opaques) -> Type.
list_struct_from_opaque(Types, Opaques) ->
[t_struct_from_opaque(Type, Opaques) || Type <- Types].
--spec t_unopaque_on_mismatch(erl_type(), erl_type(), [erl_type()]) -> erl_type().
-
-t_unopaque_on_mismatch(GenType, Type, Opaques) ->
- case t_inf(GenType, Type) of
- ?none ->
- Unopaqued = t_unopaque(Type, Opaques),
- %% XXX: Unions might be a problem, must investigate.
- case t_inf(GenType, Unopaqued) of
- ?none -> Type;
- _ -> Unopaqued
- end;
- _ -> Type
- end.
-
-spec module_builtin_opaques(module()) -> [erl_type()].
module_builtin_opaques(Module) ->
- [O || O <- all_opaque_builtins(), t_opaque_module(O) =:= Module].
+ [O || O <- all_opaque_builtins(), lists:member(Module, t_opaque_modules(O))].
%%-----------------------------------------------------------------------------
%% Remote types: these types are used for preprocessing;
@@ -657,8 +790,11 @@ t_remote(Mod, Name, Args) ->
-spec t_is_remote(erl_type()) -> boolean().
-t_is_remote(?remote(_)) -> true;
-t_is_remote(_) -> false.
+t_is_remote(Type) ->
+ do_opaque(Type, 'universe', fun is_remote/1).
+
+is_remote(?remote(_)) -> true;
+is_remote(_) -> false.
-spec t_solve_remote(erl_type(), set(), dict()) -> erl_type().
@@ -827,40 +963,75 @@ t_atoms(List) when is_list(List) ->
-spec t_atom_vals(erl_type()) -> 'unknown' | [atom(),...].
-t_atom_vals(?atom(?any)) -> unknown;
-t_atom_vals(?atom(Set)) -> set_to_list(Set);
-t_atom_vals(Other) ->
+t_atom_vals(Type) ->
+ t_atom_vals(Type, 'universe').
+
+-spec t_atom_vals(erl_type(), opaques()) -> 'unknown' | [atom(),...].
+
+t_atom_vals(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun atom_vals/1).
+
+atom_vals(?atom(?any)) -> unknown;
+atom_vals(?atom(Set)) -> set_to_list(Set);
+atom_vals(?opaque(_)) -> unknown;
+atom_vals(Other) ->
?atom(_) = Atm = t_inf(t_atom(), Other),
- t_atom_vals(Atm).
+ atom_vals(Atm).
-spec t_is_atom(erl_type()) -> boolean().
-t_is_atom(?atom(_)) -> true;
-t_is_atom(_) -> false.
+t_is_atom(Type) ->
+ t_is_atom(Type, 'universe').
+
+-spec t_is_atom(erl_type(), opaques()) -> boolean().
+
+t_is_atom(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_atom1/1).
+
+is_atom1(?atom(_)) -> true;
+is_atom1(_) -> false.
+
+-spec t_is_any_atom(atom(), erl_type()) -> boolean().
+
+t_is_any_atom(Atom, SomeAtomsType) ->
+ t_is_any_atom(Atom, SomeAtomsType, 'universe').
--spec t_is_atom(atom(), erl_type()) -> boolean().
+-spec t_is_any_atom(atom(), erl_type(), opaques()) -> boolean().
-t_is_atom(Atom, ?atom(?any)) when is_atom(Atom) -> false;
-t_is_atom(Atom, ?atom(Set)) when is_atom(Atom) -> set_is_singleton(Atom, Set);
-t_is_atom(Atom, _) when is_atom(Atom) -> false.
+t_is_any_atom(Atom, SomeAtomsType, Opaques) ->
+ do_opaque(SomeAtomsType, Opaques,
+ fun(AtomsType) -> is_any_atom(Atom, AtomsType) end).
+
+is_any_atom(Atom, ?atom(?any)) when is_atom(Atom) -> false;
+is_any_atom(Atom, ?atom(Set)) when is_atom(Atom) ->
+ set_is_singleton(Atom, Set);
+is_any_atom(Atom, _) when is_atom(Atom) -> false.
%%------------------------------------
+-spec t_is_boolean(erl_type()) -> boolean().
+
+t_is_boolean(Type) ->
+ t_is_boolean(Type, 'universe').
+
+-spec t_is_boolean(erl_type(), opaques()) -> boolean().
+
+t_is_boolean(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_boolean/1).
+
-spec t_boolean() -> erl_type().
t_boolean() ->
?atom(set_from_list([false, true])).
--spec t_is_boolean(erl_type()) -> boolean().
-
-t_is_boolean(?atom(?any)) -> false;
-t_is_boolean(?atom(Set)) ->
+is_boolean(?atom(?any)) -> false;
+is_boolean(?atom(Set)) ->
case set_size(Set) of
1 -> set_is_element(true, Set) orelse set_is_element(false, Set);
2 -> set_is_element(true, Set) andalso set_is_element(false, Set);
N when is_integer(N), N > 2 -> false
end;
-t_is_boolean(_) -> false.
+is_boolean(_) -> false.
%%-----------------------------------------------------------------------------
%% Binaries
@@ -873,9 +1044,17 @@ t_binary() ->
-spec t_is_binary(erl_type()) -> boolean().
-t_is_binary(?bitstr(U, B)) ->
+t_is_binary(Type) ->
+ t_is_binary(Type, 'universe').
+
+-spec t_is_binary(erl_type(), opaques()) -> boolean().
+
+t_is_binary(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_binary/1).
+
+is_binary(?bitstr(U, B)) ->
((U rem 8) =:= 0) andalso ((B rem 8) =:= 0);
-t_is_binary(_) -> false.
+is_binary(_) -> false.
%%-----------------------------------------------------------------------------
%% Bitstrings
@@ -922,19 +1101,27 @@ t_bitstr_concat_1([], Acc) ->
t_bitstr_concat(T1, T2) ->
T1p = t_inf(t_bitstr(), T1),
T2p = t_inf(t_bitstr(), T2),
- bitstr_concat(T1p, T2p).
+ bitstr_concat(t_unopaque(T1p), t_unopaque(T2p)).
-spec t_bitstr_match(erl_type(), erl_type()) -> erl_type().
t_bitstr_match(T1, T2) ->
T1p = t_inf(t_bitstr(), T1),
T2p = t_inf(t_bitstr(), T2),
- bitstr_match(T1p, T2p).
+ bitstr_match(t_unopaque(T1p), t_unopaque(T2p)).
-spec t_is_bitstr(erl_type()) -> boolean().
-t_is_bitstr(?bitstr(_, _)) -> true;
-t_is_bitstr(_) -> false.
+t_is_bitstr(Type) ->
+ t_is_bitstr(Type, 'universe').
+
+-spec t_is_bitstr(erl_type(), opaques()) -> boolean().
+
+t_is_bitstr(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_bitstr/1).
+
+is_bitstr(?bitstr(_, _)) -> true;
+is_bitstr(_) -> false.
%%-----------------------------------------------------------------------------
%% Matchstates
@@ -1045,27 +1232,59 @@ t_fun(Arity, Range) when is_integer(Arity), 0 =< Arity, Arity =< 255 ->
-spec t_fun_args(erl_type()) -> 'unknown' | [erl_type()].
-t_fun_args(?function(?any, _)) ->
+t_fun_args(Type) ->
+ t_fun_args(Type, 'universe').
+
+-spec t_fun_args(erl_type(), opaques()) -> 'unknown' | [erl_type()].
+
+t_fun_args(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_args/1).
+
+fun_args(?function(?any, _)) ->
unknown;
-t_fun_args(?function(?product(Domain), _)) when is_list(Domain) ->
+fun_args(?function(?product(Domain), _)) when is_list(Domain) ->
Domain.
-spec t_fun_arity(erl_type()) -> 'unknown' | non_neg_integer().
-t_fun_arity(?function(?any, _)) ->
+t_fun_arity(Type) ->
+ t_fun_arity(Type, 'universe').
+
+-spec t_fun_arity(erl_type(), opaques()) -> 'unknown' | non_neg_integer().
+
+t_fun_arity(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_arity/1).
+
+fun_arity(?function(?any, _)) ->
unknown;
-t_fun_arity(?function(?product(Domain), _)) ->
+fun_arity(?function(?product(Domain), _)) ->
length(Domain).
-spec t_fun_range(erl_type()) -> erl_type().
-t_fun_range(?function(_, Range)) ->
+t_fun_range(Type) ->
+ t_fun_range(Type, 'universe').
+
+-spec t_fun_range(erl_type(), opaques()) -> erl_type().
+
+t_fun_range(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun fun_range/1).
+
+fun_range(?function(_, Range)) ->
Range.
-spec t_is_fun(erl_type()) -> boolean().
-t_is_fun(?function(_, _)) -> true;
-t_is_fun(_) -> false.
+t_is_fun(Type) ->
+ t_is_fun(Type, 'universe').
+
+-spec t_is_fun(erl_type(), opaques()) -> boolean().
+
+t_is_fun(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_fun/1).
+
+is_fun(?function(_, _)) -> true;
+is_fun(_) -> false.
%%-----------------------------------------------------------------------------
%% Identifiers. Includes ports, pids and refs.
@@ -1092,9 +1311,17 @@ t_port() ->
-spec t_is_port(erl_type()) -> boolean().
-t_is_port(?identifier(?any)) -> false;
-t_is_port(?identifier(Set)) -> set_is_singleton(?port_qual, Set);
-t_is_port(_) -> false.
+t_is_port(Type) ->
+ t_is_port(Type, 'universe').
+
+-spec t_is_port(erl_type(), opaques()) -> boolean().
+
+t_is_port(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_port1/1).
+
+is_port1(?identifier(?any)) -> false;
+is_port1(?identifier(Set)) -> set_is_singleton(?port_qual, Set);
+is_port1(_) -> false.
%%------------------------------------
@@ -1105,9 +1332,17 @@ t_pid() ->
-spec t_is_pid(erl_type()) -> boolean().
-t_is_pid(?identifier(?any)) -> false;
-t_is_pid(?identifier(Set)) -> set_is_singleton(?pid_qual, Set);
-t_is_pid(_) -> false.
+t_is_pid(Type) ->
+ t_is_pid(Type, 'universe').
+
+-spec t_is_pid(erl_type(), opaques()) -> boolean().
+
+t_is_pid(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_pid1/1).
+
+is_pid1(?identifier(?any)) -> false;
+is_pid1(?identifier(Set)) -> set_is_singleton(?pid_qual, Set);
+is_pid1(_) -> false.
%%------------------------------------
@@ -1118,9 +1353,17 @@ t_reference() ->
-spec t_is_reference(erl_type()) -> boolean().
-t_is_reference(?identifier(?any)) -> false;
-t_is_reference(?identifier(Set)) -> set_is_singleton(?reference_qual, Set);
-t_is_reference(_) -> false.
+t_is_reference(Type) ->
+ t_is_reference(Type, 'universe').
+
+-spec t_is_reference(erl_type(), opaques()) -> boolean().
+
+t_is_reference(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_reference1/1).
+
+is_reference1(?identifier(?any)) -> false;
+is_reference1(?identifier(Set)) -> set_is_singleton(?reference_qual, Set);
+is_reference1(_) -> false.
%%-----------------------------------------------------------------------------
%% Numbers are divided into floats, integers, chars and bytes.
@@ -1138,21 +1381,39 @@ t_number(X) when is_integer(X) ->
-spec t_is_number(erl_type()) -> boolean().
-t_is_number(?number(_, _)) -> true;
-t_is_number(_) -> false.
+t_is_number(Type) ->
+ t_is_number(Type, 'universe').
+
+-spec t_is_number(erl_type(), opaques()) -> boolean().
+
+t_is_number(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_number/1).
+
+is_number(?number(_, _)) -> true;
+is_number(_) -> false.
%% Currently, the type system collapses all floats to ?float and does
%% not keep any information about their values. As a result, the list
%% that this function returns contains only integers.
+
-spec t_number_vals(erl_type()) -> 'unknown' | [integer(),...].
-t_number_vals(?int_set(?any)) -> unknown;
-t_number_vals(?int_set(Set)) -> set_to_list(Set);
-t_number_vals(?number(_, _)) -> unknown;
-t_number_vals(Other) ->
+t_number_vals(Type) ->
+ t_number_vals(Type, 'universe').
+
+-spec t_number_vals(erl_type(), opaques()) -> 'unknown' | [integer(),...].
+
+t_number_vals(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_vals/1).
+
+number_vals(?int_set(?any)) -> unknown;
+number_vals(?int_set(Set)) -> set_to_list(Set);
+number_vals(?number(_, _)) -> unknown;
+number_vals(?opaque(_)) -> unknown;
+number_vals(Other) ->
Inf = t_inf(Other, t_number()),
false = t_is_none(Inf), % sanity check
- t_number_vals(Inf).
+ number_vals(Inf).
%%------------------------------------
@@ -1163,8 +1424,16 @@ t_float() ->
-spec t_is_float(erl_type()) -> boolean().
-t_is_float(?float) -> true;
-t_is_float(_) -> false.
+t_is_float(Type) ->
+ t_is_float(Type, 'universe').
+
+-spec t_is_float(erl_type(), opaques()) -> boolean().
+
+t_is_float(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_float1/1).
+
+is_float1(?float) -> true;
+is_float1(_) -> false.
%%------------------------------------
@@ -1185,8 +1454,16 @@ t_integers(List) when is_list(List) ->
-spec t_is_integer(erl_type()) -> boolean().
-t_is_integer(?integer(_)) -> true;
-t_is_integer(_) -> false.
+t_is_integer(Type) ->
+ t_is_integer(Type, 'universe').
+
+-spec t_is_integer(erl_type(), opaques()) -> boolean().
+
+t_is_integer(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_integer1/1).
+
+is_integer1(?integer(_)) -> true;
+is_integer1(_) -> false.
%%------------------------------------
@@ -1250,7 +1527,7 @@ t_cons(Hd, ?nil) ->
t_cons(Hd, ?list(Contents, Termination, _)) ->
?nonempty_list(t_sup(Contents, Hd), Termination);
t_cons(Hd, Tail) ->
- case t_inf(Tail, t_maybe_improper_list()) of
+ case cons_tail(t_inf(Tail, t_maybe_improper_list())) of
?list(Contents, Termination, _Size) ->
%% Collapse the list part of the termination but keep the
%% non-list part intact.
@@ -1262,18 +1539,45 @@ t_cons(Hd, Tail) ->
?unit -> ?none
end.
+cons_tail(Type) ->
+ do_opaque(Type, 'universe', fun(T) -> T end).
+
-spec t_is_cons(erl_type()) -> boolean().
-t_is_cons(?nonempty_list(_, _)) -> true;
-t_is_cons(_) -> false.
+t_is_cons(Type) ->
+ t_is_cons(Type, 'universe').
+
+-spec t_is_cons(erl_type(), opaques()) -> boolean().
+
+t_is_cons(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_cons/1).
+
+is_cons(?nonempty_list(_, _)) -> true;
+is_cons(_) -> false.
-spec t_cons_hd(erl_type()) -> erl_type().
-t_cons_hd(?nonempty_list(Contents, _Termination)) -> Contents.
+t_cons_hd(Type) ->
+ t_cons_hd(Type, 'universe').
+
+-spec t_cons_hd(erl_type(), opaques()) -> erl_type().
+
+t_cons_hd(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun cons_hd/1).
+
+cons_hd(?nonempty_list(Contents, _Termination)) -> Contents.
-spec t_cons_tl(erl_type()) -> erl_type().
-t_cons_tl(?nonempty_list(_Contents, Termination) = T) ->
+t_cons_tl(Type) ->
+ t_cons_tl(Type, 'universe').
+
+-spec t_cons_tl(erl_type(), opaques()) -> erl_type().
+
+t_cons_tl(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun cons_tl/1).
+
+cons_tl(?nonempty_list(_Contents, Termination) = T) ->
t_sup(Termination, T).
-spec t_nil() -> erl_type().
@@ -1283,8 +1587,16 @@ t_nil() ->
-spec t_is_nil(erl_type()) -> boolean().
-t_is_nil(?nil) -> true;
-t_is_nil(_) -> false.
+t_is_nil(Type) ->
+ t_is_nil(Type, 'universe').
+
+-spec t_is_nil(erl_type(), opaques()) -> boolean().
+
+t_is_nil(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_nil/1).
+
+is_nil(?nil) -> true;
+is_nil(_) -> false.
-spec t_list() -> erl_type().
@@ -1300,8 +1612,16 @@ t_list(Contents) ->
-spec t_list_elements(erl_type()) -> erl_type().
-t_list_elements(?list(Contents, _, _)) -> Contents;
-t_list_elements(?nil) -> ?none.
+t_list_elements(Type) ->
+ t_list_elements(Type, 'universe').
+
+-spec t_list_elements(erl_type(), opaques()) -> erl_type().
+
+t_list_elements(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun list_elements/1).
+
+list_elements(?list(Contents, _, _)) -> Contents;
+list_elements(?nil) -> ?none.
-spec t_list_termination(erl_type()) -> erl_type().
@@ -1356,9 +1676,17 @@ t_maybe_improper_list(Content, Termination) ->
-spec t_is_maybe_improper_list(erl_type()) -> boolean().
-t_is_maybe_improper_list(?list(_, _, _)) -> true;
-t_is_maybe_improper_list(?nil) -> true;
-t_is_maybe_improper_list(_) -> false.
+t_is_maybe_improper_list(Type) ->
+ t_is_maybe_improper_list(Type, 'universe').
+
+-spec t_is_maybe_improper_list(erl_type(), opaques()) -> boolean().
+
+t_is_maybe_improper_list(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_maybe_improper_list/1).
+
+is_maybe_improper_list(?list(_, _, _)) -> true;
+is_maybe_improper_list(?nil) -> true;
+is_maybe_improper_list(_) -> false.
%% %% Should only be used if you know what you are doing. See t_cons/2
%% -spec t_improper_list(erl_type(), erl_type()) -> erl_type().
@@ -1377,6 +1705,29 @@ lift_list_to_pos_empty(?list(Content, Termination, _)) ->
?list(Content, Termination, ?unknown_qual).
%%-----------------------------------------------------------------------------
+%% Maps
+%%
+
+-spec t_map() -> erl_type().
+
+t_map() ->
+ ?map([]).
+
+-spec t_map([{erl_type(),erl_type()}]) -> erl_type().
+
+t_map(_) ->
+ ?map([]).
+
+-spec t_is_map(erl_type(), opaques()) -> boolean().
+
+t_is_map(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_map1/1).
+
+is_map1(?map(_)) -> true;
+is_map1(_) -> false.
+
+
+%%-----------------------------------------------------------------------------
%% Tuples
%%
@@ -1405,32 +1756,77 @@ t_tuple(List) ->
-spec get_tuple_tags([erl_type()]) -> [erl_type(),...].
-get_tuple_tags([?atom(?any)|_]) -> [?any];
-get_tuple_tags([?atom(Set)|_]) ->
+get_tuple_tags([Tag|_]) ->
+ do_opaque(Tag, 'universe', fun tuple_tags/1);
+get_tuple_tags(_) -> [?any].
+
+tuple_tags(?atom(?any)) -> [?any];
+tuple_tags(?atom(Set)) ->
case set_size(Set) > ?TUPLE_TAG_LIMIT of
true -> [?any];
false -> [t_atom(A) || A <- set_to_list(Set)]
end;
-get_tuple_tags(_) -> [?any].
+tuple_tags(_) -> [?any].
%% to be used for a tuple with known types for its arguments (not ?any)
-spec t_tuple_args(erl_type()) -> [erl_type()].
-t_tuple_args(?tuple(Args, _, _)) when is_list(Args) -> Args.
+t_tuple_args(Type) ->
+ t_tuple_args(Type, 'universe').
+
+%% to be used for a tuple with known types for its arguments (not ?any)
+-spec t_tuple_args(erl_type(), opaques()) -> [erl_type()].
+
+t_tuple_args(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun tuple_args/1).
+
+tuple_args(?tuple(Args, _, _)) when is_list(Args) -> Args.
%% to be used for a tuple with a known size (not ?any)
-spec t_tuple_size(erl_type()) -> non_neg_integer().
-t_tuple_size(?tuple(_, Size, _)) when is_integer(Size) -> Size.
+t_tuple_size(Type) ->
+ t_tuple_size(Type, 'universe').
+
+%% to be used for a tuple with a known size (not ?any)
+-spec t_tuple_size(erl_type(), opaques()) -> non_neg_integer().
+
+t_tuple_size(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun tuple_size1/1).
+
+tuple_size1(?tuple(_, Size, _)) when is_integer(Size) -> Size.
-spec t_tuple_sizes(erl_type()) -> 'unknown' | [non_neg_integer(),...].
-t_tuple_sizes(?tuple(?any, ?any, ?any)) -> unknown;
-t_tuple_sizes(?tuple(_, Size, _)) when is_integer(Size) -> [Size];
-t_tuple_sizes(?tuple_set(List)) -> [Size || {Size, _} <- List].
+t_tuple_sizes(Type) ->
+ do_opaque(Type, 'universe', fun tuple_sizes/1).
+
+tuple_sizes(?tuple(?any, ?any, ?any)) -> unknown;
+tuple_sizes(?tuple(_, Size, _)) when is_integer(Size) -> [Size];
+tuple_sizes(?tuple_set(List)) -> [Size || {Size, _} <- List].
+
+-spec t_tuple_subtypes(erl_type(), opaques()) ->
+ 'unknown' | [erl_type(),...].
+
+t_tuple_subtypes(Type, Opaques) ->
+ Fun = fun(?tuple_set(List)) ->
+ t_tuple_subtypes_tuple_list(List, Opaques);
+ (?opaque(_)) -> unknown;
+ (T) -> t_tuple_subtypes(T)
+ end,
+ do_opaque(Type, Opaques, Fun).
+
+t_tuple_subtypes_tuple_list(List, Opaques) ->
+ lists:append([t_tuple_subtypes_list(Tuples, Opaques) ||
+ {_Size, Tuples} <- List]).
+
+t_tuple_subtypes_list(List, Opaques) ->
+ ListOfLists = [t_tuple_subtypes(E, Opaques) || E <- List, E =/= ?none],
+ lists:append([L || L <- ListOfLists, L =/= 'unknown']).
-spec t_tuple_subtypes(erl_type()) -> 'unknown' | [erl_type(),...].
+%% XXX. Not the same as t_tuple_subtypes(T, 'universe')...
t_tuple_subtypes(?tuple(?any, ?any, ?any)) -> unknown;
t_tuple_subtypes(?tuple(_, _, _) = T) -> [T];
t_tuple_subtypes(?tuple_set(List)) ->
@@ -1438,9 +1834,17 @@ t_tuple_subtypes(?tuple_set(List)) ->
-spec t_is_tuple(erl_type()) -> boolean().
-t_is_tuple(?tuple(_, _, _)) -> true;
-t_is_tuple(?tuple_set(_)) -> true;
-t_is_tuple(_) -> false.
+t_is_tuple(Type) ->
+ t_is_tuple(Type, 'universe').
+
+-spec t_is_tuple(erl_type(), opaques()) -> boolean().
+
+t_is_tuple(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun is_tuple1/1).
+
+is_tuple1(?tuple(_, _, _)) -> true;
+is_tuple1(?tuple_set(_)) -> true;
+is_tuple1(_) -> false.
%%-----------------------------------------------------------------------------
%% Non-primitive types, including some handy syntactic sugar types
@@ -1451,6 +1855,7 @@ t_is_tuple(_) -> false.
t_bitstrlist() ->
t_iolist(1, t_bitstr()).
+%% XXX. To be removed.
-spec t_constant() -> erl_type().
t_constant() ->
@@ -1555,7 +1960,8 @@ t_timeout() ->
t_array() ->
t_opaque(array, array, [],
t_tuple([t_atom('array'),
- t_non_neg_integer(), t_non_neg_integer(),
+ t_sup([t_atom('undefined'), t_non_neg_integer()]),
+ t_sup([t_atom('undefined'), t_non_neg_integer()]),
t_any(), t_any()])).
-spec t_dict() -> erl_type().
@@ -1566,7 +1972,8 @@ t_dict() ->
t_non_neg_integer(), t_non_neg_integer(),
t_non_neg_integer(), t_non_neg_integer(),
t_non_neg_integer(), t_non_neg_integer(),
- t_tuple(), t_tuple()])).
+ t_sup([t_atom('undefined'), t_tuple()]),
+ t_sup([t_atom('undefined'), t_tuple()])])).
-spec t_digraph() -> erl_type().
@@ -1601,7 +2008,9 @@ t_set() ->
t_opaque(sets, set, [],
t_tuple([t_atom('set'), t_non_neg_integer(), t_non_neg_integer(),
t_pos_integer(), t_non_neg_integer(), t_non_neg_integer(),
- t_non_neg_integer(), t_tuple(), t_tuple()])).
+ t_non_neg_integer(),
+ t_sup([t_atom('undefined'), t_tuple()]),
+ t_sup([t_atom('undefined'), t_tuple()])])).
-spec t_tid() -> erl_type().
@@ -1673,8 +2082,11 @@ t_has_var(?tuple(Elements, _, _)) ->
t_has_var_list(Elements);
t_has_var(?tuple_set(_) = T) ->
t_has_var_list(t_tuple_subtypes(T));
+%% t_has_var(?opaque(_)=T) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% t_has_var(t_opaque_structure(T));
%% t_has_var(?union(_) = U) ->
-%% exit(lists:flatten(io_lib:format("Union happens in t_has_var/1 ~p\n",[U])));
+%% exit(flat_format("Union happens in t_has_var/1 ~p\n",[U]));
t_has_var(_) -> false.
-spec t_has_var_list([erl_type()]) -> boolean().
@@ -1705,6 +2117,9 @@ t_collect_vars(?tuple(Types, _, _), Acc) ->
t_collect_vars(?tuple_set(_) = TS, Acc) ->
lists:foldl(fun(T, TmpAcc) -> t_collect_vars(T, TmpAcc) end, Acc,
t_tuple_subtypes(TS));
+%% t_collect_vars(?opaque(_)=T, Acc) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% t_collect_vars(t_opaque_structure(T), Acc);
t_collect_vars(_, Acc) ->
Acc.
@@ -1827,15 +2242,31 @@ t_is_bitwidth(_) -> false.
-spec number_min(erl_type()) -> rng_elem().
-number_min(?int_range(From, _)) -> From;
-number_min(?int_set(Set)) -> set_min(Set);
-number_min(?number(?any, _Tag)) -> neg_inf.
+number_min(Type) ->
+ number_min(Type, 'universe').
+
+-spec number_min(erl_type(), opaques()) -> rng_elem().
+
+number_min(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_min2/1).
+
+number_min2(?int_range(From, _)) -> From;
+number_min2(?int_set(Set)) -> set_min(Set);
+number_min2(?number(?any, _Tag)) -> neg_inf.
-spec number_max(erl_type()) -> rng_elem().
-number_max(?int_range(_, To)) -> To;
-number_max(?int_set(Set)) -> set_max(Set);
-number_max(?number(?any, _Tag)) -> pos_inf.
+number_max(Type) ->
+ number_max(Type, 'universe').
+
+-spec number_max(erl_type(), opaques()) -> rng_elem().
+
+number_max(Type, Opaques) ->
+ do_opaque(Type, Opaques, fun number_max2/1).
+
+number_max2(?int_range(_, To)) -> To;
+number_max2(?int_set(Set)) -> set_max(Set);
+number_max2(?number(?any, _Tag)) -> pos_inf.
%% -spec int_range(rgn_elem(), rng_elem()) -> erl_type().
%%
@@ -1917,7 +2348,7 @@ t_sup(?function(Domain1, Range1), ?function(Domain2, Range2)) ->
t_sup(?identifier(Set1), ?identifier(Set2)) ->
?identifier(set_union(Set1, Set2));
t_sup(?opaque(Set1), ?opaque(Set2)) ->
- ?opaque(set_union_no_limit(Set1, Set2));
+ sup_opaque(set_to_list(ordsets:union(Set1, Set2)));
%%Disallow unions with opaque types
%%t_sup(T1=?opaque(_,_,_), T2) ->
%% io:format("Debug: t_sup executed with args ~w and ~w~n",[T1, T2]), ?none;
@@ -2005,6 +2436,27 @@ t_sup(T1, T2) ->
?union(U2) = force_union(T2),
sup_union(U1, U2).
+sup_opaque([]) -> ?none;
+sup_opaque(List) ->
+ L = sup_opaq(List),
+ ?opaque(ordsets:from_list(L)).
+
+sup_opaq(L0) ->
+ L1 = [{{Mod,Name}, T} ||
+ #opaque{mod = Mod, name = Name}=T <- L0],
+ F = family(L1),
+ [supl(Ts) || {_, Ts} <- F].
+
+supl([O]) -> O;
+supl(Ts) -> supl(Ts, t_none()).
+
+supl([#opaque{struct = S}=O|L], S0) ->
+ S1 = t_sup(S, S0),
+ case L =:= [] of
+ true -> O#opaque{struct = S1};
+ false -> supl(L, S1)
+ end.
+
-spec t_sup_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_sup_lists([T1|Left1], [T2|Left2]) ->
@@ -2098,6 +2550,7 @@ force_union(T = ?nil) -> ?list_union(T);
force_union(T = ?number(_,_)) -> ?number_union(T);
force_union(T = ?opaque(_)) -> ?opaque_union(T);
force_union(T = ?remote(_)) -> ?remote_union(T);
+force_union(T = ?map(_)) -> ?map_union(T);
force_union(T = ?tuple(_, _, _)) -> ?tuple_union(T);
force_union(T = ?tuple_set(_)) -> ?tuple_union(T);
force_union(T = ?matchstate(_, _)) -> ?matchstate_union(T);
@@ -2132,19 +2585,27 @@ t_elements(?number(_, _) = T) ->
?int_set(Set) ->
[t_integer(I) || I <- Set]
end;
-t_elements(?opaque(_) = T) -> [T];
+t_elements(?opaque(_) = T) ->
+ do_elements(T);
+t_elements(?map(_) = T) -> [T];
t_elements(?tuple(_, _, _) = T) -> [T];
t_elements(?tuple_set(_) = TS) ->
case t_tuple_subtypes(TS) of
unknown -> [];
Elems -> Elems
end;
-t_elements(?union(List)) ->
- lists:append([t_elements(T) || T <- List]);
+t_elements(?union(_) = T) ->
+ do_elements(T);
t_elements(?var(_)) -> [?any]. %% yes, vars exist -- what else to do here?
%% t_elements(T) ->
%% io:format("T_ELEMENTS => ~p\n", [T]).
+do_elements(Type0) ->
+ case do_opaque(Type0, 'universe', fun(T) -> T end) of
+ ?union(List) -> lists:append([t_elements(T) || T <- List]);
+ Type -> t_elements(Type)
+ end.
+
%%-----------------------------------------------------------------------------
%% Infimum
%%
@@ -2162,74 +2623,77 @@ t_inf([]) -> ?none.
-spec t_inf(erl_type(), erl_type()) -> erl_type().
t_inf(T1, T2) ->
- t_inf(T1, T2, structured).
-
--type t_inf_mode() :: 'opaque' | 'structured'.
--spec t_inf(erl_type(), erl_type(), t_inf_mode()) -> erl_type().
-
-t_inf(?var(_), ?var(_), _Mode) -> ?any;
-t_inf(?var(_), T, _Mode) -> subst_all_vars_to_any(T);
-t_inf(T, ?var(_), _Mode) -> subst_all_vars_to_any(T);
-t_inf(?any, T, _Mode) -> subst_all_vars_to_any(T);
-t_inf(T, ?any, _Mode) -> subst_all_vars_to_any(T);
-t_inf(?none, _, _Mode) -> ?none;
-t_inf(_, ?none, _Mode) -> ?none;
-t_inf(?unit, _, _Mode) -> ?unit; % ?unit cases should appear below ?none
-t_inf(_, ?unit, _Mode) -> ?unit;
-t_inf(T, T, _Mode) -> subst_all_vars_to_any(T);
+ t_inf(T1, T2, 'universe').
+
+%% 'match' should be used from t_find_unknown_opaque() only
+-type t_inf_opaques() :: 'universe'
+ | [erl_type()] | {'match', [erl_type() | 'universe']}.
+
+-spec t_inf(erl_type(), erl_type(), t_inf_opaques()) -> erl_type().
+
+t_inf(?var(_), ?var(_), _Opaques) -> ?any;
+t_inf(?var(_), T, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(T, ?var(_), _Opaques) -> subst_all_vars_to_any(T);
+t_inf(?any, T, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(T, ?any, _Opaques) -> subst_all_vars_to_any(T);
+t_inf(?none, _, _Opaques) -> ?none;
+t_inf(_, ?none, _Opaques) -> ?none;
+t_inf(?unit, _, _Opaques) -> ?unit; % ?unit cases should appear below ?none
+t_inf(_, ?unit, _Opaques) -> ?unit;
+t_inf(T, T, _Opaques) -> subst_all_vars_to_any(T);
t_inf(?atom(Set1), ?atom(Set2), _) ->
case set_intersection(Set1, Set2) of
?none -> ?none;
NewSet -> ?atom(NewSet)
end;
-t_inf(?bitstr(U1, B1), ?bitstr(0, B2), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(0, B2), _Opaques) ->
if B2 >= B1 andalso (B2-B1) rem U1 =:= 0 -> t_bitstr(0, B2);
true -> ?none
end;
-t_inf(?bitstr(0, B1), ?bitstr(U2, B2), _Mode) ->
+t_inf(?bitstr(0, B1), ?bitstr(U2, B2), _Opaques) ->
if B1 >= B2 andalso (B1-B2) rem U2 =:= 0 -> t_bitstr(0, B1);
true -> ?none
end;
-t_inf(?bitstr(U1, B1), ?bitstr(U1, B1), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(U1, B1), _Opaques) ->
t_bitstr(U1, B1);
-t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Mode) when U2 > U1 ->
+t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Opaques) when U2 > U1 ->
inf_bitstr(U2, B2, U1, B1);
-t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Mode) ->
+t_inf(?bitstr(U1, B1), ?bitstr(U2, B2), _Opaques) ->
inf_bitstr(U1, B1, U2, B2);
-t_inf(?function(Domain1, Range1), ?function(Domain2, Range2), Mode) ->
- case t_inf(Domain1, Domain2, Mode) of
+t_inf(?function(Domain1, Range1), ?function(Domain2, Range2), Opaques) ->
+ case t_inf(Domain1, Domain2, Opaques) of
?none -> ?none;
- Domain -> ?function(Domain, t_inf(Range1, Range2, Mode))
+ Domain -> ?function(Domain, t_inf(Range1, Range2, Opaques))
end;
-t_inf(?identifier(Set1), ?identifier(Set2), _Mode) ->
+t_inf(?identifier(Set1), ?identifier(Set2), _Opaques) ->
case set_intersection(Set1, Set2) of
?none -> ?none;
Set -> ?identifier(Set)
end;
-t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Mode) ->
+t_inf(?matchstate(Pres1, Slots1), ?matchstate(Pres2, Slots2), _Opaques) ->
?matchstate(t_inf(Pres1, Pres2), t_inf(Slots1, Slots2));
-t_inf(?nil, ?nil, _Mode) -> ?nil;
-t_inf(?nil, ?nonempty_list(_, _), _Mode) ->
+t_inf(?nil, ?nil, _Opaques) -> ?nil;
+t_inf(?nil, ?nonempty_list(_, _), _Opaques) ->
?none;
-t_inf(?nonempty_list(_, _), ?nil, _Mode) ->
+t_inf(?nonempty_list(_, _), ?nil, _Opaques) ->
?none;
-t_inf(?nil, ?list(_Contents, Termination, _), Mode) ->
- t_inf(?nil, Termination, Mode);
-t_inf(?list(_Contents, Termination, _), ?nil, Mode) ->
- t_inf(?nil, Termination, Mode);
+t_inf(?nil, ?list(_Contents, Termination, _), Opaques) ->
+ t_inf(?nil, t_unopaque(Termination), Opaques);
+t_inf(?list(_Contents, Termination, _), ?nil, Opaques) ->
+ t_inf(?nil, t_unopaque(Termination), Opaques);
t_inf(?list(Contents1, Termination1, Size1),
- ?list(Contents2, Termination2, Size2), Mode) ->
- case t_inf(Termination1, Termination2, Mode) of
+ ?list(Contents2, Termination2, Size2), Opaques) ->
+ case t_inf(Termination1, Termination2, Opaques) of
?none -> ?none;
Termination ->
- case t_inf(Contents1, Contents2, Mode) of
- ?none ->
+ case t_inf(Contents1, Contents2, Opaques) of
+ ?none ->
%% If none of the lists are nonempty, then the infimum is nil.
case (Size1 =:= ?unknown_qual) andalso (Size2 =:= ?unknown_qual) of
true -> t_nil();
false -> ?none
end;
- Contents ->
+ Contents ->
Size =
case {Size1, Size2} of
{?unknown_qual, ?unknown_qual} -> ?unknown_qual;
@@ -2240,7 +2704,7 @@ t_inf(?list(Contents1, Termination1, Size1),
?list(Contents, Termination, Size)
end
end;
-t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
+t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Opaques) ->
case {T1, T2} of
{T, T} -> T;
{_, ?number(?any, ?unknown_qual)} -> T1;
@@ -2249,16 +2713,16 @@ t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
{?integer(_), ?float} -> ?none;
{?integer(?any), ?integer(_)} -> T2;
{?integer(_), ?integer(?any)} -> T1;
- {?int_set(Set1), ?int_set(Set2)} ->
+ {?int_set(Set1), ?int_set(Set2)} ->
case set_intersection(Set1, Set2) of
?none -> ?none;
Set -> ?int_set(Set)
end;
- {?int_range(From1, To1), ?int_range(From2, To2)} ->
+ {?int_range(From1, To1), ?int_range(From2, To2)} ->
t_from_range(max(From1, From2), min(To1, To2));
{Range = ?int_range(_, _), ?int_set(Set)} ->
%% io:format("t_inf range, set args ~p ~p ~n", [T1, T2]),
- Ans2 =
+ Ans2 =
case set_filter(fun(X) -> in_range(X, Range) end, Set) of
?none -> ?none;
NewSet -> ?int_set(NewSet)
@@ -2271,193 +2735,253 @@ t_inf(?number(_, _) = T1, ?number(_, _) = T2, _Mode) ->
NewSet -> ?int_set(NewSet)
end
end;
-t_inf(?product(Types1), ?product(Types2), Mode) ->
+t_inf(?product(Types1), ?product(Types2), Opaques) ->
L1 = length(Types1),
L2 = length(Types2),
- if L1 =:= L2 -> ?product(t_inf_lists(Types1, Types2, Mode));
+ if L1 =:= L2 -> ?product(t_inf_lists(Types1, Types2, Opaques));
true -> ?none
end;
-t_inf(?product(_), _, _Mode) ->
+t_inf(?product(_), _, _Opaques) ->
?none;
-t_inf(_, ?product(_), _Mode) ->
+t_inf(_, ?product(_), _Opaques) ->
?none;
-t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Mode) ->
+t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Mode) ->
+t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Mode) ->
+t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Mode) ->
+t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
subst_all_vars_to_any(T);
-t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Mode) ->
- case t_inf_lists_strict(Elements1, Elements2, Mode) of
+t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Opaques) ->
+ case t_inf_lists_strict(Elements1, Elements2, Opaques) of
bottom -> ?none;
NewElements -> t_tuple(NewElements)
end;
-t_inf(?tuple_set(List1), ?tuple_set(List2), Mode) ->
- inf_tuple_sets(List1, List2, Mode);
-t_inf(?tuple_set(List), ?tuple(_, Arity, _) = T, Mode) ->
- inf_tuple_sets(List, [{Arity, [T]}], Mode);
-t_inf(?tuple(_, Arity, _) = T, ?tuple_set(List), Mode) ->
- inf_tuple_sets(List, [{Arity, [T]}], Mode);
+t_inf(?tuple_set(List1), ?tuple_set(List2), Opaques) ->
+ inf_tuple_sets(List1, List2, Opaques);
+t_inf(?tuple_set(List), ?tuple(_, Arity, _) = T, Opaques) ->
+ inf_tuple_sets(List, [{Arity, [T]}], Opaques);
+t_inf(?tuple(_, Arity, _) = T, ?tuple_set(List), Opaques) ->
+ inf_tuple_sets(List, [{Arity, [T]}], Opaques);
%% be careful: here and in the next clause T can be ?opaque
-t_inf(?union(U1), T, Mode) ->
+t_inf(?union(U1), T, Opaques) ->
?union(U2) = force_union(T),
- inf_union(U1, U2, Mode);
-t_inf(T, ?union(U2), Mode) ->
+ inf_union(U1, U2, Opaques);
+t_inf(T, ?union(U2), Opaques) ->
?union(U1) = force_union(T),
- inf_union(U1, U2, Mode);
+ inf_union(U1, U2, Opaques);
+t_inf(?opaque(Set1), ?opaque(Set2), Opaques) ->
+ inf_opaque(Set1, Set2, Opaques);
+t_inf(?opaque(_) = T1, T2, Opaques) ->
+ inf_opaque1(T2, T1, 1, Opaques);
+t_inf(T1, ?opaque(_) = T2, Opaques) ->
+ inf_opaque1(T1, T2, 2, Opaques);
%% and as a result, the cases for ?opaque should appear *after* ?union
-t_inf(?opaque(Set1) = T1, ?opaque(Set2) = T2, Mode) ->
- case set_intersection(Set1, Set2) of
- ?none ->
- case Mode =:= opaque of
- true ->
- Struct1 = t_opaque_structure(T1),
- case t_inf(Struct1, T2) of
- ?none ->
- Struct2 = t_opaque_structure(T2),
- case t_inf(Struct2, T1) of
- ?none -> ?none;
- _ -> T2
- end;
- _ -> T1
- end;
- false -> ?none
- end;
- NewSet -> ?opaque(NewSet)
- end;
-t_inf(?opaque(_) = T1, T2, opaque) ->
- case t_inf(t_opaque_structure(T1), T2, structured) of
- ?none -> ?none;
- _Type -> T1
- end;
-t_inf(T1, ?opaque(_) = T2, opaque) ->
- case t_inf(T1, t_opaque_structure(T2), structured) of
- ?none -> ?none;
- _Type -> T2
- end;
t_inf(#c{}, #c{}, _) ->
?none.
+inf_opaque1(T1, ?opaque(Set2)=T2, Pos, Opaques) ->
+ case Opaques =:= 'universe' orelse inf_is_opaque_type(T2, Pos, Opaques) of
+ false -> ?none;
+ true ->
+ List2 = set_to_list(Set2),
+ case inf_collect(T1, List2, Opaques, []) of
+ [] -> ?none;
+ OpL -> ?opaque(ordsets:from_list(OpL))
+ end
+ end.
+
+inf_is_opaque_type(T, Pos, {match, Opaques}) ->
+ is_opaque_type(T, Opaques) orelse throw(Pos);
+inf_is_opaque_type(T, _Pos, Opaques) ->
+ is_opaque_type(T, Opaques).
+
+inf_collect(T1, [T2|List2], Opaques, OpL) ->
+ #opaque{struct = S2} = T2,
+ case t_inf(T1, S2, Opaques) of
+ ?none -> inf_collect(T1, List2, Opaques, OpL);
+ Inf ->
+ Op = T2#opaque{struct = Inf},
+ inf_collect(T1, List2, Opaques, [Op|OpL])
+ end;
+inf_collect(_T1, [], _Opaques, OpL) ->
+ OpL.
+
+combine(S, T1, T2) ->
+ #opaque{mod = Mod1, name = Name1} = T1,
+ #opaque{mod = Mod2, name = Name2} = T2,
+ case {Mod1, Name1} =:= {Mod2, Name2} of
+ true -> [comb(Mod1, Name1, S, T1)];
+ false -> [comb(Mod1, Name1, S, T1), comb(Mod2, Name2, S, T2)]
+ end.
+
+comb(Mod, Name, S, T) ->
+ case is_same_name(Mod, Name, S) of
+ true -> S;
+ false -> T#opaque{struct = S}
+ end.
+
+is_same_name(Mod, Name, ?opaque([#opaque{mod = Mod, name = Name}])) -> true;
+is_same_name(_Mod, _Name, _Opaque) -> false.
+
+%% Combining two lists this way can be very time consuming...
+inf_opaque(Set1, Set2, Opaques) ->
+ List1 = inf_look_up(Set1, 1, Opaques),
+ List2 = inf_look_up(Set2, 2, Opaques),
+ List0 = [combine(Inf, T1, T2) ||
+ {Is1, ModName1, T1} <- List1,
+ {Is2, ModName2, T2} <- List2,
+ not t_is_none(Inf = inf_opaque_types(Is1, ModName1, T1,
+ Is2, ModName2, T2,
+ Opaques))],
+ List = lists:sort(lists:append(List0)),
+ sup_opaque(List).
+
+%% Optimization: do just one lookup.
+inf_look_up(Set, Pos, Opaques) ->
+ [{Opaques =:= 'universe' orelse inf_is_opaque_type2(T, Pos, Opaques),
+ {M, N}, T} ||
+ #opaque{mod = M, name = N} = T <- set_to_list(Set)].
+
+inf_is_opaque_type2(T, Pos, {match, Opaques}) ->
+ is_opaque_type2(T, Opaques) orelse throw(Pos);
+inf_is_opaque_type2(T, _Pos, Opaques) ->
+ is_opaque_type2(T, Opaques).
+
+inf_opaque_types(IsOpaque1, ModName1, T1, IsOpaque2, ModName2, T2, Opaques) ->
+ #opaque{struct = S1}=T1,
+ #opaque{struct = S2}=T2,
+ case Opaques =:= 'universe' orelse ModName1 =:= ModName2 of
+ true -> t_inf(S1, S2, Opaques);
+ false ->
+ case {IsOpaque1, IsOpaque2} of
+ {true, true} -> t_inf(S1, S2, Opaques);
+ {true, false} -> t_inf(S1, ?opaque(set_singleton(T2)), Opaques);
+ {false, true} -> t_inf(?opaque(set_singleton(T1)), S2, Opaques);
+ {false, false} -> t_none()
+ end
+ end.
+
-spec t_inf_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_inf_lists(L1, L2) ->
- t_inf_lists(L1, L2, structured).
+ t_inf_lists(L1, L2, 'universe').
--spec t_inf_lists([erl_type()], [erl_type()], t_inf_mode()) -> [erl_type()].
+-spec t_inf_lists([erl_type()], [erl_type()], t_inf_opaques()) -> [erl_type()].
-t_inf_lists(L1, L2, Mode) ->
- t_inf_lists(L1, L2, [], Mode).
+t_inf_lists(L1, L2, Opaques) ->
+ t_inf_lists(L1, L2, [], Opaques).
--spec t_inf_lists([erl_type()], [erl_type()], [erl_type()], t_inf_mode()) -> [erl_type()].
+-spec t_inf_lists([erl_type()], [erl_type()], [erl_type()], [erl_type()]) -> [erl_type()].
-t_inf_lists([T1|Left1], [T2|Left2], Acc, Mode) ->
- t_inf_lists(Left1, Left2, [t_inf(T1, T2, Mode)|Acc], Mode);
-t_inf_lists([], [], Acc, _Mode) ->
+t_inf_lists([T1|Left1], [T2|Left2], Acc, Opaques) ->
+ t_inf_lists(Left1, Left2, [t_inf(T1, T2, Opaques)|Acc], Opaques);
+t_inf_lists([], [], Acc, _Opaques) ->
lists:reverse(Acc).
%% Infimum of lists with strictness.
%% If any element is the ?none type, the value 'bottom' is returned.
--spec t_inf_lists_strict([erl_type()], [erl_type()], t_inf_mode()) -> 'bottom' | [erl_type()].
+-spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()]) -> 'bottom' | [erl_type()].
-t_inf_lists_strict(L1, L2, Mode) ->
- t_inf_lists_strict(L1, L2, [], Mode).
+t_inf_lists_strict(L1, L2, Opaques) ->
+ t_inf_lists_strict(L1, L2, [], Opaques).
--spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()], t_inf_mode()) -> 'bottom' | [erl_type()].
+-spec t_inf_lists_strict([erl_type()], [erl_type()], [erl_type()], [erl_type()]) -> 'bottom' | [erl_type()].
-t_inf_lists_strict([T1|Left1], [T2|Left2], Acc, Mode) ->
- case t_inf(T1, T2, Mode) of
+t_inf_lists_strict([T1|Left1], [T2|Left2], Acc, Opaques) ->
+ case t_inf(T1, T2, Opaques) of
?none -> bottom;
- T -> t_inf_lists_strict(Left1, Left2, [T|Acc], Mode)
+ T -> t_inf_lists_strict(Left1, Left2, [T|Acc], Opaques)
end;
-t_inf_lists_strict([], [], Acc, _Mode) ->
+t_inf_lists_strict([], [], Acc, _Opaques) ->
lists:reverse(Acc).
--spec t_inf_lists_masked([erl_type()], [erl_type()], [t_inf_mode()]) -> [erl_type()].
-
-t_inf_lists_masked(List1, List2, Mask) ->
- List = lists:zip3(List1, List2, Mask),
- [t_inf(T1, T2, Mode) || {T1, T2, Mode} <- List].
-
-inf_tuple_sets(L1, L2, Mode) ->
- case inf_tuple_sets(L1, L2, [], Mode) of
+inf_tuple_sets(L1, L2, Opaques) ->
+ case inf_tuple_sets(L1, L2, [], Opaques) of
[] -> ?none;
[{_Arity, [?tuple(_, _, _) = OneTuple]}] -> OneTuple;
List -> ?tuple_set(List)
end.
-inf_tuple_sets([{Arity, Tuples1}|Ts1], [{Arity, Tuples2}|Ts2], Acc, Mode) ->
- case inf_tuples_in_sets(Tuples1, Tuples2, Mode) of
- [] -> inf_tuple_sets(Ts1, Ts2, Acc, Mode);
+inf_tuple_sets([{Arity, Tuples1}|Ts1], [{Arity, Tuples2}|Ts2], Acc, Opaques) ->
+ case inf_tuples_in_sets(Tuples1, Tuples2, Opaques) of
+ [] -> inf_tuple_sets(Ts1, Ts2, Acc, Opaques);
[?tuple_set([{Arity, NewTuples}])] ->
- inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Mode);
- NewTuples -> inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Mode)
+ inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Opaques);
+ NewTuples -> inf_tuple_sets(Ts1, Ts2, [{Arity, NewTuples}|Acc], Opaques)
end;
-inf_tuple_sets([{Arity1, _}|Ts1] = L1, [{Arity2, _}|Ts2] = L2, Acc, Mode) ->
- if Arity1 < Arity2 -> inf_tuple_sets(Ts1, L2, Acc, Mode);
- Arity1 > Arity2 -> inf_tuple_sets(L1, Ts2, Acc, Mode)
+inf_tuple_sets([{Arity1, _}|Ts1] = L1, [{Arity2, _}|Ts2] = L2, Acc, Opaques) ->
+ if Arity1 < Arity2 -> inf_tuple_sets(Ts1, L2, Acc, Opaques);
+ Arity1 > Arity2 -> inf_tuple_sets(L1, Ts2, Acc, Opaques)
end;
-inf_tuple_sets([], _, Acc, _Mode) -> lists:reverse(Acc);
-inf_tuple_sets(_, [], Acc, _Mode) -> lists:reverse(Acc).
-
-inf_tuples_in_sets([?tuple(Elements1, _, ?any)], L2, Mode) ->
- NewList = [t_inf_lists_strict(Elements1, Elements2, Mode)
+inf_tuple_sets([], _, Acc, _Opaques) -> lists:reverse(Acc);
+inf_tuple_sets(_, [], Acc, _Opaques) -> lists:reverse(Acc).
+
+inf_tuples_in_sets([?tuple(Elements1, _, ?any)], L2, Opaques) ->
+ NewList = [t_inf_lists_strict(Elements1, Elements2, Opaques)
|| ?tuple(Elements2, _, _) <- L2],
[t_tuple(Es) || Es <- NewList, Es =/= bottom];
-inf_tuples_in_sets(L1, [?tuple(Elements2, _, ?any)], Mode) ->
- NewList = [t_inf_lists_strict(Elements1, Elements2, Mode)
+inf_tuples_in_sets(L1, [?tuple(Elements2, _, ?any)], Opaques) ->
+ NewList = [t_inf_lists_strict(Elements1, Elements2, Opaques)
|| ?tuple(Elements1, _, _) <- L1],
[t_tuple(Es) || Es <- NewList, Es =/= bottom];
-inf_tuples_in_sets(L1, L2, Mode) ->
- inf_tuples_in_sets(L1, L2, [], Mode).
+inf_tuples_in_sets(L1, L2, Opaques) ->
+ inf_tuples_in_sets2(L1, L2, [], Opaques).
-inf_tuples_in_sets([?tuple(Elements1, Arity, Tag)|Ts1],
- [?tuple(Elements2, Arity, Tag)|Ts2], Acc, Mode) ->
- case t_inf_lists_strict(Elements1, Elements2, Mode) of
- bottom -> inf_tuples_in_sets(Ts1, Ts2, Acc, Mode);
+inf_tuples_in_sets2([?tuple(Elements1, Arity, Tag)|Ts1],
+ [?tuple(Elements2, Arity, Tag)|Ts2], Acc, Opaques) ->
+ case t_inf_lists_strict(Elements1, Elements2, Opaques) of
+ bottom -> inf_tuples_in_sets2(Ts1, Ts2, Acc, Opaques);
NewElements ->
- inf_tuples_in_sets(Ts1, Ts2, [?tuple(NewElements, Arity, Tag)|Acc], Mode)
+ inf_tuples_in_sets2(Ts1, Ts2, [?tuple(NewElements, Arity, Tag)|Acc],
+ Opaques)
end;
-inf_tuples_in_sets([?tuple(_, _, Tag1)|Ts1] = L1,
- [?tuple(_, _, Tag2)|Ts2] = L2, Acc, Mode) ->
- if Tag1 < Tag2 -> inf_tuples_in_sets(Ts1, L2, Acc, Mode);
- Tag1 > Tag2 -> inf_tuples_in_sets(L1, Ts2, Acc, Mode)
+inf_tuples_in_sets2([?tuple(_, _, Tag1)|Ts1] = L1,
+ [?tuple(_, _, Tag2)|Ts2] = L2, Acc, Opaques) ->
+ if Tag1 < Tag2 -> inf_tuples_in_sets2(Ts1, L2, Acc, Opaques);
+ Tag1 > Tag2 -> inf_tuples_in_sets2(L1, Ts2, Acc, Opaques)
end;
-inf_tuples_in_sets([], _, Acc, _Mode) -> lists:reverse(Acc);
-inf_tuples_in_sets(_, [], Acc, _Mode) -> lists:reverse(Acc).
-
-inf_union(U1, U2, opaque) ->
-%%---------------------------------------------------------------------
-%% Under Testing
-%%----------------------------------------------------------------------
-%% OpaqueFun =
-%% fun(Union1, Union2) ->
-%% [_,_,_,_,_,_,_,_,Opaque,_] = Union1,
-%% [A,B,F,I,L,N,T,M,_,_R] = Union2,
-%% List = [A,B,F,I,L,N,T,M],
-%% case [T || T <- List, t_inf(T, Opaque, opaque) =/= ?none] of
-%% [] -> ?none;
-%% _ -> Opaque
-%% end
-%% end,
-%% O1 = OpaqueFun(U1, U2),
-%% O2 = OpaqueFun(U2, U1),
-%% Union = inf_union(U1, U2, 0, [], opaque),
-%% t_sup([O1, O2, Union]);
- inf_union(U1, U2, 0, [], opaque);
-inf_union(U1, U2, OtherMode) ->
- inf_union(U1, U2, 0, [], OtherMode).
-
-inf_union([?none|Left1], [?none|Left2], N, Acc, Mode) ->
- inf_union(Left1, Left2, N, [?none|Acc], Mode);
-inf_union([T1|Left1], [T2|Left2], N, Acc, Mode) ->
- case t_inf(T1, T2, Mode) of
- ?none -> inf_union(Left1, Left2, N, [?none|Acc], Mode);
- T -> inf_union(Left1, Left2, N+1, [T|Acc], Mode)
+inf_tuples_in_sets2([], _, Acc, _Opaques) -> lists:reverse(Acc);
+inf_tuples_in_sets2(_, [], Acc, _Opaques) -> lists:reverse(Acc).
+
+inf_union(U1, U2, Opaques) ->
+ OpaqueFun =
+ fun(Union1, Union2, InfFun) ->
+ [_,_,_,_,_,_,_,_,Opaque,_,_] = Union1,
+ [A,B,F,I,L,N,T,M,_,_R,Map] = Union2,
+ List = [A,B,F,I,L,N,T,M,Map],
+ inf_union_collect(List, Opaque, InfFun, [], [])
+ end,
+ O1 = OpaqueFun(U1, U2, fun(E, Opaque) -> t_inf(Opaque, E, Opaques) end),
+ O2 = OpaqueFun(U2, U1, fun(E, Opaque) -> t_inf(E, Opaque, Opaques) end),
+ Union = inf_union(U1, U2, 0, [], Opaques),
+ t_sup([O1, O2, Union]).
+
+inf_union_collect([], _Opaque, _InfFun, InfList, ThrowList) ->
+ case t_sup(InfList) of
+ ?none when ThrowList =/= [] -> throw(hd(lists:flatten(ThrowList)));
+ Sup -> Sup
end;
-inf_union([], [], N, Acc, _Mode) ->
+inf_union_collect([?none|L], Opaque, InfFun, InfList, ThrowList) ->
+ inf_union_collect(L, Opaque, InfFun, [?none|InfList], ThrowList);
+inf_union_collect([E|L], Opaque, InfFun, InfList, ThrowList) ->
+ try InfFun(E, Opaque)of
+ Inf ->
+ inf_union_collect(L, Opaque, InfFun, [Inf|InfList], ThrowList)
+ catch throw:N when is_integer(N) ->
+ inf_union_collect(L, Opaque, InfFun, InfList, [N|ThrowList])
+ end.
+
+inf_union([?none|Left1], [?none|Left2], N, Acc, Opaques) ->
+ inf_union(Left1, Left2, N, [?none|Acc], Opaques);
+inf_union([T1|Left1], [T2|Left2], N, Acc, Opaques) ->
+ case t_inf(T1, T2, Opaques) of
+ ?none -> inf_union(Left1, Left2, N, [?none|Acc], Opaques);
+ T -> inf_union(Left1, Left2, N+1, [T|Acc], Opaques)
+ end;
+inf_union([], [], N, Acc, _Opaques) ->
if N =:= 0 -> ?none;
N =:= 1 ->
[Type] = [T || T <- Acc, T =/= ?none],
@@ -2536,6 +3060,11 @@ t_subst_dict(?tuple(Elements, _Arity, _Tag), Dict) ->
t_tuple([t_subst_dict(E, Dict) || E <- Elements]);
t_subst_dict(?tuple_set(_) = TS, Dict) ->
t_sup([t_subst_dict(T, Dict) || T <- t_tuple_subtypes(TS)]);
+%% t_subst_dict(?opaque(Es), Dict) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% List = [Opaque#opaque{struct = t_subst_dict(S, Dict)} ||
+%% Opaque = #opaque{struct = S} <- set_to_list(Es)],
+%% ?opaque(ordsets:from_list(List));
t_subst_dict(T, _Dict) ->
T.
@@ -2578,6 +3107,11 @@ t_subst_aux(?tuple(Elements, _Arity, _Tag), VarMap) ->
t_tuple([t_subst_aux(E, VarMap) || E <- Elements]);
t_subst_aux(?tuple_set(_) = TS, VarMap) ->
t_sup([t_subst_aux(T, VarMap) || T <- t_tuple_subtypes(TS)]);
+%% t_subst_aux(?opaque(Es), VarMap) ->
+%% %% "Polymorphic opaque types not supported yet"
+%% List = [Opaque#opaque{struct = t_subst_aux(S, VarMap)} ||
+%% Opaque = #opaque{struct = S} <- set_to_list(Es)],
+%% ?opaque(ordsets:from_list(List));
t_subst_aux(T, _VarMap) ->
T.
@@ -2590,112 +3124,147 @@ t_subst_aux(T, _VarMap) ->
-spec t_unify(erl_type(), erl_type()) -> t_unify_ret().
t_unify(T1, T2) ->
- t_unify(T1, T2, []).
-
--spec t_unify(erl_type(), erl_type(), [erl_type()]) -> t_unify_ret().
-
-t_unify(T1, T2, Opaques) ->
- {T, VarMap} = t_unify(T1, T2, [], Opaques),
+ {T, VarMap} = t_unify(T1, T2, []),
{t_subst_kv(T, VarMap), lists:keysort(1, VarMap)}.
-t_unify(?var(Id) = T, ?var(Id), VarMap, _Opaques) ->
+t_unify(?var(Id) = T, ?var(Id), VarMap) ->
{T, VarMap};
-t_unify(?var(Id1) = T, ?var(Id2), VarMap, Opaques) ->
+t_unify(?var(Id1) = T, ?var(Id2), VarMap) ->
case lists:keyfind(Id1, 1, VarMap) of
false ->
case lists:keyfind(Id2, 1, VarMap) of
false -> {T, [{Id2, T} | VarMap]};
- {Id2, Type} -> t_unify(T, Type, VarMap, Opaques)
+ {Id2, Type} -> t_unify(T, Type, VarMap)
end;
{Id1, Type1} ->
case lists:keyfind(Id2, 1, VarMap) of
false -> {Type1, [{Id2, T} | VarMap]};
- {Id2, Type2} -> t_unify(Type1, Type2, VarMap, Opaques)
+ {Id2, Type2} -> t_unify(Type1, Type2, VarMap)
end
end;
-t_unify(?var(Id), Type, VarMap, Opaques) ->
+t_unify(?var(Id), Type, VarMap) ->
case lists:keyfind(Id, 1, VarMap) of
false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap, Opaques)
+ {Id, VarType} -> t_unify(VarType, Type, VarMap)
end;
-t_unify(Type, ?var(Id), VarMap, Opaques) ->
+t_unify(Type, ?var(Id), VarMap) ->
case lists:keyfind(Id, 1, VarMap) of
false -> {Type, [{Id, Type} | VarMap]};
- {Id, VarType} -> t_unify(VarType, Type, VarMap, Opaques)
+ {Id, VarType} -> t_unify(VarType, Type, VarMap)
end;
-t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap, Opaques) ->
- {Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap, Opaques),
- {Range, VarMap2} = t_unify(Range1, Range2, VarMap1, Opaques),
+t_unify(?function(Domain1, Range1), ?function(Domain2, Range2), VarMap) ->
+ {Domain, VarMap1} = t_unify(Domain1, Domain2, VarMap),
+ {Range, VarMap2} = t_unify(Range1, Range2, VarMap1),
{?function(Domain, Range), VarMap2};
t_unify(?list(Contents1, Termination1, Size),
- ?list(Contents2, Termination2, Size), VarMap, Opaques) ->
- {Contents, VarMap1} = t_unify(Contents1, Contents2, VarMap, Opaques),
- {Termination, VarMap2} = t_unify(Termination1, Termination2, VarMap1, Opaques),
+ ?list(Contents2, Termination2, Size), VarMap) ->
+ {Contents, VarMap1} = t_unify(Contents1, Contents2, VarMap),
+ {Termination, VarMap2} = t_unify(Termination1, Termination2, VarMap1),
{?list(Contents, Termination, Size), VarMap2};
-t_unify(?product(Types1), ?product(Types2), VarMap, Opaques) ->
- {Types, VarMap1} = unify_lists(Types1, Types2, VarMap, Opaques),
+t_unify(?product(Types1), ?product(Types2), VarMap) ->
+ {Types, VarMap1} = unify_lists(Types1, Types2, VarMap),
{?product(Types), VarMap1};
-t_unify(?tuple(?any, ?any, ?any) = T, ?tuple(?any, ?any, ?any), VarMap, _Opaques) ->
+t_unify(?tuple(?any, ?any, ?any) = T, ?tuple(?any, ?any, ?any), VarMap) ->
{T, VarMap};
t_unify(?tuple(Elements1, Arity, _),
- ?tuple(Elements2, Arity, _), VarMap, Opaques) when Arity =/= ?any ->
- {NewElements, VarMap1} = unify_lists(Elements1, Elements2, VarMap, Opaques),
+ ?tuple(Elements2, Arity, _), VarMap) when Arity =/= ?any ->
+ {NewElements, VarMap1} = unify_lists(Elements1, Elements2, VarMap),
{t_tuple(NewElements), VarMap1};
t_unify(?tuple_set([{Arity, _}]) = T1,
- ?tuple(_, Arity, _) = T2, VarMap, Opaques) when Arity =/= ?any ->
- unify_tuple_set_and_tuple(T1, T2, VarMap, Opaques);
+ ?tuple(_, Arity, _) = T2, VarMap) when Arity =/= ?any ->
+ unify_tuple_set_and_tuple1(T1, T2, VarMap);
t_unify(?tuple(_, Arity, _) = T1,
- ?tuple_set([{Arity, _}]) = T2, VarMap, Opaques) when Arity =/= ?any ->
- unify_tuple_set_and_tuple(T2, T1, VarMap, Opaques);
-t_unify(?tuple_set(List1), ?tuple_set(List2), VarMap, Opaques) ->
- {Tuples, NewVarMap} =
- unify_lists(lists:append([T || {_Arity, T} <- List1]),
- lists:append([T || {_Arity, T} <- List2]), VarMap, Opaques),
- {t_sup(Tuples), NewVarMap};
-t_unify(?opaque(Elements) = T, ?opaque(Elements), VarMap, _Opaques) ->
- {T, VarMap};
-t_unify(?opaque(_) = T1, ?opaque(_) = T2, _VarMap, _Opaques) ->
- throw({mismatch, T1, T2});
-t_unify(Type, ?opaque(_) = OpType, VarMap, Opaques) ->
- t_unify_with_opaque(Type, OpType, VarMap, Opaques);
-t_unify(?opaque(_) = OpType, Type, VarMap, Opaques) ->
- t_unify_with_opaque(Type, OpType, VarMap, Opaques);
-t_unify(T, T, VarMap, _Opaques) ->
+ ?tuple_set([{Arity, _}]) = T2, VarMap) when Arity =/= ?any ->
+ unify_tuple_set_and_tuple2(T1, T2, VarMap);
+t_unify(?tuple_set(List1) = T1, ?tuple_set(List2) = T2, VarMap) ->
+ try
+ unify_lists(lists:append([T || {_Arity, T} <- List1]),
+ lists:append([T || {_Arity, T} <- List2]), VarMap)
+ of
+ {Tuples, NewVarMap} -> {t_sup(Tuples), NewVarMap}
+ catch _:_ -> throw({mismatch, T1, T2})
+ end;
+t_unify(?opaque(_) = T1, ?opaque(_) = T2, VarMap) ->
+ t_unify(t_opaque_structure(T1), t_opaque_structure(T2), VarMap);
+t_unify(T1, ?opaque(_) = T2, VarMap) ->
+ t_unify(T1, t_opaque_structure(T2), VarMap);
+t_unify(?opaque(_) = T1, T2, VarMap) ->
+ t_unify(t_opaque_structure(T1), T2, VarMap);
+t_unify(T, T, VarMap) ->
{T, VarMap};
-t_unify(T1, T2, _, _) ->
+t_unify(?union(_)=T1, ?union(_)=T2, VarMap) ->
+ {Type1, Type2} = unify_union2(T1, T2),
+ t_unify(Type1, Type2, VarMap);
+t_unify(?union(_)=T1, T2, VarMap) ->
+ t_unify(unify_union1(T1, T1, T2), T2, VarMap);
+t_unify(T1, ?union(_)=T2, VarMap) ->
+ t_unify(T1, unify_union1(T2, T1, T2), VarMap);
+t_unify(T1, T2, _) ->
throw({mismatch, T1, T2}).
-t_unify_with_opaque(Type, OpType, VarMap, Opaques) ->
- case lists:member(OpType, Opaques) of
+unify_union2(?union(List1)=T1, ?union(List2)=T2) ->
+ case {unify_union(List1), unify_union(List2)} of
+ {{yes, Type1}, {yes, Type2}} -> {Type1, Type2};
+ {{yes, Type1}, no} -> {Type1, T2};
+ {no, {yes, Type2}} -> {T1, Type2};
+ {no, no} -> throw({mismatch, T1, T2})
+ end.
+
+unify_union1(?union(List), T1, T2) ->
+ case unify_union(List) of
+ {yes, Type} -> Type;
+ no -> throw({mismatch, T1, T2})
+ end.
+
+unify_union(List) ->
+ [A,B,F,I,L,N,T,M,O,R,Map] = List,
+ if O =:= ?none -> no;
true ->
- Struct = t_opaque_structure(OpType),
- try t_unify(Type, Struct, VarMap, Opaques) of
- {_T, VarMap1} -> {OpType, VarMap1}
- catch
- throw:{mismatch, _T1, _T2} ->
- case t_inf(OpType, Type, opaque) of
- ?none -> throw({mismatch, Type, OpType});
- _ -> {OpType, VarMap}
- end
- end;
- false ->
- throw({mismatch, Type, OpType})
+ S = t_opaque_structure(O),
+ {yes, t_sup([A,B,F,I,L,N,T,M,S,R,Map])}
end.
-unify_tuple_set_and_tuple(?tuple_set([{Arity, List}]),
- ?tuple(Elements2, Arity, _), VarMap, Opaques) ->
+-spec is_opaque_type(erl_type(), [erl_type()]) -> boolean().
+
+%% An opaque type is a union of types. Returns true iff any of the type
+%% names (Module and Name) of the first argument (the opaque type to
+%% check) occurs in any of the opaque types of the second argument.
+is_opaque_type(?opaque(Elements), Opaques) ->
+ lists:any(fun(Opaque) -> is_opaque_type2(Opaque, Opaques) end, Elements).
+
+is_opaque_type2(#opaque{mod = Mod1, name = Name1}, Opaques) ->
+ F1 = fun(?opaque(Es)) ->
+ F2 = fun(#opaque{mod = Mod, name = Name}) ->
+ Mod1 =:= Mod andalso Name1 =:= Name
+ end,
+ lists:any(F2, Es)
+ end,
+ lists:any(F1, Opaques).
+
+%% Two functions since t_unify is not symmetric.
+unify_tuple_set_and_tuple1(?tuple_set([{Arity, List}]),
+ ?tuple(Elements2, Arity, _), VarMap) ->
+ %% Can only work if the single tuple has variables at correct places.
+ %% Collapse the tuple set.
+ {NewElements, VarMap1} =
+ unify_lists(sup_tuple_elements(List), Elements2, VarMap),
+ {t_tuple(NewElements), VarMap1}.
+
+unify_tuple_set_and_tuple2(?tuple(Elements2, Arity, _),
+ ?tuple_set([{Arity, List}]), VarMap) ->
%% Can only work if the single tuple has variables at correct places.
%% Collapse the tuple set.
- {NewElements, VarMap1} = unify_lists(sup_tuple_elements(List), Elements2, VarMap, Opaques),
+ {NewElements, VarMap1} =
+ unify_lists(Elements2, sup_tuple_elements(List), VarMap),
{t_tuple(NewElements), VarMap1}.
-unify_lists(L1, L2, VarMap, Opaques) ->
- unify_lists(L1, L2, VarMap, [], Opaques).
+unify_lists(L1, L2, VarMap) ->
+ unify_lists(L1, L2, VarMap, []).
-unify_lists([T1|Left1], [T2|Left2], VarMap, Acc, Opaques) ->
- {NewT, NewVarMap} = t_unify(T1, T2, VarMap, Opaques),
- unify_lists(Left1, Left2, NewVarMap, [NewT|Acc], Opaques);
-unify_lists([], [], VarMap, Acc, _Opaques) ->
+unify_lists([T1|Left1], [T2|Left2], VarMap, Acc) ->
+ {NewT, NewVarMap} = t_unify(T1, T2, VarMap),
+ unify_lists(Left1, Left2, NewVarMap, [NewT|Acc]);
+unify_lists([], [], VarMap, Acc) ->
{lists:reverse(Acc), VarMap}.
%%t_assign_variables_to_subtype(T1, T2) ->
@@ -2837,11 +3406,12 @@ t_subtract(?identifier(Set1), ?identifier(Set2)) ->
?none -> ?none;
Set -> ?identifier(Set)
end;
-t_subtract(?opaque(Set1), ?opaque(Set2)) ->
- case set_subtract(Set1, Set2) of
- ?none -> ?none;
- Set -> ?opaque(Set)
- end;
+t_subtract(?opaque(_)=T1, ?opaque(_)=T2) ->
+ opaque_subtract(T1, t_opaque_structure(T2));
+t_subtract(?opaque(_)=T1, T2) ->
+ opaque_subtract(T1, T2);
+t_subtract(T1, ?opaque(_)=T2) ->
+ t_subtract(T1, t_opaque_structure(T2));
t_subtract(?matchstate(Pres1, Slots1), ?matchstate(Pres2, _Slots2)) ->
Pres = t_subtract(Pres1, Pres2),
case t_is_none(Pres) of
@@ -2976,6 +3546,17 @@ t_subtract(T1, T2) ->
?union(U2) = force_union(T2),
subtract_union(U1, U2).
+-spec opaque_subtract(erl_type(), erl_type()) -> erl_type().
+
+opaque_subtract(?opaque(Set1), T2) ->
+ List = [T1#opaque{struct = Sub} ||
+ #opaque{struct = S1}=T1 <- set_to_list(Set1),
+ not t_is_none(Sub = t_subtract(S1, T2))],
+ case List of
+ [] -> ?none;
+ _ -> ?opaque(ordsets:from_list(List))
+ end.
+
-spec t_subtract_lists([erl_type()], [erl_type()]) -> [erl_type()].
t_subtract_lists(L1, L2) ->
@@ -2991,7 +3572,18 @@ t_subtract_lists([], [], Acc) ->
-spec subtract_union([erl_type(),...], [erl_type(),...]) -> erl_type().
subtract_union(U1, U2) ->
- subtract_union(U1, U2, 0, []).
+ [A1,B1,F1,I1,L1,N1,T1,M1,O1,R1,Map1] = U1,
+ [A2,B2,F2,I2,L2,N2,T2,M2,O2,R2,Map2] = U2,
+ List1 = [A1,B1,F1,I1,L1,N1,T1,M1,?none,R1,Map1],
+ List2 = [A2,B2,F2,I2,L2,N2,T2,M2,?none,R2,Map2],
+ Sub1 = subtract_union(List1, List2, 0, []),
+ O = if O1 =:= ?none -> O1;
+ true -> t_subtract(O1, ?union(U2))
+ end,
+ Sub2 = if O2 =:= ?none -> Sub1;
+ true -> t_subtract(Sub1, t_opaque_structure(O2))
+ end,
+ t_sup(O, Sub2).
-spec subtract_union([erl_type()], [erl_type()], non_neg_integer(), [erl_type()]) -> erl_type().
@@ -3052,10 +3644,24 @@ t_is_equal(_, _) -> false.
t_is_subtype(T1, T2) ->
Inf = t_inf(T1, T2),
- t_is_equal(T1, Inf).
+ subtype_is_equal(T1, Inf).
+
+%% The subtype relation has to behave correctly irrespective of opaque
+%% types.
+subtype_is_equal(T, T) -> true;
+subtype_is_equal(T1, T2) ->
+ t_is_equal(case t_contains_opaque(T1) of
+ true -> t_unopaque(T1);
+ false -> T1
+ end,
+ case t_contains_opaque(T2) of
+ true -> t_unopaque(T2);
+ false -> T2
+ end).
-spec t_is_instance(erl_type(), erl_type()) -> boolean().
+%% XXX. To be removed.
t_is_instance(ConcreteType, Type) ->
t_is_subtype(ConcreteType, t_unopaque(Type)).
@@ -3067,12 +3673,12 @@ t_unopaque(T) ->
-spec t_unopaque(erl_type(), 'universe' | [erl_type()]) -> erl_type().
t_unopaque(?opaque(_) = T, Opaques) ->
- case Opaques =:= universe orelse lists:member(T, Opaques) of
+ case Opaques =:= 'universe' orelse is_opaque_type(T, Opaques) of
true -> t_unopaque(t_opaque_structure(T), Opaques);
false -> T % XXX: needs revision for parametric opaque data types
end;
t_unopaque(?list(ElemT, Termination, Sz), Opaques) ->
- ?list(t_unopaque(ElemT, Opaques), Termination, Sz);
+ ?list(t_unopaque(ElemT, Opaques), t_unopaque(Termination, Opaques), Sz);
t_unopaque(?tuple(?any, _, _) = T, _) -> T;
t_unopaque(?tuple(ArgTs, Sz, Tag), Opaques) when is_list(ArgTs) ->
NewArgTs = [t_unopaque(A, Opaques) || A <- ArgTs],
@@ -3081,14 +3687,19 @@ t_unopaque(?tuple_set(Set), Opaques) ->
NewSet = [{Sz, [t_unopaque(T, Opaques) || T <- Tuples]}
|| {Sz, Tuples} <- Set],
?tuple_set(NewSet);
-t_unopaque(?union([A,B,F,I,L,N,T,M,O,R]), Opaques) ->
+t_unopaque(?product(Types), Opaques) ->
+ ?product([t_unopaque(T, Opaques) || T <- Types]);
+t_unopaque(?function(Domain, Range), Opaques) ->
+ ?function(t_unopaque(Domain, Opaques), t_unopaque(Range, Opaques));
+t_unopaque(?union([A,B,F,I,L,N,T,M,O,R,Map]), Opaques) ->
UL = t_unopaque(L, Opaques),
UT = t_unopaque(T, Opaques),
- UO = case O of
- ?none -> [];
- ?opaque(Os) -> [t_unopaque(S, Opaques) || #opaque{struct = S} <- Os]
- end,
- t_sup([?union([A,B,F,I,UL,N,UT,M,?none,R])|UO]);
+ UF = t_unopaque(F, Opaques),
+ {OF,UO} = case t_unopaque(O, Opaques) of
+ ?opaque(_) = O1 -> {O1, []};
+ Type -> {?none, [Type]}
+ end,
+ t_sup([?union([A,B,UF,I,UL,N,UT,M,OF,R,Map])|UO]);
t_unopaque(T, _) ->
T.
@@ -3134,6 +3745,12 @@ t_limit_k(?product(Elements), K) ->
?product([t_limit_k(X, K - 1) || X <- Elements]);
t_limit_k(?union(Elements), K) ->
?union([t_limit_k(X, K) || X <- Elements]);
+t_limit_k(?opaque(Es), K) ->
+ List = [begin
+ NewS = t_limit_k(S, K),
+ Opaque#opaque{struct = NewS}
+ end || #opaque{struct = S} = Opaque <- set_to_list(Es)],
+ ?opaque(ordsets:from_list(List));
t_limit_k(T, _K) -> T.
%%============================================================================
@@ -3167,7 +3784,7 @@ t_abstract_records(?union(Types), RecDict) ->
t_abstract_records(?tuple(?any, ?any, ?any) = T, _RecDict) ->
T;
t_abstract_records(?tuple(Elements, Arity, ?atom(_) = Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
case lookup_record(TagAtom, Arity - 1, RecDict) of
error -> t_tuple([t_abstract_records(E, RecDict) || E <- Elements]);
{ok, Fields} -> t_tuple([Tag|[T || {_Name, T} <- Fields]])
@@ -3176,6 +3793,8 @@ t_abstract_records(?tuple(Elements, _Arity, _Tag), RecDict) ->
t_tuple([t_abstract_records(E, RecDict) || E <- Elements]);
t_abstract_records(?tuple_set(_) = Tuples, RecDict) ->
t_sup([t_abstract_records(T, RecDict) || T <- t_tuple_subtypes(Tuples)]);
+t_abstract_records(?opaque(_)=Type, RecDict) ->
+ t_abstract_records(t_opaque_structure(Type), RecDict);
t_abstract_records(T, _RecDict) ->
T.
@@ -3198,6 +3817,14 @@ t_map(Fun, ?tuple(Elements, _Arity, _Tag)) ->
Fun(t_tuple([t_map(Fun, E) || E <- Elements]));
t_map(Fun, ?tuple_set(_) = Tuples) ->
Fun(t_sup([t_map(Fun, T) || T <- t_tuple_subtypes(Tuples)]));
+t_map(Fun, ?opaque(Set)) ->
+ L = [Opaque#opaque{struct = NewS} ||
+ #opaque{struct = S} = Opaque <- set_to_list(Set),
+ not t_is_none(NewS = t_map(Fun, S))],
+ Fun(case L of
+ [] -> ?none;
+ _ -> ?opaque(ordsets:from_list(L))
+ end);
t_map(Fun, T) ->
Fun(T).
@@ -3239,11 +3866,11 @@ t_to_string(?bitstr(8, 0), _RecDict) ->
t_to_string(?bitstr(1, 0), _RecDict) ->
"bitstring()";
t_to_string(?bitstr(0, B), _RecDict) ->
- lists:flatten(io_lib:format("<<_:~w>>", [B]));
+ flat_format("<<_:~w>>", [B]);
t_to_string(?bitstr(U, 0), _RecDict) ->
- lists:flatten(io_lib:format("<<_:_*~w>>", [U]));
+ flat_format("<<_:_*~w>>", [U]);
t_to_string(?bitstr(U, B), _RecDict) ->
- lists:flatten(io_lib:format("<<_:~w,_:_*~w>>", [B, U]));
+ flat_format("<<_:~w,_:_*~w>>", [B, U]);
t_to_string(?function(?any, ?any), _RecDict) ->
"fun()";
t_to_string(?function(?any, Range), RecDict) ->
@@ -3255,18 +3882,16 @@ t_to_string(?identifier(Set), _RecDict) ->
case Set of
?any -> "identifier()";
_ ->
- string:join([io_lib:format("~w()", [T]) || T <- set_to_list(Set)], " | ")
+ string:join([flat_format("~w()", [T]) || T <- set_to_list(Set)], " | ")
end;
-t_to_string(?opaque(Set), _RecDict) ->
- string:join([case is_opaque_builtin(Mod, Name) of
- true -> io_lib:format("~w()", [Name]);
- false -> io_lib:format("~w:~w()", [Mod, Name])
- end
- || #opaque{mod = Mod, name = Name} <- set_to_list(Set)],
+t_to_string(?opaque(Set), RecDict) ->
+ string:join([opaque_type(Mod, Name, S, RecDict) ||
+ #opaque{mod = Mod, name = Name, struct = S}
+ <- set_to_list(Set)],
" | ");
t_to_string(?matchstate(Pres, Slots), RecDict) ->
- io_lib:format("ms(~s,~s)", [t_to_string(Pres, RecDict),
- t_to_string(Slots,RecDict)]);
+ flat_format("ms(~s,~s)", [t_to_string(Pres, RecDict),
+ t_to_string(Slots,RecDict)]);
t_to_string(?nil, _RecDict) ->
"[]";
t_to_string(?nonempty_list(Contents, Termination), RecDict) ->
@@ -3282,7 +3907,9 @@ t_to_string(?nonempty_list(Contents, Termination), RecDict) ->
case Contents =:= ?any of
true -> ok;
false ->
- erlang:error({illegal_list, ?nonempty_list(Contents, Termination)})
+ %% XXX. See comment below.
+ %% erlang:error({illegal_list, ?nonempty_list(Contents, Termination)})
+ ok
end,
"nonempty_maybe_improper_list()";
_ ->
@@ -3305,11 +3932,14 @@ t_to_string(?list(Contents, Termination, ?unknown_qual), RecDict) ->
end;
?any ->
%% Just a safety check.
+ %% XXX. Types such as "maybe_improper_list(integer(), any())"
+ %% are OK, but cannot be printed!?
case Contents =:= ?any of
true -> ok;
false ->
- L = ?list(Contents, Termination, ?unknown_qual),
- erlang:error({illegal_list, L})
+ ok
+ %% L = ?list(Contents, Termination, ?unknown_qual),
+ %% erlang:error({illegal_list, L})
end,
"maybe_improper_list()";
_ ->
@@ -3330,7 +3960,7 @@ t_to_string(?integer_pos, _RecDict) -> "pos_integer()";
t_to_string(?integer_non_neg, _RecDict) -> "non_neg_integer()";
t_to_string(?integer_neg, _RecDict) -> "neg_integer()";
t_to_string(?int_range(From, To), _RecDict) ->
- lists:flatten(io_lib:format("~w..~w", [From, To]));
+ flat_format("~w..~w", [From, To]);
t_to_string(?integer(?any), _RecDict) -> "integer()";
t_to_string(?float, _RecDict) -> "float()";
t_to_string(?number(?any, ?unknown_qual), _RecDict) -> "number()";
@@ -3338,19 +3968,21 @@ t_to_string(?product(List), RecDict) ->
"<" ++ comma_sequence(List, RecDict) ++ ">";
t_to_string(?remote(Set), RecDict) ->
string:join([case Args =:= [] of
- true -> io_lib:format("~w:~w()", [Mod, Name]);
+ true -> flat_format("~w:~w()", [Mod, Name]);
false ->
ArgString = comma_sequence(Args, RecDict),
- io_lib:format("~w:~w(~s)", [Mod, Name, ArgString])
+ flat_format("~w:~w(~s)", [Mod, Name, ArgString])
end
|| #remote{mod = Mod, name = Name, args = Args} <-
set_to_list(Set)],
" | ");
+t_to_string(?map(Pairs), RecDict) ->
+ "#{" ++ map_pairs_to_string(Pairs,RecDict) ++ "}";
t_to_string(?tuple(?any, ?any, ?any), _RecDict) -> "tuple()";
t_to_string(?tuple(Elements, _Arity, ?any), RecDict) ->
"{" ++ comma_sequence(Elements, RecDict) ++ "}";
t_to_string(?tuple(Elements, Arity, Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
case lookup_record(TagAtom, Arity-1, RecDict) of
error -> "{" ++ comma_sequence(Elements, RecDict) ++ "}";
{ok, FieldNames} ->
@@ -3361,9 +3993,16 @@ t_to_string(?tuple_set(_) = T, RecDict) ->
t_to_string(?union(Types), RecDict) ->
union_sequence([T || T <- Types, T =/= ?none], RecDict);
t_to_string(?var(Id), _RecDict) when is_atom(Id) ->
- io_lib:format("~s", [atom_to_list(Id)]);
+ flat_format("~s", [atom_to_list(Id)]);
t_to_string(?var(Id), _RecDict) when is_integer(Id) ->
- io_lib:format("var(~w)", [Id]).
+ flat_format("var(~w)", [Id]).
+
+
+map_pairs_to_string([],_) -> [];
+map_pairs_to_string(Pairs,RecDict) ->
+ StrPairs = [{t_to_string(K,RecDict),t_to_string(V,RecDict)}||{K,V}<-Pairs],
+ string:join([K ++ "=>" ++ V||{K,V}<-StrPairs], ", ").
+
record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
FieldStrings = record_fields_to_string(Fields, FieldNames, RecDict, []),
@@ -3371,7 +4010,7 @@ record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
record_fields_to_string([F|Fs], [{FName, _DefType}|FDefs], RecDict, Acc) ->
NewAcc =
- case t_is_any(F) orelse t_is_atom('undefined', F) of
+ case t_is_equal(F, t_any()) orelse t_is_any_atom('undefined', F) of
true -> Acc;
false ->
StrFV = atom_to_string(FName) ++ "::" ++ t_to_string(F, RecDict),
@@ -3389,13 +4028,14 @@ record_fields_to_string([], [], _RecDict, Acc) ->
-spec record_field_diffs_to_string(erl_type(), dict()) -> string().
record_field_diffs_to_string(?tuple([_|Fs], Arity, Tag), RecDict) ->
- [TagAtom] = t_atom_vals(Tag),
+ [TagAtom] = atom_vals(Tag),
{ok, FieldNames} = lookup_record(TagAtom, Arity-1, RecDict),
%% io:format("RecCElems = ~p\nRecTypes = ~p\n", [Fs, FieldNames]),
FieldDiffs = field_diffs(Fs, FieldNames, RecDict, []),
string:join(FieldDiffs, " and ").
field_diffs([F|Fs], [{FName, DefType}|FDefs], RecDict, Acc) ->
+ %% Don't care about opaqueness for now.
NewAcc =
case not t_is_none(t_inf(F, DefType)) of
true -> Acc;
@@ -3418,6 +4058,24 @@ union_sequence(Types, RecDict) ->
List = [t_to_string(T, RecDict) || T <- Types],
string:join(List, " | ").
+-ifdef(DEBUG).
+opaque_type(Mod, Name, S, RecDict) ->
+ opaque_name(Mod, Name, t_to_string(S, RecDict)).
+-else.
+opaque_type(Mod, Name, _S, _RecDict) ->
+ opaque_name(Mod, Name, "").
+-endif.
+
+opaque_name(Mod, Name, Extra) ->
+ S = mod_name(Mod, Name),
+ flat_format("~s(~s)", [S, Extra]).
+
+mod_name(Mod, Name) ->
+ case is_opaque_builtin(Mod, Name) of
+ true -> flat_format("~w", [Name]);
+ false -> flat_format("~w:~w", [Mod, Name])
+ end.
+
%%=============================================================================
%%
%% Build a type from parse forms.
@@ -3437,246 +4095,199 @@ t_from_form(Form, RecDict) ->
-spec t_from_form(parse_form(), dict(), dict()) -> erl_type().
t_from_form(Form, RecDict, VarDict) ->
- {T, _R} = t_from_form(Form, [], false, RecDict, VarDict),
+ {T, _R} = t_from_form(Form, [], RecDict, VarDict),
T.
-type type_names() :: [{'type' | 'opaque' | 'record', atom()}].
--spec t_from_form(parse_form(), type_names(), boolean(), dict(), dict()) ->
+-spec t_from_form(parse_form(), type_names(), dict(), dict()) ->
{erl_type(), type_names()}.
-t_from_form({var, _L, '_'}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({var, _L, '_'}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({var, _L, Name}, _TypeNames, _InOpaque, _RecDict, VarDict) ->
+t_from_form({var, _L, Name}, _TypeNames, _RecDict, VarDict) ->
case dict:find(Name, VarDict) of
error -> {t_var(Name), []};
{ok, Val} -> {Val, []}
end;
-t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict);
-t_from_form({paren_type, _L, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict);
+t_from_form({ann_type, _L, [_Var, Type]}, TypeNames, RecDict, VarDict) ->
+ t_from_form(Type, TypeNames, RecDict, VarDict);
+t_from_form({paren_type, _L, [Type]}, TypeNames, RecDict, VarDict) ->
+ t_from_form(Type, TypeNames, RecDict, VarDict);
t_from_form({remote_type, _L, [{atom, _, Module}, {atom, _, Type}, Args]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_remote(Module, Type, L), R};
-t_from_form({atom, _L, Atom}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({atom, _L, Atom}, _TypeNames, _RecDict, _VarDict) ->
{t_atom(Atom), []};
-t_from_form({integer, _L, Int}, _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+t_from_form({integer, _L, Int}, _TypeNames, _RecDict, _VarDict) ->
{t_integer(Int), []};
-t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({op, _L, _Op, _Arg} = Op, _TypeNames, _RecDict, _VarDict) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
{t_integer(Val), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames, _InOpaque,
+t_from_form({op, _L, _Op, _Arg1, _Arg2} = Op, _TypeNames,
_RecDict, _VarDict) ->
case erl_eval:partial_eval(Op) of
{integer, _, Val} ->
{t_integer(Val), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Op])})
end;
-t_from_form({type, _L, any, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, any, []}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({type, _L, arity, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, arity, []}, _TypeNames, _RecDict, _VarDict) ->
{t_arity(), []};
-t_from_form({type, _L, array, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, array, []}, _TypeNames, _RecDict, _VarDict) ->
{t_array(), []};
-t_from_form({type, _L, atom, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, atom, []}, _TypeNames, _RecDict, _VarDict) ->
{t_atom(), []};
-t_from_form({type, _L, binary, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, binary, []}, _TypeNames, _RecDict, _VarDict) ->
{t_binary(), []};
t_from_form({type, _L, binary, [Base, Unit]} = Type,
- _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+ _TypeNames, _RecDict, _VarDict) ->
case {erl_eval:partial_eval(Base), erl_eval:partial_eval(Unit)} of
{{integer, _, B}, {integer, _, U}} when B >= 0, U >= 0 ->
{t_bitstr(U, B), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, bitstring, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, bitstring, []}, _TypeNames, _RecDict, _VarDict) ->
{t_bitstr(), []};
-t_from_form({type, _L, bool, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, bool, []}, _TypeNames, _RecDict, _VarDict) ->
{t_boolean(), []}; % XXX: Temporarily
-t_from_form({type, _L, boolean, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, boolean, []}, _TypeNames, _RecDict, _VarDict) ->
{t_boolean(), []};
-t_from_form({type, _L, byte, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, byte, []}, _TypeNames, _RecDict, _VarDict) ->
{t_byte(), []};
-t_from_form({type, _L, char, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, char, []}, _TypeNames, _RecDict, _VarDict) ->
{t_char(), []};
-t_from_form({type, _L, dict, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, dict, []}, _TypeNames, _RecDict, _VarDict) ->
{t_dict(), []};
-t_from_form({type, _L, digraph, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, digraph, []}, _TypeNames, _RecDict, _VarDict) ->
{t_digraph(), []};
-t_from_form({type, _L, float, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, float, []}, _TypeNames, _RecDict, _VarDict) ->
{t_float(), []};
-t_from_form({type, _L, function, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, function, []}, _TypeNames, _RecDict, _VarDict) ->
{t_fun(), []};
-t_from_form({type, _L, 'fun', []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, 'fun', []}, _TypeNames, _RecDict, _VarDict) ->
{t_fun(), []};
t_from_form({type, _L, 'fun', [{type, _, any}, Range]}, TypeNames,
- InOpaque, RecDict, VarDict) ->
- {T, R} = t_from_form(Range, TypeNames, InOpaque, RecDict, VarDict),
+ RecDict, VarDict) ->
+ {T, R} = t_from_form(Range, TypeNames, RecDict, VarDict),
{t_fun(T), R};
t_from_form({type, _L, 'fun', [{type, _, product, Domain}, Range]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R1} = list_from_form(Domain, TypeNames, InOpaque, RecDict, VarDict),
- {T, R2} = t_from_form(Range, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {L, R1} = list_from_form(Domain, TypeNames, RecDict, VarDict),
+ {T, R2} = t_from_form(Range, TypeNames, RecDict, VarDict),
{t_fun(L, T), R1 ++ R2};
-t_from_form({type, _L, gb_set, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, gb_set, []}, _TypeNames, _RecDict, _VarDict) ->
{t_gb_set(), []};
-t_from_form({type, _L, gb_tree, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, gb_tree, []}, _TypeNames, _RecDict, _VarDict) ->
{t_gb_tree(), []};
-t_from_form({type, _L, identifier, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, identifier, []}, _TypeNames, _RecDict, _VarDict) ->
{t_identifier(), []};
-t_from_form({type, _L, integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_integer(), []};
-t_from_form({type, _L, iodata, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, iodata, []}, _TypeNames, _RecDict, _VarDict) ->
{t_iodata(), []};
-t_from_form({type, _L, iolist, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, iolist, []}, _TypeNames, _RecDict, _VarDict) ->
{t_iolist(), []};
-t_from_form({type, _L, list, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, list, []}, _TypeNames, _RecDict, _VarDict) ->
{t_list(), []};
-t_from_form({type, _L, list, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {T, R} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, list, [Type]}, TypeNames, RecDict, VarDict) ->
+ {T, R} = t_from_form(Type, TypeNames, RecDict, VarDict),
{t_list(T), R};
-t_from_form({type, _L, mfa, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, map, _}, _TypeNames, _RecDict, _VarDict) ->
+ {t_map([]), []};
+t_from_form({type, _L, mfa, []}, _TypeNames, _RecDict, _VarDict) ->
{t_mfa(), []};
-t_from_form({type, _L, module, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, module, []}, _TypeNames, _RecDict, _VarDict) ->
{t_module(), []};
-t_from_form({type, _L, nil, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, nil, []}, _TypeNames, _RecDict, _VarDict) ->
{t_nil(), []};
-t_from_form({type, _L, neg_integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, neg_integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_neg_integer(), []};
-t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _InOpaque, _RecDict,
+t_from_form({type, _L, non_neg_integer, []}, _TypeNames, _RecDict,
_VarDict) ->
{t_non_neg_integer(), []};
-t_from_form({type, _L, no_return, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, no_return, []}, _TypeNames, _RecDict, _VarDict) ->
{t_unit(), []};
-t_from_form({type, _L, node, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, node, []}, _TypeNames, _RecDict, _VarDict) ->
{t_node(), []};
-t_from_form({type, _L, none, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, none, []}, _TypeNames, _RecDict, _VarDict) ->
{t_none(), []};
-t_from_form({type, _L, nonempty_list, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, nonempty_list, []}, _TypeNames, _RecDict, _VarDict) ->
{t_nonempty_list(), []};
-t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {T, R} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, nonempty_list, [Type]}, TypeNames, RecDict, VarDict) ->
+ {T, R} = t_from_form(Type, TypeNames, RecDict, VarDict),
{t_nonempty_list(T), R};
t_from_form({type, _L, nonempty_improper_list, [Cont, Term]}, TypeNames,
- InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Cont, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Term, TypeNames, InOpaque, RecDict, VarDict),
+ RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Cont, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Term, TypeNames, RecDict, VarDict),
{t_cons(T1, T2), R1 ++ R2};
t_from_form({type, _L, nonempty_maybe_improper_list, []}, _TypeNames,
- _InOpaque, _RecDict, _VarDict) ->
+ _RecDict, _VarDict) ->
{t_cons(?any, ?any), []};
t_from_form({type, _L, nonempty_maybe_improper_list, [Cont, Term]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Cont, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Term, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Cont, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Term, TypeNames, RecDict, VarDict),
{t_cons(T1, T2), R1 ++ R2};
-t_from_form({type, _L, nonempty_string, []}, _TypeNames, _InOpaque, _RecDict,
+t_from_form({type, _L, nonempty_string, []}, _TypeNames, _RecDict,
_VarDict) ->
{t_nonempty_string(), []};
-t_from_form({type, _L, number, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, number, []}, _TypeNames, _RecDict, _VarDict) ->
{t_number(), []};
-t_from_form({type, _L, pid, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, pid, []}, _TypeNames, _RecDict, _VarDict) ->
{t_pid(), []};
-t_from_form({type, _L, port, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, port, []}, _TypeNames, _RecDict, _VarDict) ->
{t_port(), []};
-t_from_form({type, _L, pos_integer, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, pos_integer, []}, _TypeNames, _RecDict, _VarDict) ->
{t_pos_integer(), []};
-t_from_form({type, _L, maybe_improper_list, []}, _TypeNames, _InOpaque,
+t_from_form({type, _L, maybe_improper_list, []}, _TypeNames,
_RecDict, _VarDict) ->
{t_maybe_improper_list(), []};
t_from_form({type, _L, maybe_improper_list, [Content, Termination]},
- TypeNames, InOpaque, RecDict, VarDict) ->
- {T1, R1} = t_from_form(Content, TypeNames, InOpaque, RecDict, VarDict),
- {T2, R2} = t_from_form(Termination, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict) ->
+ {T1, R1} = t_from_form(Content, TypeNames, RecDict, VarDict),
+ {T2, R2} = t_from_form(Termination, TypeNames, RecDict, VarDict),
{t_maybe_improper_list(T1, T2), R1 ++ R2};
-t_from_form({type, _L, product, Elements}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- {L, R} = list_from_form(Elements, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, product, Elements}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Elements, TypeNames, RecDict, VarDict),
{t_product(L), R};
-t_from_form({type, _L, queue, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, queue, []}, _TypeNames, _RecDict, _VarDict) ->
{t_queue(), []};
t_from_form({type, _L, range, [From, To]} = Type,
- _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+ _TypeNames, _RecDict, _VarDict) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
{t_from_range(FromVal, ToVal), []};
_ -> throw({error, io_lib:format("Unable to evaluate type ~w\n", [Type])})
end;
-t_from_form({type, _L, record, [Name|Fields]}, TypeNames, InOpaque, RecDict,
- VarDict) ->
- record_from_form(Name, Fields, TypeNames, InOpaque, RecDict, VarDict);
-t_from_form({type, _L, reference, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, record, [Name|Fields]}, TypeNames, RecDict, VarDict) ->
+ record_from_form(Name, Fields, TypeNames, RecDict, VarDict);
+t_from_form({type, _L, reference, []}, _TypeNames, _RecDict, _VarDict) ->
{t_reference(), []};
-t_from_form({type, _L, set, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, set, []}, _TypeNames, _RecDict, _VarDict) ->
{t_set(), []};
-t_from_form({type, _L, string, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, string, []}, _TypeNames, _RecDict, _VarDict) ->
{t_string(), []};
-t_from_form({type, _L, term, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, term, []}, _TypeNames, _RecDict, _VarDict) ->
{t_any(), []};
-t_from_form({type, _L, tid, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, tid, []}, _TypeNames, _RecDict, _VarDict) ->
{t_tid(), []};
-t_from_form({type, _L, timeout, []}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, timeout, []}, _TypeNames, _RecDict, _VarDict) ->
{t_timeout(), []};
-t_from_form({type, _L, tuple, any}, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+t_from_form({type, _L, tuple, any}, _TypeNames, _RecDict, _VarDict) ->
{t_tuple(), []};
-t_from_form({type, _L, tuple, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, tuple, Args}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_tuple(L), R};
-t_from_form({type, _L, union, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
- {L, R} = list_from_form(Args, TypeNames, InOpaque, RecDict, VarDict),
+t_from_form({type, _L, union, Args}, TypeNames, RecDict, VarDict) ->
+ {L, R} = list_from_form(Args, TypeNames, RecDict, VarDict),
{t_sup(L), R};
-t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
+t_from_form({type, _L, Name, Args}, TypeNames, RecDict, VarDict) ->
ArgsLen = length(Args),
case lookup_type(Name, ArgsLen, RecDict) of
{type, {_Module, Type, ArgNames}} ->
@@ -3685,13 +4296,12 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
List = lists:zipwith(
fun(ArgName, ArgType) ->
{Ttemp, _R} = t_from_form(ArgType, TypeNames,
- InOpaque, RecDict,
- VarDict),
+ RecDict, VarDict),
{ArgName, Ttemp}
end,
ArgNames, Args),
TmpVarDict = dict:from_list(List),
- {T, R} = t_from_form(Type, [{type, Name}|TypeNames], InOpaque,
+ {T, R} = t_from_form(Type, [{type, Name}|TypeNames],
RecDict, TmpVarDict),
case lists:member({type, Name}, R) of
true -> {t_limit(T, ?REC_TYPE_LIMIT), R};
@@ -3706,13 +4316,12 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
List = lists:zipwith(
fun(ArgName, ArgType) ->
{Ttemp, _R} = t_from_form(ArgType, TypeNames,
- InOpaque, RecDict,
- VarDict),
+ RecDict, VarDict),
{ArgName, Ttemp}
end,
ArgNames, Args),
TmpVarDict = dict:from_list(List),
- {T, R} = t_from_form(Type, [{opaque, Name}|TypeNames], true,
+ {T, R} = t_from_form(Type, [{opaque, Name}|TypeNames],
RecDict, TmpVarDict),
case lists:member({opaque, Name}, R) of
true -> {t_limit(T, ?REC_TYPE_LIMIT), R};
@@ -3720,27 +4329,21 @@ t_from_form({type, _L, Name, Args}, TypeNames, InOpaque, RecDict, VarDict) ->
end;
false -> {t_any(), [{opaque, Name}]}
end,
- Tret =
- case InOpaque of
- true -> Rep;
- false ->
- t_from_form({opaque, -1, Name, {Module, Args, Rep}},
- RecDict, VarDict)
- end,
+ Tret = t_from_form({opaque, -1, Name, {Module, Args, Rep}},
+ RecDict, VarDict),
{Tret, Rret};
error ->
Msg = io_lib:format("Unable to find type ~w/~w\n", [Name, ArgsLen]),
throw({error, Msg})
end;
-t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames, _InOpaque,
+t_from_form({opaque, _L, Name, {Mod, Args, Rep}}, _TypeNames,
_RecDict, _VarDict) ->
case Args of
[] -> {t_opaque(Mod, Name, Args, Rep), []};
_ -> throw({error, "Polymorphic opaque types not supported yet"})
end.
-record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
- VarDict) ->
+record_from_form({atom, _, Name}, ModFields, TypeNames, RecDict, VarDict) ->
case can_unfold_more({record, Name}, TypeNames) of
true ->
case lookup_record(Name, RecDict) of
@@ -3751,11 +4354,11 @@ record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
{DeclFields1, R1} =
case lists:all(fun(Elem) -> Elem end, AreTyped) of
true -> {DeclFields, []};
- false -> fields_from_form(DeclFields, TypeNames1, InOpaque,
+ false -> fields_from_form(DeclFields, TypeNames1,
RecDict, dict:new())
end,
{GetModRec, R2} = get_mod_record(ModFields, DeclFields1,
- TypeNames1, InOpaque,
+ TypeNames1,
RecDict, VarDict),
case GetModRec of
{error, FieldName} ->
@@ -3772,13 +4375,11 @@ record_from_form({atom, _, Name}, ModFields, TypeNames, InOpaque, RecDict,
false -> {t_any(), []}
end.
-get_mod_record([], DeclFields, _TypeNames, _InOpaque, _RecDict,
- _VarDict) ->
+get_mod_record([], DeclFields, _TypeNames, _RecDict, _VarDict) ->
{{ok, DeclFields}, []};
-get_mod_record(ModFields, DeclFields, TypeNames, InOpaque, RecDict,
- VarDict) ->
+get_mod_record(ModFields, DeclFields, TypeNames, RecDict, VarDict) ->
DeclFieldsDict = orddict:from_list(DeclFields),
- {ModFieldsDict, R} = build_field_dict(ModFields, TypeNames, InOpaque,
+ {ModFieldsDict, R} = build_field_dict(ModFields, TypeNames,
RecDict, VarDict),
case get_mod_record(DeclFieldsDict, ModFieldsDict, []) of
{error, _FieldName} = Error -> {Error, R};
@@ -3788,17 +4389,16 @@ get_mod_record(ModFields, DeclFields, TypeNames, InOpaque, RecDict,
R}
end.
-build_field_dict(FieldTypes, TypeNames, InOpaque, RecDict, VarDict) ->
- build_field_dict(FieldTypes, TypeNames, InOpaque, RecDict, VarDict, []).
+build_field_dict(FieldTypes, TypeNames, RecDict, VarDict) ->
+ build_field_dict(FieldTypes, TypeNames, RecDict, VarDict, []).
build_field_dict([{type, _, field_type, [{atom, _, Name}, Type]}|Left],
- TypeNames, InOpaque, RecDict, VarDict, Acc) ->
- {T, R1} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
+ TypeNames, RecDict, VarDict, Acc) ->
+ {T, R1} = t_from_form(Type, TypeNames, RecDict, VarDict),
NewAcc = [{Name, T}|Acc],
- {D, R2} = build_field_dict(Left, TypeNames, InOpaque, RecDict, VarDict,
- NewAcc),
+ {D, R2} = build_field_dict(Left, TypeNames, RecDict, VarDict, NewAcc),
{D, R1 ++ R2};
-build_field_dict([], _TypeNames, _InOpaque, _RecDict, _VarDict, Acc) ->
+build_field_dict([], _TypeNames, _RecDict, _VarDict, Acc) ->
{orddict:from_list(Acc), []}.
get_mod_record([{FieldName, DeclType}|Left1],
@@ -3817,19 +4417,19 @@ get_mod_record(DeclFields, [], Acc) ->
get_mod_record(_, [{FieldName2, _ModType}|_], _Acc) ->
{error, FieldName2}.
-fields_from_form([], _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+fields_from_form([], _TypeNames, _RecDict, _VarDict) ->
{[], []};
-fields_from_form([{Name, Type}|Tail], TypeNames, InOpaque, RecDict,
+fields_from_form([{Name, Type}|Tail], TypeNames, RecDict,
VarDict) ->
- {T, R1} = t_from_form(Type, TypeNames, InOpaque, RecDict, VarDict),
- {F, R2} = fields_from_form(Tail, TypeNames, InOpaque, RecDict, VarDict),
+ {T, R1} = t_from_form(Type, TypeNames, RecDict, VarDict),
+ {F, R2} = fields_from_form(Tail, TypeNames, RecDict, VarDict),
{[{Name, T}|F], R1 ++ R2}.
-list_from_form([], _TypeNames, _InOpaque, _RecDict, _VarDict) ->
+list_from_form([], _TypeNames, _RecDict, _VarDict) ->
{[], []};
-list_from_form([H|Tail], TypeNames, InOpaque, RecDict, VarDict) ->
- {T, R1} = t_from_form(H, TypeNames, InOpaque, RecDict, VarDict),
- {L, R2} = list_from_form(Tail, TypeNames, InOpaque, RecDict, VarDict),
+list_from_form([H|Tail], TypeNames, RecDict, VarDict) ->
+ {T, R1} = t_from_form(H, TypeNames, RecDict, VarDict),
+ {L, R2} = list_from_form(Tail, TypeNames, RecDict, VarDict),
{[T|L], R1 ++ R2}.
-spec t_form_to_string(parse_form()) -> string().
@@ -3852,10 +4452,10 @@ t_form_to_string({op, _L, _Op, _Arg1, _Arg2} = Op) ->
t_form_to_string({ann_type, _L, [Var, Type]}) ->
t_form_to_string(Var) ++ "::" ++ t_form_to_string(Type);
t_form_to_string({paren_type, _L, [Type]}) ->
- io_lib:format("(~s)", [t_form_to_string(Type)]);
+ flat_format("(~s)", [t_form_to_string(Type)]);
t_form_to_string({remote_type, _L, [{atom, _, Mod}, {atom, _, Name}, Args]}) ->
ArgString = "(" ++ string:join(t_form_to_string_list(Args), ",") ++ ")",
- io_lib:format("~w:~w", [Mod, Name]) ++ ArgString;
+ flat_format("~w:~w", [Mod, Name]) ++ ArgString;
t_form_to_string({type, _L, arity, []}) -> "arity()";
t_form_to_string({type, _L, binary, []}) -> "binary()";
t_form_to_string({type, _L, binary, [Base, Unit]} = Type) ->
@@ -3866,9 +4466,9 @@ t_form_to_string({type, _L, binary, [Base, Unit]} = Type) ->
{0, 0} -> "<<>>";
{8, 0} -> "binary()";
{1, 0} -> "bitstring()";
- {0, B} -> lists:flatten(io_lib:format("<<_:~w>>", [B]));
- {U, 0} -> lists:flatten(io_lib:format("<<_:_*~w>>", [U]));
- {U, B} -> lists:flatten(io_lib:format("<<_:~w,_:_*~w>>", [B, U]))
+ {0, B} -> flat_format("<<_:~w>>", [B]);
+ {U, 0} -> flat_format("<<_:_*~w>>", [U]);
+ {U, B} -> flat_format("<<_:~w,_:_*~w>>", [B, U])
end;
_ -> io_lib:format("Badly formed bitstr type ~w", [Type])
end;
@@ -3883,6 +4483,8 @@ t_form_to_string({type, _L, iodata, []}) -> "iodata()";
t_form_to_string({type, _L, iolist, []}) -> "iolist()";
t_form_to_string({type, _L, list, [Type]}) ->
"[" ++ t_form_to_string(Type) ++ "]";
+t_form_to_string({type, _L, map, _}) ->
+ "#{}";
t_form_to_string({type, _L, mfa, []}) -> "mfa()";
t_form_to_string({type, _L, module, []}) -> "module()";
t_form_to_string({type, _L, node, []}) -> "node()";
@@ -3894,16 +4496,16 @@ t_form_to_string({type, _L, product, Elements}) ->
t_form_to_string({type, _L, range, [From, To]} = Type) ->
case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
{{integer, _, FromVal}, {integer, _, ToVal}} ->
- io_lib:format("~w..~w", [FromVal, ToVal]);
- _ -> io_lib:format("Badly formed type ~w",[Type])
+ flat_format("~w..~w", [FromVal, ToVal]);
+ _ -> flat_format("Badly formed type ~w",[Type])
end;
t_form_to_string({type, _L, record, [{atom, _, Name}]}) ->
- io_lib:format("#~w{}", [Name]);
+ flat_format("#~w{}", [Name]);
t_form_to_string({type, _L, record, [{atom, _, Name}|Fields]}) ->
FieldString = string:join(t_form_to_string_list(Fields), ","),
- io_lib:format("#~w{~s}", [Name, FieldString]);
+ flat_format("#~w{~s}", [Name, FieldString]);
t_form_to_string({type, _L, field_type, [{atom, _, Name}, Type]}) ->
- io_lib:format("~w::~s", [Name, t_form_to_string(Type)]);
+ flat_format("~w::~s", [Name, t_form_to_string(Type)]);
t_form_to_string({type, _L, term, []}) -> "term()";
t_form_to_string({type, _L, timeout, []}) -> "timeout()";
t_form_to_string({type, _L, tuple, any}) -> "tuple()";
@@ -3916,8 +4518,8 @@ t_form_to_string({type, _L, Name, []} = T) ->
catch throw:{error, _} -> atom_to_string(Name) ++ "()"
end;
t_form_to_string({type, _L, Name, List}) ->
- io_lib:format("~w(~s)",
- [Name, string:join(t_form_to_string_list(List), ",")]).
+ flat_format("~w(~s)",
+ [Name, string:join(t_form_to_string_list(List), ",")]).
t_form_to_string_list(List) ->
t_form_to_string_list(List, []).
@@ -3930,7 +4532,7 @@ t_form_to_string_list([], Acc) ->
-spec atom_to_string(atom()) -> string().
atom_to_string(Atom) ->
- lists:flatten(io_lib:format("~w", [Atom])).
+ flat_format("~w", [Atom]).
%%=============================================================================
%%
@@ -4002,6 +4604,29 @@ can_unfold_more(TypeName, TypeNames) ->
Fun = fun(E, Acc) -> case E of TypeName -> Acc + 1; _ -> Acc end end,
lists:foldl(Fun, 0, TypeNames) < ?REC_TYPE_LIMIT.
+-spec do_opaque(erl_type(), opaques(), fun((_) -> T)) -> T.
+
+%% Probably a little faster than calling t_unopaque/2.
+%% Unions that are due to opaque types are unopaqued.
+do_opaque(?opaque(_) = Type, Opaques, Pred) ->
+ case Opaques =:= 'universe' orelse is_opaque_type(Type, Opaques) of
+ true -> do_opaque(t_opaque_structure(Type), Opaques, Pred);
+ false -> Pred(Type)
+ end;
+do_opaque(?union(List) = Type, Opaques, Pred) ->
+ [A,B,F,I,L,N,T,M,O,R,Map] = List,
+ if O =:= ?none -> Pred(Type);
+ true ->
+ case Opaques =:= 'universe' orelse is_opaque_type(O, Opaques) of
+ true ->
+ S = t_opaque_structure(O),
+ do_opaque(t_sup([A,B,F,I,L,N,T,M,S,R,Map]), Opaques, Pred);
+ false -> Pred(Type)
+ end
+ end;
+do_opaque(Type, _Opaques, Pred) ->
+ Pred(Type).
+
%% -----------------------------------
%% Set
%%
@@ -4068,7 +4693,7 @@ set_size(Set) ->
set_to_string(Set) ->
L = [case is_atom(X) of
true -> io_lib:write_string(atom_to_list(X), $'); % stupid emacs '
- false -> io_lib:format("~w", [X])
+ false -> flat_format("~w", [X])
end || X <- set_to_list(Set)],
string:join(L, " | ").
@@ -4077,6 +4702,9 @@ set_min([H|_]) -> H.
set_max(Set) ->
hd(lists:reverse(Set)).
+flat_format(F, S) ->
+ lists:flatten(io_lib:format(F, S)).
+
%%=============================================================================
%%
%% Utilities for the binary type
@@ -4131,6 +4759,11 @@ handle_base(Unit, Pos) when Pos >= 0 ->
handle_base(Unit, Neg) ->
(Unit+(Neg rem Unit)) rem Unit.
+family(L) ->
+ R = sofs:relation(L),
+ F = sofs:relation_to_family(R),
+ sofs:to_external(F).
+
%%=============================================================================
%% Consistency-testing function(s) below
%%=============================================================================
diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml
index 0a4dd3ba47..7b8d2940c1 100644
--- a/lib/kernel/doc/src/file.xml
+++ b/lib/kernel/doc/src/file.xml
@@ -37,54 +37,48 @@
the file operations. See the command line flag
<c>+A</c> in <seealso marker="erts:erl">erl(1)</seealso>.</p>
- <p>The Erlang VM supports file names in Unicode to a limited
- extent. Depending on how the VM is started (with the parameter
- <c>+fnu</c> or <c>+fnl</c>), file names given can contain
- characters > 255 and the VM system will convert file names
- back and forth to the native file name encoding.</p>
+ <p>With regard to file name encoding, the Erlang VM can operate in
+ two modes. The current mode can be queried using the <seealso
+ marker="#native_name_encoding">native_name_encoding/0</seealso>
+ function. It returns either <c>latin1</c> or <c>utf8</c>.</p>
- <p>The default behavior for Unicode character translation depends
- on to what extent the underlying OS/filesystem enforces consistent
- naming. On OSes where all file names are ensured to be in one or
- another encoding, Unicode is the default (currently this holds for
- Windows and MacOSX). On OSes with completely transparent file
- naming (i.e. all Unixes except MacOSX), ISO-latin-1 file naming is
- the default. The reason for the ISO-latin-1 default is that
- file names are not guaranteed to be possible to interpret according to
- the Unicode encoding expected (i.e. UTF-8), and file names that
- cannot be decoded will only be accessible by using &quot;raw
- file names&quot;, in other word file names given as binaries.</p>
-
- <p>As file names are traditionally not binaries in Erlang,
- applications that need to handle raw file names need to be
- converted, why the Unicode mode for file names is not default on
- systems having completely transparent file naming.</p>
+ <p>In the <c>latin1</c> mode, the Erlang VM does not change the
+ encoding of file names. In the <c>utf8</c> mode, file names can
+ contain Unicode characters greater than 255 and the VM will
+ convert file names back and forth to the native file name encoding
+ (usually UTF-8, but UTF-16 on Windows).</p>
- <p>Raw file names is a new feature in OTP R14B01, which allows the
- user to supply completely uninterpreted file names to the
- underlying OS/filesystem. They are supplied as binaries, where it
- is up to the user to supply a correct encoding for the
- environment. The function <c>file:native_name_encoding()</c> can
- be used to check what encoding the VM is working in. If the
- function returns <c>latin1</c> file names are not in any way
- converted to Unicode, if it is <c>utf8</c>, raw file names should
- be encoded as UTF-8 if they are to follow the convention of the VM
- (and usually the convention of the OS as well). Using raw
- file names is useful if you have a filesystem with inconsistent
- file naming, where some files are named in UTF-8 encoding while
- others are not. A file:list_dir on such mixed file name systems
- when the VM is in Unicode file name mode might return file names as
- raw binaries as they cannot be interpreted as Unicode
- file names. Raw file names can also be used to give UTF-8 encoded
- file names even though the VM is not started in Unicode file name
- translation mode.</p>
+ <p>The default mode depends on the operating system. Windows and
+ MacOS X enforce consistent file name encoding and therefore the
+ VM uses the <c>utf8</c> mode.</p>
+
+ <p>On operating systems with transparent naming (i.e. all Unix
+ systems except MacOS X), the default will be <c>utf8</c> if the
+ terminal supports UTF-8, otherwise <c>latin1</c>. The default may
+ be overridden using the <c>+fnl</c> (to force <c>latin1</c> mode)
+ or <c>+fnu</c> (to force <c>utf8</c> mode) when starting <seealso
+ marker="erts:erl">erl</seealso>.</p>
+
+ <p>On operating systems with transparent naming, files could be
+ inconsistently named, i.e. some files are encoded in UTF-8 while
+ others are encoded in (for example) iso-latin1. To be able to
+ handle file systems with inconsistent naming when running in the
+ <c>utf8</c> mode, the concept of "raw file names" has been
+ introduced.</p>
+
+ <p>A raw file name is a file name given as a binary. The Erlang VM
+ will perform no translation of a file name given as a binary on
+ systems with transparent naming.</p>
+
+ <p>When running in the <c>utf8</c> mode, the
+ <c>file:list_dir/1</c> and <c>file:read_link/1</c> functions will
+ never return raw file names. Use the <seealso
+ marker="#list_dir_all">list_dir_all/1</seealso> and <seealso
+ marker="#read_link_all">read_link_all/1</seealso> functions to
+ return all file names including raw file names.</p>
+
+ <p>Also see <seealso marker="stdlib:unicode_usage#notes-about-raw-filenames">Notes about raw file names</seealso>.</p>
- <p>Note that on Windows, <c>file:native_name_encoding()</c>
- returns <c>utf8</c> per default, which is the format for raw
- file names even on Windows, although the underlying OS specific
- code works in a limited version of little endian UTF16. As far as
- the Erlang programmer is concerned, Windows native Unicode format
- is UTF-8...</p>
</description>
<datatypes>
@@ -535,8 +529,8 @@
<name name="list_dir_all" arity="1"/>
<fsummary>List all files in a directory</fsummary>
<desc>
- <p>Lists all the files in a directory, including files with
- "raw" names.
+ <p><marker id="list_dir_all"/>Lists all the files in a directory,
+ including files with "raw" names.
Returns <c>{ok, <anno>Filenames</anno>}</c> if successful.
Otherwise, it returns <c>{error, <anno>Reason</anno>}</c>.
<c><anno>Filenames</anno></c> is a list of
@@ -653,11 +647,14 @@
</func>
<func>
<name name="native_name_encoding" arity="0"/>
- <fsummary>Return the VM's configured filename encoding.</fsummary>
+ <fsummary>Return the VM's configured filename encoding</fsummary>
<desc>
- <p>This function returns the configured default file name encoding to use for raw file names. Generally an application supplying file names raw (as binaries), should obey the character encoding returned by this function.</p>
- <p>By default, the VM uses ISO-latin-1 file name encoding on filesystems and/or OSes that use completely transparent file naming. This includes all Unix versions except MacOSX, where the vfs layer enforces UTF-8 file naming. By giving the experimental option <c>+fnu</c> when starting Erlang, UTF-8 translation of file names can be turned on even for those systems. If Unicode file name translation is in effect, the system behaves as usual as long as file names conform to the encoding, but will return file names that are not properly encoded in UTF-8 as raw file names (i.e. binaries).</p>
- <p>On Windows, this function also returns <c>utf8</c> by default. The OS uses a pure Unicode naming scheme and file names are always possible to interpret as valid Unicode. The fact that the underlying Windows OS actually encodes file names using little endian UTF-16 can be ignored by the Erlang programmer. Windows and MacOSX are the only operating systems where the VM operates in Unicode file name mode by default.</p>
+ <p><marker id="native_name_encoding"/>This function returns
+ the file name encoding mode. If it is <c>latin1</c>, the
+ system does no translation of file names. If it is
+ <c>utf8</c>, file names will be converted back and forth to
+ the native file name encoding (usually UTF-8, but UTF-16 on
+ Windows).</p>
</desc>
</func>
<func>
@@ -1450,7 +1447,8 @@
<name name="read_link" arity="1"/>
<fsummary>See what a link is pointing to</fsummary>
<desc>
- <p>This function returns <c>{ok, <anno>Filename</anno>}</c> if
+ <p><marker id="read_link_all"/>This function returns
+ <c>{ok, <anno>Filename</anno>}</c> if
<c><anno>Name</anno></c> refers to a symbolic link that is
not a "raw" file name, or <c>{error, <anno>Reason</anno>}</c>
otherwise.
@@ -1746,16 +1744,16 @@
<item>The chunk size used by the erlang fallback to send
data. If using the fallback, this should be set to a value
which comfortably fits in the systems memory. Default is 20 MB.</item>
+ <tag><c>use_threads</c></tag>
+ <item>Instruct the emulator to use the async thread pool for the
+ sendfile system call. This could be usefull if the OS you are running
+ on does not properly support non-blocking sendfile calls. Do note that
+ using async threads potentially makes your system volnerable to slow
+ client attacks. If set to true and no async threads are available,
+ the sendfile call will return <c>{error,einval}</c>.
+ Introduced in 17.0. Default is false.</item>
</taglist>
</p>
- <p>On operating systems with thread support, it is recommended to use
- async threads. See the command line flag
- <c>+A</c> in <seealso marker="erts:erl">erl(1)</seealso>. If it is not
- possible to use async threads for sendfile, it is recommended to use
- a relatively small value for the send buffer on the socket. Otherwise
- the Erlang VM might loose some of its soft realtime guarantees.
- Which size to use depends on the OS/hardware and the requirements
- of the application.</p>
</desc>
</func>
<func>
diff --git a/lib/kernel/src/file.erl b/lib/kernel/src/file.erl
index b5152018e0..23cf74f80f 100644
--- a/lib/kernel/src/file.erl
+++ b/lib/kernel/src/file.erl
@@ -111,7 +111,8 @@
-type date_time() :: calendar:datetime().
-type posix_file_advise() :: 'normal' | 'sequential' | 'random'
| 'no_reuse' | 'will_need' | 'dont_need'.
--type sendfile_option() :: {chunk_size, non_neg_integer()}.
+-type sendfile_option() :: {chunk_size, non_neg_integer()}
+ | {use_threads, boolean()}.
-type file_info_option() :: {'time', 'local'} | {'time', 'universal'}
| {'time', 'posix'}.
%%% BIFs
@@ -1229,8 +1230,7 @@ change_time(Name, {{AY, AM, AD}, {AH, AMin, ASec}}=Atime,
sendfile(File, _Sock, _Offet, _Bytes, _Opts) when is_pid(File) ->
{error, badarg};
sendfile(File, Sock, Offset, Bytes, []) ->
- sendfile(File, Sock, Offset, Bytes, ?MAX_CHUNK_SIZE, [], [],
- false, false, false);
+ sendfile(File, Sock, Offset, Bytes, ?MAX_CHUNK_SIZE, [], [], []);
sendfile(File, Sock, Offset, Bytes, Opts) ->
ChunkSize0 = proplists:get_value(chunk_size, Opts, ?MAX_CHUNK_SIZE),
ChunkSize = if ChunkSize0 > ?MAX_CHUNK_SIZE ->
@@ -1240,8 +1240,7 @@ sendfile(File, Sock, Offset, Bytes, Opts) ->
%% Support for headers, trailers and options has been removed because the
%% Darwin and BSD API for using it does not play nice with
%% non-blocking sockets. See unix_efile.c for more info.
- sendfile(File, Sock, Offset, Bytes, ChunkSize, [], [],
- false,false,false).
+ sendfile(File, Sock, Offset, Bytes, ChunkSize, [], [], Opts).
%% sendfile/2
-spec sendfile(Filename, Socket) ->
@@ -1261,17 +1260,17 @@ sendfile(Filename, Sock) ->
%% Internal sendfile functions
sendfile(#file_descriptor{ module = Mod } = Fd, Sock, Offset, Bytes,
- ChunkSize, Headers, Trailers, Nodiskio, MNowait, Sync)
+ ChunkSize, Headers, Trailers, Opts)
when is_port(Sock) ->
case Mod:sendfile(Fd, Sock, Offset, Bytes, ChunkSize, Headers, Trailers,
- Nodiskio, MNowait, Sync) of
+ Opts) of
{error, enotsup} ->
sendfile_fallback(Fd, Sock, Offset, Bytes, ChunkSize,
Headers, Trailers);
Else ->
Else
end;
-sendfile(_,_,_,_,_,_,_,_,_,_) ->
+sendfile(_,_,_,_,_,_,_,_) ->
{error, badarg}.
%%%
diff --git a/lib/kernel/test/kernel_SUITE.erl b/lib/kernel/test/kernel_SUITE.erl
index 0f29d895e5..75f51eb076 100644
--- a/lib/kernel/test/kernel_SUITE.erl
+++ b/lib/kernel/test/kernel_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -81,53 +81,59 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(kernel),
{_,_,Vsn} = lists:keyfind(kernel,1,application:loaded_applications()),
AppupFile = filename:join([code:lib_dir(kernel),ebin,"kernel.appup"]),
{ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
ct:log("~p~n",[AppupScript]),
- {OkVsns,NokVsns} = create_test_vsns(Vsn),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = kernel_vsn([FirstMajor,SecondMajor]),
+ Nok0 = kernel_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+kernel_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ As = rpc:call(N,application,which_applications,[]),
+ {_,_,KV} = lists:keyfind(kernel,1,As),
+ test_server:stop_node(N),
+ [KV|kernel_vsn(Rs)];
+ false ->
+ kernel_vsn(Rs)
+ end;
+kernel_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
diff --git a/lib/kernel/test/sendfile_SUITE.erl b/lib/kernel/test/sendfile_SUITE.erl
index 24884bada5..2c741232c4 100644
--- a/lib/kernel/test/sendfile_SUITE.erl
+++ b/lib/kernel/test/sendfile_SUITE.erl
@@ -24,7 +24,14 @@
-compile(export_all).
-all() ->
+all() -> [{group,async_threads},
+ {group,no_async_threads}].
+
+groups() ->
+ [{async_threads,[],tcs()},
+ {no_async_threads,[],tcs()}].
+
+tcs() ->
[t_sendfile_small
,t_sendfile_big_all
,t_sendfile_big_size
@@ -64,6 +71,14 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
file:delete(proplists:get_value(big_file, Config)).
+init_per_group(async_threads,Config) ->
+ [{sendfile_opts,[{use_threads,true}]}|Config];
+init_per_group(no_async_threads,Config) ->
+ [{sendfile_opts,[{use_threads,false}]}|Config].
+
+end_per_group(_,_Config) ->
+ ok.
+
init_per_testcase(TC,Config) when TC == t_sendfile_recvduring;
TC == t_sendfile_sendduring ->
Filename = proplists:get_value(small_file, Config),
@@ -72,7 +87,7 @@ init_per_testcase(TC,Config) when TC == t_sendfile_recvduring;
{_Size, Data} = sendfile_file_info(Filename),
{ok,D} = file:open(Filename, [raw,binary,read]),
prim_file:sendfile(D, Sock, 0, 0, 0,
- [],[],false,false,false),
+ [],[],[]),
Data
end,
@@ -93,6 +108,7 @@ t_sendfile_small(Config) when is_list(Config) ->
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
+ %% Here we make sure to test the sendfile/2 api
{ok, Size} = file:sendfile(Filename, Sock),
Data
end,
@@ -102,6 +118,7 @@ t_sendfile_small(Config) when is_list(Config) ->
t_sendfile_many_small(Config) when is_list(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
error_logger:add_report_handler(?MODULE,[self()]),
@@ -110,7 +127,7 @@ t_sendfile_many_small(Config) when is_list(Config) ->
N = 10000,
{ok,D} = file:open(Filename,[read|FileOpts]),
[begin
- {ok,Size} = file:sendfile(D,Sock,0,0,[])
+ {ok,Size} = file:sendfile(D,Sock,0,0,SendfileOpts)
end || _I <- lists:seq(1,N)],
file:close(D),
Size*N
@@ -128,11 +145,12 @@ t_sendfile_many_small(Config) when is_list(Config) ->
t_sendfile_big_all(Config) when is_list(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
file:read_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
Size
end,
@@ -141,12 +159,13 @@ t_sendfile_big_all(Config) when is_list(Config) ->
t_sendfile_big_size(Config) ->
Filename = proplists:get_value(big_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
SendAll = fun(Sock) ->
{ok, #file_info{size = Size}} =
file:read_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok, Size} = file:sendfile(D, Sock,0,Size,[]),
+ {ok, Size} = file:sendfile(D, Sock,0,Size,SendfileOpts),
Size
end,
@@ -155,12 +174,13 @@ t_sendfile_big_size(Config) ->
t_sendfile_partial(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
SendSingle = fun(Sock) ->
{_Size, <<Data:5/binary,_/binary>>} =
sendfile_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok,5} = file:sendfile(D,Sock,0,5,[]),
+ {ok,5} = file:sendfile(D,Sock,0,5,SendfileOpts),
file:close(D),
Data
end,
@@ -171,14 +191,14 @@ t_sendfile_partial(Config) ->
{ok,D} = file:open(Filename,[read|FileOpts]),
{ok, <<FData/binary>>} = file:read(D,5),
FSend = fun(Sock) ->
- {ok,5} = file:sendfile(D,Sock,0,5,[]),
+ {ok,5} = file:sendfile(D,Sock,0,5,SendfileOpts),
FData
end,
ok = sendfile_send(FSend),
SSend = fun(Sock) ->
- {ok,3} = file:sendfile(D,Sock,5,3,[]),
+ {ok,3} = file:sendfile(D,Sock,5,3,SendfileOpts),
SData
end,
@@ -191,12 +211,13 @@ t_sendfile_partial(Config) ->
t_sendfile_offset(Config) ->
Filename = proplists:get_value(small_file, Config),
FileOpts = proplists:get_value(file_opts, Config, []),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{_Size, <<_:5/binary,Data:3/binary,_/binary>> = AllData} =
sendfile_file_info(Filename),
{ok,D} = file:open(Filename,[read|FileOpts]),
- {ok,3} = file:sendfile(D,Sock,5,3,[]),
+ {ok,3} = file:sendfile(D,Sock,5,3,SendfileOpts),
{ok, AllData} = file:read(D,100),
file:close(D),
Data
@@ -206,10 +227,11 @@ t_sendfile_offset(Config) ->
t_sendfile_sendafter(Config) ->
Filename = proplists:get_value(small_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
ok = gen_tcp:send(Sock, <<2>>),
<<Data/binary,2>>
end,
@@ -218,10 +240,11 @@ t_sendfile_sendafter(Config) ->
t_sendfile_recvafter(Config) ->
Filename = proplists:get_value(small_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{Size, Data} = sendfile_file_info(Filename),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
ok = gen_tcp:send(Sock, <<1>>),
{ok,<<1>>} = gen_tcp:recv(Sock, 1),
<<Data/binary,1>>
@@ -250,6 +273,7 @@ t_sendfile_recvafter_remoteclose(Config) ->
t_sendfile_sendduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
@@ -258,7 +282,7 @@ t_sendfile_sendduring(Config) ->
timer:sleep(50),
ok = gen_tcp:send(Sock, <<2>>)
end),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
Size+1
end,
@@ -266,6 +290,7 @@ t_sendfile_sendduring(Config) ->
t_sendfile_recvduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock) ->
{ok, #file_info{size = Size}} =
@@ -275,7 +300,7 @@ t_sendfile_recvduring(Config) ->
ok = gen_tcp:send(Sock, <<1>>),
{ok,<<1>>} = gen_tcp:recv(Sock, 1)
end),
- {ok, Size} = file:sendfile(Filename, Sock),
+ {ok, Size} = sendfile(Filename, Sock, SendfileOpts),
timer:sleep(1000),
Size+1
end,
@@ -284,6 +309,7 @@ t_sendfile_recvduring(Config) ->
t_sendfile_closeduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
Send = fun(Sock,SFServPid) ->
spawn_link(fun() ->
@@ -292,13 +318,14 @@ t_sendfile_closeduring(Config) ->
end),
case erlang:system_info(thread_pool_size) of
0 ->
- {error, closed} = file:sendfile(Filename, Sock);
+ {error, closed} = sendfile(Filename, Sock,
+ SendfileOpts);
_Else ->
%% This can return how much has been sent or
%% {error,closed} depending on OS.
%% How much is sent impossible to know as
%% the socket was closed mid sendfile
- case file:sendfile(Filename, Sock) of
+ case sendfile(Filename, Sock, SendfileOpts) of
{error, closed} ->
ok;
{ok, Size} when is_integer(Size) ->
@@ -312,6 +339,7 @@ t_sendfile_closeduring(Config) ->
t_sendfile_crashduring(Config) ->
Filename = proplists:get_value(big_file, Config),
+ SendfileOpts = proplists:get_value(sendfile_opts, Config),
error_logger:add_report_handler(?MODULE,[self()]),
@@ -320,7 +348,7 @@ t_sendfile_crashduring(Config) ->
timer:sleep(50),
exit(die)
end),
- {error, closed} = file:sendfile(Filename, Sock),
+ {error, closed} = sendfile(Filename, Sock, SendfileOpts),
-1
end,
process_flag(trap_exit,true),
@@ -415,6 +443,16 @@ sendfile_file_info(File) ->
{ok, Data} = file:read_file(File),
{Size, Data}.
+sendfile(Filename,Sock,Opts) ->
+ case file:open(Filename, [read, raw, binary]) of
+ {error, Reason} ->
+ {error, Reason};
+ {ok, Fd} ->
+ Res = file:sendfile(Fd, Sock, 0, 0, Opts),
+ _ = file:close(Fd),
+ Res
+ end.
+
%% Error handler
diff --git a/lib/megaco/doc/src/notes.xml b/lib/megaco/doc/src/notes.xml
index a1039cbda0..f71166b1b1 100644
--- a/lib/megaco/doc/src/notes.xml
+++ b/lib/megaco/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>2000</year><year>2013</year>
+ <year>2000</year><year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -13,14 +13,14 @@
compliance with the License. You should have received a copy of the
Erlang Public License along with this software. If not, it can be
retrieved online at http://www.erlang.org/.
-
+
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
the License for the specific language governing rights and limitations
under the License.
-
+
</legalnotice>
-
+
<title>Megaco Release Notes</title>
<prepared>Lars Thors&eacute;n, H&aring;kan Mattsson, Micael Karlberg</prepared>
<docno></docno>
@@ -29,30 +29,43 @@
<file>notes.xml</file>
</header>
<p>This document describes the changes made to the Megaco system
- from version to version. The intention of this document is to
- list all incompatibilities as well as all enhancements and
- bugfixes for every release of Megaco. Each release of Megaco
- thus constitutes one section in this document. The title of each
- section is the version number of Megaco.</p>
-
-
- <section><title>Megaco 3.17.0.2</title>
+ from version to version. The intention of this document is to
+ list all incompatibilities as well as all enhancements and
+ bugfixes for every release of Megaco. Each release of Megaco
+ thus constitutes one section in this document. The title of each
+ section is the version number of Megaco.</p>
+
+
+ <section><title>Megaco 3.17.0.3</title>
<section><title>Improvements and New Features</title>
- <list>
- <item>
- <p>
- Introduced functionality for inspection of system and
- build configuration.</p>
- <p>
- Own Id: OTP-11196</p>
- </item>
- </list>
+ <list>
+ <item>
+ <p>Updated doc files to utf8.</p>
+ <p>Own Id: OTP-10907</p>
+ </item>
+ </list>
</section>
+
+ </section>
-</section>
+ <section><title>Megaco 3.17.0.2</title>
-<section><title>Megaco 3.17.0.1</title>
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Introduced functionality for inspection of system and
+ build configuration.</p>
+ <p>
+ Own Id: OTP-11196</p>
+ </item>
+ </list>
+ </section>
+
+ </section>
+
+ <section><title>Megaco 3.17.0.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/megaco/src/app/megaco.appup.src b/lib/megaco/src/app/megaco.appup.src
index da171e0c18..db59f55b55 100644
--- a/lib/megaco/src/app/megaco.appup.src
+++ b/lib/megaco/src/app/megaco.appup.src
@@ -2,7 +2,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2001-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2001-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -165,11 +165,21 @@
%% | | | | |
%% v v v v v
%% 3.17 <- 3.16.1 <- 3.15.2 <- 3.14.2 <- 3.11.4
+%% |
+%% v
+%% 3.17.0.1
+%% |
+%% v
+%% 3.17.0.2
+%% |
+%% v
+%% 3.17.0.3
%%
%%
{"%VSN%",
[
+ {"3.17.0.2", []},
{"3.17.0.1", []},
{"3.17", []},
{"3.16.0.3",
@@ -180,6 +190,7 @@
}
],
[
+ {"3.17.0.2", []},
{"3.17.0.1", []},
{"3.17", []},
{"3.16.0.3",
diff --git a/lib/megaco/src/binary/depend.mk b/lib/megaco/src/binary/depend.mk
index b9b86d3183..4225bc69dc 100644
--- a/lib/megaco/src/binary/depend.mk
+++ b/lib/megaco/src/binary/depend.mk
@@ -28,7 +28,7 @@
# This means that the ASN.1 runtime library will be inlined.
#
-ASN1_CT_OPTS += +noobj
+ASN1_CT_OPTS += +noobj +legacy_erlang_types
ifeq ($(MEGACO_INLINE_ASN1_RT),true)
# We need atleast version 1.4.6 of the ANS.1 application
ASN1_CT_OPTS += +inline
diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk
index ea4e9f2eb8..01d429d0ae 100644
--- a/lib/megaco/vsn.mk
+++ b/lib/megaco/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2014. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = megaco
-MEGACO_VSN = 3.17.0.2
+MEGACO_VSN = 3.17.0.3
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)"
diff --git a/lib/observer/doc/src/Makefile b/lib/observer/doc/src/Makefile
index b43aeccd73..baeeeb1c65 100644
--- a/lib/observer/doc/src/Makefile
+++ b/lib/observer/doc/src/Makefile
@@ -34,6 +34,8 @@ RELSYSDIR = $(RELEASE_PATH)/lib/$(APPLICATION)-$(VSN)
# Target Specs
# ----------------------------------------------------
XML_APPLICATION_FILES = ref_man.xml
+XML_REF1_FILES = \
+ cdv.xml
XML_REF3_FILES = \
crashdump.xml \
observer.xml \
@@ -59,11 +61,10 @@ BOOK_FILES = book.xml
XML_FILES = \
$(BOOK_FILES) $(XML_CHAPTER_FILES) \
- $(XML_PART_FILES) $(XML_REF3_FILES) \
+ $(XML_PART_FILES) $(XML_REF1_FILES) $(XML_REF3_FILES) \
$(XML_APPLICATION_FILES) $(XML_REF6_FILES)
-ONLY_HTML_FILE = \
- crashdump_help.html
+ONLY_HTML_FILE =
GIF_FILES = \
et_processes.gif \
@@ -77,6 +78,7 @@ HTML_FILES = $(XML_APPLICATION_FILES:%.xml=$(HTMLDIR)/%.html) \
INFO_FILE = ../../info
+MAN1_FILES = $(XML_REF1_FILES:%.xml=$(MAN1DIR)/%.1)
MAN3_FILES = $(XML_REF3_FILES:%.xml=$(MAN3DIR)/%.3)
MAN6_FILES = $(XML_REF6_FILES:%_app.xml=$(MAN6DIR)/%.6)
@@ -106,6 +108,7 @@ html: gifs $(HTML_REF_MAN_FILE) $(ONLY_HTML_FILE:%=$(HTMLDIR)/%)
clean clean_docs:
rm -rf $(HTMLDIR)/*
+ rm -f $(MAN1DIR)/*
rm -f $(MAN3DIR)/*
rm -f $(MAN6DIR)/*
rm -f $(TOP_PDF_FILE) $(TOP_PDF_FILE:%.pdf=%.fo)
@@ -115,7 +118,7 @@ clean clean_docs:
$(HTMLDIR)/$(ONLY_HTML_FILE):
$(INSTALL_DATA) $(ONLY_HTML_FILE) $@
-man: $(MAN3_FILES) $(MAN6_FILES)
+man: $(MAN1_FILES) $(MAN3_FILES) $(MAN6_FILES)
gifs: $(GIF_FILES:%=$(HTMLDIR)/%)
@@ -135,6 +138,8 @@ release_docs_spec: docs
$(INSTALL_DATA) $(HTMLDIR)/* \
"$(RELSYSDIR)/doc/html"
$(INSTALL_DATA) $(INFO_FILE) "$(RELSYSDIR)"
+ $(INSTALL_DIR) "$(RELEASE_PATH)/man/man1"
+ $(INSTALL_DATA) $(MAN1DIR)/* "$(RELEASE_PATH)/man/man1"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man3"
$(INSTALL_DATA) $(MAN3DIR)/* "$(RELEASE_PATH)/man/man3"
$(INSTALL_DIR) "$(RELEASE_PATH)/man/man6"
diff --git a/lib/observer/doc/src/cdv.xml b/lib/observer/doc/src/cdv.xml
new file mode 100644
index 0000000000..fc8f16bc4e
--- /dev/null
+++ b/lib/observer/doc/src/cdv.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE comref SYSTEM "comref.dtd">
+
+<comref>
+ <header>
+ <copyright>
+ <year>2013</year>
+ <holder>Ericsson AB. All Rights Reserved.</holder>
+ </copyright>
+ <legalnotice>
+ The contents of this file are subject to the Erlang Public License,
+ Version 1.1, (the "License"); you may not use this file except in
+ compliance with the License. You should have received a copy of the
+ Erlang Public License along with this software. If not, it can be
+ retrieved online at http://www.erlang.org/.
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and limitations
+ under the License.
+
+ </legalnotice>
+
+ <title>The cdv program</title>
+ <prepared>Siri Hansen</prepared>
+ <responsible>Siri Hansen</responsible>
+ <docno></docno>
+ <approved></approved>
+ <checked></checked>
+ <date>2013-10-015</date>
+ <rev>PA1</rev>
+ <file>cdv.xml</file>
+ </header>
+ <com>cdv</com>
+ <comsummary>Script used for starting the Crashdump Viewer from the
+ OS command line.
+ </comsummary>
+
+ <description>
+ <p>The <c>cdv</c> shell script can be found under the <c>priv</c>
+ directory of the <c>observer</c> application. The script is used
+ for starting the Crashdump Viewer tool from the OS command
+ line.</p>
+ <p>For Windows users, <c>cdv.bat</c> can be found in the same
+ location.</p>
+ </description>
+
+ <funcs>
+ <func>
+ <name>cdv [file]</name>
+ <fsummary>Start the Crashdump Viewer and load the given file.</fsummary>
+ <desc>
+ <p>The <c>file</c> arguments is optional. If not given, a file
+ dialog will pop up allowing the user to select a crashdump
+ from the file system.</p>
+ </desc>
+ </func>
+ </funcs>
+
+</comref>
diff --git a/lib/observer/doc/src/crashdump.xml b/lib/observer/doc/src/crashdump.xml
index 5b58a52739..27e42e83b7 100644
--- a/lib/observer/doc/src/crashdump.xml
+++ b/lib/observer/doc/src/crashdump.xml
@@ -31,13 +31,14 @@
<checked></checked>
<date>2003-03-10</date>
<rev>PA1</rev>
- <file>crashdump.sgml</file>
+ <file>crashdump.xml</file>
</header>
<module>crashdump_viewer</module>
- <modulesummary>A HTML based tool for browsing Erlang crashdumps.</modulesummary>
+ <modulesummary>A WxWidgets based tool for browsing Erlang
+ crashdumps.</modulesummary>
<description>
- <p>The Crashdump Viewer is an HTML based tool for browsing Erlang
- crashdumps. Crashdump Viewer runs under the WebTool application.</p>
+ <p>The Crashdump Viewer is a WxWidgets based tool for browsing Erlang
+ crashdumps.</p>
<p>See the <seealso marker="crashdump_ug">user's guide</seealso>
for more information about how to get started with the Crashdump
@@ -46,16 +47,26 @@
<funcs>
<func>
<name>start() -> ok</name>
+ <name>start(File) -> ok</name>
<fsummary>Start the crashdump_viewer</fsummary>
+ <type>
+ <v>File = string()</v>
+ <d>The file name of the crashdump.</d>
+ </type>
<desc>
- <p>This function starts the <c>crashdump_viewer</c>.</p>
+ <p>This function starts the <c>crashdump_viewer</c> GUI and
+ loads the given crashdump.</p>
+
+ <p>If <c>File</c> is not given, a file dialog will be opened
+ where the crashdump can be selected.</p>
</desc>
</func>
<func>
<name>stop() -> ok</name>
<fsummary>Stop the crashdump_viewer</fsummary>
<desc>
- <p>This function stops the <c>crashdump_viewer</c>.</p>
+ <p>This function stops the <c>crashdump_viewer</c> and closes
+ all GUI windows.</p>
</desc>
</func>
</funcs>
diff --git a/lib/observer/doc/src/crashdump_help.html b/lib/observer/doc/src/crashdump_help.html
deleted file mode 100644
index 268b9495d6..0000000000
--- a/lib/observer/doc/src/crashdump_help.html
+++ /dev/null
@@ -1,307 +0,0 @@
-</<!doctype chapter PUBLIC "-//Stork//DTD chapter//EN">
-<!--
- ``The contents of this file are subject to the Erlang Public License,
- Version 1.1, (the "License"); you may not use this file except in
- compliance with the License. You should have received a copy of the
- Erlang Public License along with this software. If not, it can be
- retrieved via the world wide web at http://www.erlang.org/.
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- the License for the specific language governing rights and limitations
- under the License.
-
- The Initial Developer of the Original Code is Ericsson Utvecklings AB.
- Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
- AB. All Rights Reserved.''
-
- $Id$
--->
-<html>
-<head>
-<title>Crashdump Viewer help</title>
-</head>
-<body BGCOLOR="#FFFFFF">
-<center>
-<a HREF="http://www.erlang.se"><img BORDER=0 ALT="[Erlang Systems]"
-SRC="min_head.gif"></a>
-</center>
-<blockquote>
- <h2>Information pages</h2>
-
- <p>Each menu item points to an information page. If no information
- is found for an item, the page will simply say "No information
- found". The reason for not finding any information about an item
- can be that the dump is truncated, that it is a dump from an old
- OTP release in which this item was not written or that the item
- simply wasn't present in the system at the point of failure.
-
- <p>If the dump was truncated, a warning is displayed.
-
- <p>Even if some information about an item exists, there might be
- empty fields if the dump originates from an old OTP release.
-
- <p>The value "-1" in any field means "unknown", and in most cases
- it means that the dump was truncated somewhere around this field.
-
- <p>Only some of the fields in the different information pages are
- described here. These are fields that to not exist in the raw
- crashdump, or in some way differs from the fields in the raw
- crashdump. Details about other field can be found in the user's
- guide for the Erlang runtime system, in the chapter "How to
- interpret the Erlang crash dumps". A link to this chapter can be
- found in the Crashdump Viewer's menu under documentation, and
- there are also direct links from the specific sections below to
- related information in "How to interpret the Erlang crash dumps".
-
- <a NAME="general_info">
- <h3>General information</h3>
-
- <p>This is the first page shown when a new dump is loaded into
- the system. It shows a very short overview of the dump.
-
- <p>'Node name' will only exist in dumps originating from OTP R9C
- and later.
-
- <p>The following fields are not described in the Erlang runtime
- system user's guide:
-
- <dl>
- <dt><strong>Crashdump created on</strong></dt>
- <dd>Time of failure.</dd>
-
- <dt><strong>Memory allocated</strong></dt>
- <dd>The total number of bytes allocated, equivalent to
- <code>c:memory(total)</code>. This will only be present in
- dumps from OTP R9C and later.</dd>
-
- <dt><strong>Memory maximum</strong></dt>
- <dd>The maximum number of bytes that has been allocated
- during the lifetime of the originating node. This will not be
- present in dumps older than OTP R9C, and even in newer
- releases it is only shown if the Erlang runtime system was run
- instrumented.</dd>
-
- <dt><strong>Atoms</strong></dt>
- <dd>If at all available in the dump, this is the total
- number of atoms in the atom table. If the size of the atom
- table is not available, the number of atoms visible in the
- dump is presented.</dd>
-
- <dt><strong>Processes, ETS tables and Funs</strong></dt>
- <dd>The number of processes, ETS tables and funs visible in
- the dump.</dd>
- </dl>
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#general_info>
- More...</a>
- </center>
-
-
- <a NAME="processes">
- <h3>Processes</h3>
-
- <p>The Process Information page shows a list of all processes
- found in the crashdump, including some short information about
- each process. By default the processes are sorted by their
- pids. To sort by other topic, click any heading in the process
- table.
-
- <p>Detailed information about a specific process is shown when
- the pid is clicked.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#processes>
- More...</a>
- </center>
-
-
-
- <a NAME="ports">
- <h3>Ports</h3>
-
- <p>The port information page shows all port information found in
- the dump.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#ports>
- More...</a>
- </center>
-
-
-
- <a NAME="ets_tables"><a NAME="internal_ets_tables">
- <h3>ETS tables</h3>
-
- <p>The ETS table information page shows all ETS table
- information found in the dump. The 'Id' is the same as the
- 'Table' field found in the raw crashdump, and 'Memory' is the
- 'Words' field from the raw crashdump translated into
- bytes. 'Type' is the type of table, and it can be either "hash"
- or "tree". For tree tables there will be no value in the
- 'Bucket' field.
-
- <p>Clicking a pid in the 'Owner' column takes you to the
- detailed information about the process owning the ETS table.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#ets_tables>
- More...</a>
- </center>
-
-
- <a NAME="timers">
- <h3>Timers</h3>
-
- <p>The timer information page shows all timer information found
- in the dump.
-
- <p>Clicking a pid in the 'Owner' column takes you to the
- detailed information about the process owning the timer.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#timers>
- More...</a>
- </center>
-
-
-
- <a NAME="funs">
- <h3>Fun table</h3>
-
- <p>The Fun table information page shows all Fun information
- found in the dump. Fun information will only exist in dumps from
- OTP R8B or later.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#funs>
- More...</a>
- </center>
-
-
-
- <a NAME="atoms">
- <h3>Atoms</h3>
-
- <p>The atoms information page lists all atoms found in the
- dump. The last created atom is listed first.
-
- <p>Note that if the dump is from OTP R8B or earlier, the raw
- dump lists the atoms in the opposite order and the Crashdump
- Viewer reverses them. This means that there is no problem if the
- dump is not truncated. However, if the dump is truncated, the
- last atoms might not be shown at all!!
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#atoms>
- More...</a>
- </center>
-
-
- <a NAME="distribution_info">
- <h3>Distribution information</h3>
-
- <p>The distribution information page shows all distribution
- information found in the dump.
-
- <p>If the page shows "Not alive", it means that the node was not
- distributed.
-
- <p>It the node was distributed, all connected nodes are
- shown. Visible nodes are alive nodes with a living connection to
- the originating node. Hidden nodes are the same as visible
- nodes, except they are started with the "-hidden" flag. Not
- connected nodes are nodes that are not connected to the
- originating node anymore, but references (i.e. process or port
- identitifiers) exist.
-
- <p>'Links/Monitors' may contain information about links or
- monitors between processes on the originating node and the
- connected node.
-
- <p>'Extra Info' may contain debug information (i.e. special
- information written if the emulator is debug compiled) or error
- information.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#distribution_info>
- More...</a>
- </center>
-
-
- <a NAME="loaded_modules">
- <h3>Loaded modules</h3>
-
- <p>The loaded modules information page shows all modules that
- were loaded on the originating node, and the current size of the
- code. If old code exsits, the old size is also shown.
-
- <p>Detailed information about a specific module is shown when
- the module name is clicked.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#loaded_modules>
- More...</a>
- </center>
-
-
- <a NAME="internal_tables">
- <h3>Internal tables</h3>
-
- <p>Internal tables are shown in two information pages: hash
- tables and index tables.
-
- <center>
- <a href=/crashdump_erts_doc/crash_dump.html#internal_tables>
- More...</a>
- </center>
-
-
- <a NAME="memory">
- <h3>Memory</h3>
-
- <p>Memory information is divided into three pages.
-
- <p>The first page, <strong>Memory</strong>, shows information
- similar to what you can obtain on a living node with
- <code>c:memory()</code>. This will only be present in dumps from
- OTP R9C and later.
- <a href=/crashdump_erts_doc/crash_dump.html#memory>More...</a>
-
- <p>The <strong>Allocated areas</strong> page shows information
- similar to what you can obtain on a living node with
- <code>erlang:system_info(allocated_areas)</code>.
- <a href=/crashdump_erts_doc/crash_dump.html#allocated_areas>More...</a>
-
- <p>The <strong>Allocator information</strong> page shows
- information about allocators. The contents of the page will vary
- with the version.
- <a href=/crashdump_erts_doc/crash_dump.html#allocator>More...</a>
-
- <center>
-
- </center>
-
-
- <h3>Documentation</h3>
-
- <p>'Crashdump Viewer help' is this document.
-
- <p>'How to interpret Erlang crashdumps' is a document from the
- Erlang runtime system describing details in the raw
- crashdumps. Here you will also find information about each
- single field in the different information pages.
-
-</blockquote>
-<center>
-<hr>
-<font SIZE=-1>
-
-Copyright &copy; 1991-2003
-<a HREF="http://www.erlang.se">Ericsson Utvecklings AB</a><br>
-<!--#include virtual="/ssi/otp_footer.html"-->
-</font>
-</center>
-</body>
-</html>
diff --git a/lib/observer/doc/src/crashdump_ug.xml b/lib/observer/doc/src/crashdump_ug.xml
index fd4405df09..d22fb4cc40 100644
--- a/lib/observer/doc/src/crashdump_ug.xml
+++ b/lib/observer/doc/src/crashdump_ug.xml
@@ -13,12 +13,11 @@
compliance with the License. You should have received a copy of the
Erlang Public License along with this software. If not, it can be
retrieved online at http://www.erlang.org/.
-
+
Software distributed under the License is distributed on an "AS IS"
basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
the License for the specific language governing rights and limitations
under the License.
-
</legalnotice>
<title>Crashdump Viewer</title>
@@ -31,9 +30,9 @@
<section>
<title>Introduction</title>
- <p>The Crashdump Viewer is an HTML based tool for browsing Erlang
- crashdumps. Crashdump Viewer runs under the WebTool application.
- </p>
+ <p>The Crashdump Viewer is a WxWidgets based tool for browsing
+ Erlang crashdumps.
+ </p>
</section>
<section>
@@ -42,93 +41,357 @@
<p>The easiest way to start Crashdump Viewer is to use the
provided shell script named <c>cdv</c> with the full path to the
erlang crashdump as an argument. The script can be found in the
- priv directory of the <c>observer</c> application. This starts
- WebTool, Crashdump Viewer and a web browser, and loads the given
- file. The browser should then display a page named General
- Information which shows a short summary of the information in
- the crashdump.</p>
-
- <p>The default browser is Internet Explorer on Windows, open on Mac OS X,
- or else Firefox. To use another browser, give the browser's start command
- as the second argument to <c>cdv</c>. If the given browser name is
- not known to Crashdump Viewer, the browser argument is executed as
- a command with the start URL as the only argument.</p>
+ priv directory of the <c>observer</c> application. This starts the
+ Crashdump Viewer GUI and loads the given file. If no file name is
+ given, a file dialog will be opened where the file can be
+ selected.</p>
<p>Under Windows the batch file <c>cdv.bat</c> can be used.</p>
<p>It is also possible to start the Crashdump Viewer from within
an erlang node by calling <seealso
- marker="crashdump_viewer#start/0">crashdump_viewer:start/0</seealso>. This
- will automatically start WebTool and display the web address where
- WebTool can be found. See the documentation for the WebTool
- application for further information about how to use WebTool.</p>
-
- <p>Point your web browser to the address displayed, and you should
- now see the start page of WebTool. At the top of the page, you
- will see a link to "CrashDumpViewer". Click this link to get to
- the start page for Crashdump Viewer. (Note that if webtool is on
- localhost, you must configure your web browser to have direct
- connection to the internet, or you must set no proxy for
- localhost.)
- </p>
- <p>From the start page of Crashdump Viewer, push the "Load
- Crashdump" button to load a crashdump into the tool. Then enter
- the filename of the crashdump in the entry field and push the
- "Ok" button. This will bring you to the General Information
- page, i.e. the same page as the <c>cdv</c> script will open in
- the browser.
- </p>
- <p>Crashdumps generated by OTP R9C and later are loaded directly
- into the Crashdump Viewer, while dumps from earlier releases first
- are translated by the Crashdump Translater. The Crashdump
- Translater creates a new file with the same name as the original
- crashdump, but with the extension <c>.translated</c>. If there is
- no write access to the directory of the original file, you will be
- asked to enter a new path and filename for the translated file.
- </p>
+ marker="crashdump_viewer#start/0">crashdump_viewer:start/0</seealso>
+ or <seealso
+ marker="crashdump_viewer#start/1">crashdump_viewer:start/1</seealso>.</p>
</section>
<section>
- <title>Navigating</title>
- <p>The lefthand frame contains a menu. Menu folders can be
- expanded and collapsed by clicking the folder picture. When a menu
- item is clicked, the item information is shown in the big
- information frame.
- </p>
- <p>The filename frame above the information frame shows the full
- name of the currently viewed Erlang crashdump.
- </p>
- <p>To load a new crashdump, click the "Load New Crashdump" button
- in the menu frame.
- </p>
- <p>The various information shown in the information frame will
- contain links to process identifiers (PIDs) and port
- identifiers. Clicking one of these links will take you to the
- detailed information page for the process or port in question. Use
- the "Back" button in your browser to get back to the
- startingpoint. If the process or port resided on a remote node,
- there will be no information available. Clicking the link will
- then take you to the information about the remote node.
- </p>
+ <title>The graphical interface</title>
+
+ <p>The main window is opened when Crashdump Viewer has loaded a
+ crashdump. It contains a title bar, a menu bar, a number of
+ information panels and a status bar.</p>
+
+ <p>The title bar shows the name of the currently loaded
+ crashdump.</p>
+
+ <p>The menu bar contains a <em>File</em> menu and a <em>Help</em>
+ menu. From the File menu a new crashdump can be loaded or the tool
+ can be terminated. From the Help menu this user's guide and the
+ chapter "How to interpret the Erlang crash dumps" from the user's
+ guide for Erlang runtime system can be opened. "How to interpret
+ the Erlang crash dumps" describes the raw crashdumps in
+ detail. Here you will also find information about each single
+ field in the different information pages. This document can also
+ be found directly in the OTP online documentation, via the Erlang
+ runtime system user's guide.</p>
+
+ <p>The status bar at the bottom of the window will show a warning
+ if the currently loaded dump is truncated.</p>
+
+ <p>The centre area of the main window contains the information
+ panels. Each panel displays information about a specific item or a
+ list of items. A panel is selected by clicking the title of the
+ tab.</p>
+
+ <p>From panels that display lists of items, for example the
+ Processes- or the Ports panel, a new window with further
+ information can be opened by double clicking a row or by right
+ clicking the row and selecting an item from the drop down
+ menu. The new window is called a detail window. Detail windows can
+ be opened for processes, ports, nodes and modules.</p>
+
+ <p>The various information shown in a detail window might contain
+ links to processes or ports. Clicking one of these links will open
+ the detail window for the process or port in question. If the
+ process or port resided on a remote node, there will be no
+ information available. Clicking the link will then pop up a dialog
+ where you can choose whether to open the detail window for the
+ remote node or not.
+ </p>
+
+ <p>Some of the panels contain a left hand menu where sub items of
+ the panel's information area can be selected. Click on one of the
+ rows, and the information will be displayed in the right hand
+ information area.</p>
</section>
<section>
- <title>Help</title>
- <p>Further help on how to use the Crashdump Viewer tool can be
- found in the tool's menu under 'Documentation':
- </p>
- <p>'Crashdump Viewer help' is a short document describing each
- information page and any additional information that might occur,
- compared to the raw dump described in 'How to interpret Erlang
- crashdumps'.
- </p>
- <p>'How to interpret Erlang crashdumps' is a document from the
- Erlang runtime system describing details in the raw
- crashdumps. Here you will also find information about each single
- field in the different information pages. This document can also
- be found directly in the OTP online documentation, via the Erlang
- runtime system user's guide.
- </p>
+ <title>Data content</title>
+
+ <p>Each panel in the main window contains an information
+ page. If no information is found for an item, the page will be
+ empty. The reason for not finding any information about an item
+ can be that the dump is truncated, that it is a dump from an old
+ OTP release in which this item was not written or that the item
+ simply wasn't present in the system at the point of failure.</p>
+
+ <p>If the dump was truncated, a warning is displayed in the
+ status bar of the main window.</p>
+
+ <p>Even if some information about an item exists, there might be
+ empty fields if the dump originates from an old OTP release.</p>
+
+ <p>The value "-1" in any field means "unknown", and in most
+ cases it means that the dump was truncated somewhere around this
+ field.</p>
+
+ <p>The sections below describe some of the fields in the
+ different information panels. These are fields that do not exist
+ in the raw crashdump, or in some way differ from the fields in
+ the raw crashdump. Details about other fields can be found in
+ the user's guide for the Erlang runtime system, in the chapter
+ "How to interpret the Erlang crash dumps". That chapter can also
+ be opened from the Help menu in the Crashdump Viewer's main
+ window, and there are also direct links from the specific
+ sections below to related information in "How to interpret the
+ Erlang crash dumps".</p>
</section>
-</chapter>
+ <section>
+ <marker id="general_info"/>
+ <title>General information</title>
+
+ <p>The <em>General information</em> panel shows a short overview
+ of the dump.</p>
+
+ <p>The following fields are not described in the Erlang runtime
+ system user's guide:</p>
+
+ <taglist>
+ <tag><em>Crashdump created on</em></tag>
+ <item>Time of failure.</item>
+
+ <tag><em>Memory allocated</em></tag>
+ <item>The total number of bytes allocated, equivalent to
+ <c>c:memory(total)</c>.</item>
+
+ <tag><em>Memory maximum</em></tag>
+ <item>The maximum number of bytes that has been allocated during
+ the lifetime of the originating node. This will only be shown if
+ the Erlang runtime system was run instrumented.</item>
+
+ <tag><em>Atoms</em></tag>
+ <item>If available in the dump, this is the total number of
+ atoms in the atom table. If the size of the atom table is not
+ available, the number of atoms visible in the dump is
+ presented.</item>
+
+ <tag><em>Processes, ETS tables and Funs</em></tag>
+ <item>The number of processes, ETS tables and funs visible in
+ the dump.</item>
+ </taglist>
+
+ <p>
+ <seealso marker="erts:crash_dump#general_info">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="processes"/>
+ <title>Processes</title>
+
+ <p>The <em>Processes</em> panel shows a list of all processes
+ found in the crashdump, including some short information about
+ each process. By default the processes are sorted by their
+ pids. To sort by other topic, click the desired column
+ heading.</p>
+
+ <p>The <em>Memory</em> column shows the 'Memory' field which was
+ added to crashdumps in R16B01. This is the total amount of memory
+ used by the process. For crashdumps from earlier releases, this
+ column shows the 'Stack+heap' field. The value shown is always in
+ bytes.</p>
+
+ <p>To view detailed information about a specific process, double
+ click the row in the list or right click the row and select
+ "Properties for &lt;pid&gt;".</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#processes">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="ports"/>
+ <title>Ports</title>
+
+ <p>The <em>Ports</em> panel is similar to the <em>Processes</em>
+ panel, except it lists all ports found in the crashdump.</p>
+
+ <p>To see more details about a specific port, dobule click the row
+ or right click it and select "Properties for &lt;port&gt;". From
+ the right click menu you can also select "Properties for
+ &lt;pid&gt;", where &lt;pid&gt; is the process connected to the
+ port.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#ports">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="ets_tables"/><marker id="internal_ets_tables"/>
+ <title>ETS tables</title>
+
+ <p>The <em>ETS Tables</em> panel shows all ETS table information
+ found in the dump. The 'Id' is the same as the 'Table' field found
+ in the raw crashdump, and 'Memory' is the 'Words' field from the
+ raw crashdump translated into bytes. 'Type' is the type of table,
+ and it can be either "hash" or "tree". For tree tables there will
+ be no value in the 'Bucket' field.</p>
+
+ <p>To open the detailed information page about the owner process
+ of an ETS table, right click the row and select "Properties for
+ &lt;pid&gt;".</p>
+
+ <p>Double clicking a row in the ETS Tables panel has no
+ effect.</p>
+
+ <p>From the left hand menu you can also select to see internal ETS
+ tables.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#ets_tables">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="timers"/>
+ <title>Timers</title>
+
+ <p>The <em>Timers</em> panel shows all timer information found in
+ the dump.</p>
+
+ <p>To open the detailed information page about the owner process
+ of a timer, right click the row and select "Properties for
+ &lt;pid&gt;".</p>
+
+ <p>Double clicking a row in the Timers panel has no effect.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#timers">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="funs"/>
+ <title>Funs</title>
+
+ <p>The <em>Funs</em> panel shows all Fun information found in the
+ dump.</p>
+
+ <p>To open the detailed information page about the module to which
+ the fun belongs, right click the row and select "Properties for
+ &lt;mod&gt;".</p>
+
+ <p>Double clicking a row in the Funs panel has no effect.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#funs">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="atoms"/>
+ <title>Atoms</title>
+
+ <p>The <em>Atoms</em> panel lists all atoms found in the dump. By
+ default the atoms are sorted in creation order from first to
+ last. This is opposite of the raw crashdump where atoms are listed
+ from last to first, meaning that if the dump was truncated in the
+ middle of the atom list only the last created atoms will be seen
+ in the <em>Atoms</em> panel.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#atoms">More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="distribution_info"/>
+ <title>Nodes</title>
+
+ <p>The <em>Nodes</em> panel shows a list of all external erlang
+ nodes which are referenced from the crashdump.</p>
+
+ <p>If the page is empty it either means that the crashed node was
+ not distributed, that it was distributed but had no references to
+ other nodes or that the dump was truncated.</p>
+
+ <p>If the node was distributed, all referenced nodes are
+ shown. The column named <em>Connection type</em> shows if the node
+ is visible, hidden or not connected. Visible nodes are alive nodes
+ with a living connection to the originating node. Hidden nodes are
+ the same as visible nodes, except they are started with the
+ <c>-hidden</c> flag. Not connected nodes are nodes that are not
+ connected to the originating node anymore, but references
+ (i.e. process or port identifiers) exist.</p>
+
+ <p>To see more detailed information about a node, double click the
+ row or right click the row and select "Properties for node
+ &lt;node&gt;". From the right click menu you can also select
+ "Properties for &lt;port&gt;", to open the detailed information
+ window for the controlling port.</p>
+
+ <p>In the detailed information window for a node, any exsisting
+ links and monitors between processes on the originating node and
+ the connected node are shown. <em>Extra Info</em> may contain
+ debug information (i.e. special information written if the
+ emulator is debug compiled) or error information.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#distribution_info">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="loaded_modules"/>
+ <title>Loaded modules</title>
+
+ <p>The <em>Modules</em> panel lists all modules that were loaded
+ on the originating node, and the current size of the code. If old
+ code exsits, the old size is also shown.</p>
+
+ <p>To see detailed information about a specific module, double
+ click the row or right click it and select "Properties for
+ &lt;mod&gt;".</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#loaded_modules">
+ More...</seealso>
+ </p>
+ </section>
+
+ <section>
+ <marker id="memory"/>
+ <title>Memory</title>
+
+ <p>The <em>Memory</em> panel shows memory and allocator
+ information. From the left hand menu you can select:</p>
+
+ <p>
+ <list>
+
+ <item><em>Memory</em> <seealso
+ marker="erts:crash_dump#memory">More...</seealso></item>
+
+ <item><em>Allocator Summary</em> - this page presents a
+ summary of values from all allocators below.</item>
+
+ <item><em>&lt;Allocator&gt;</em> - one entry per allocator
+ <seealso
+ marker="erts:crash_dump#allocator">More...</seealso></item>
+
+ <item><em>Allocated Areas</em> <seealso
+ marker="erts:crash_dump#allocated_areas">More...</seealso></item>
+
+ </list>
+ </p>
+ </section>
+
+ <section>
+ <marker id="internal_tables"/>
+ <title>Internal tables</title>
+
+ <p>On the <em>Internal Tables</em> panel you can choose from the
+ left hand menu to see hash tables or index tables.</p>
+
+ <p>
+ <seealso marker="erts:crash_dump#internal_tables">More...</seealso>
+ </p>
+ </section>
+</chapter>
diff --git a/lib/observer/doc/src/ref_man.xml b/lib/observer/doc/src/ref_man.xml
index 3230a1c9d3..c3805b2d86 100644
--- a/lib/observer/doc/src/ref_man.xml
+++ b/lib/observer/doc/src/ref_man.xml
@@ -38,5 +38,6 @@
<xi:include href="ttb.xml"/>
<xi:include href="etop.xml"/>
<xi:include href="crashdump.xml"/>
+ <xi:include href="cdv.xml"/>
</application>
diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile
index 646892663f..c120865213 100644
--- a/lib/observer/src/Makefile
+++ b/lib/observer/src/Makefile
@@ -36,14 +36,33 @@ RELSYSDIR = $(RELEASE_PATH)/lib/observer-$(VSN)
MODULES= \
crashdump_viewer \
- crashdump_viewer_html \
+ cdv_atom_cb \
+ cdv_bin_cb \
+ cdv_detail_wx \
+ cdv_dist_cb \
+ cdv_ets_cb \
+ cdv_fun_cb \
+ cdv_gen_cb \
+ cdv_html_wx \
+ cdv_info_wx \
+ cdv_int_tab_cb \
+ cdv_mem_cb \
+ cdv_mod_cb \
+ cdv_multi_wx \
+ cdv_port_cb \
+ cdv_proc_cb \
+ cdv_table_wx \
+ cdv_term_cb \
+ cdv_timer_cb \
+ cdv_virtual_list_wx \
+ cdv_wx \
etop \
etop_tr \
etop_txt \
observer \
observer_app_wx \
+ observer_html_lib \
observer_lib \
- observer_wx \
observer_perf_wx \
observer_pro_wx \
observer_procinfo \
@@ -52,6 +71,7 @@ MODULES= \
observer_traceoptions_wx \
observer_tv_table \
observer_tv_wx \
+ observer_wx \
ttb \
ttb_et
diff --git a/lib/observer/src/cdv_atom_cb.erl b/lib/observer/src/cdv_atom_cb.erl
new file mode 100644
index 0000000000..46fce81b52
--- /dev/null
+++ b/lib/observer/src/cdv_atom_cb.erl
@@ -0,0 +1,48 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_atom_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_ATOM, ?COL_ID+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(Id) -> Id+1.
+
+col_spec() ->
+ [{"Creation order", ?wxLIST_FORMAT_CENTER, 100},
+ {"Atom", ?wxLIST_FORMAT_LEFT, 100}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:atoms(),
+ {Info,TW}.
+
+format({Bin,q}) when is_binary(Bin) ->
+ [$'|binary_to_list(Bin)];
+format({Bin,nq}) when is_binary(Bin) ->
+ lists:flatten(io_lib:format("~ts",[Bin]));
+format(D) ->
+ D.
diff --git a/lib/observer/src/cdv_bin_cb.erl b/lib/observer/src/cdv_bin_cb.erl
new file mode 100644
index 0000000000..0266047ee3
--- /dev/null
+++ b/lib/observer/src/cdv_bin_cb.erl
@@ -0,0 +1,82 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_bin_cb).
+
+-export([get_details/1,
+ detail_pages/0]).
+
+%% Callbacks for cdv_detail_wx
+get_details({_, {T,Key}}) ->
+ [{Key,Term}] = ets:lookup(T,Key),
+ {ok,{"Expanded Binary", Term, []}};
+get_details({cdv, Id}) ->
+ {ok,Bin} = crashdump_viewer:expand_binary(Id),
+ {ok,{"Expanded Binary", Bin, []}}.
+
+detail_pages() ->
+ [{"Binary", fun init_bin_page/2}].
+
+init_bin_page(Parent,Bin) ->
+ cdv_multi_wx:start_link(
+ Parent,
+ [{"Format \~p",cdv_html_wx,format_bin_fun("~p",Bin)},
+ {"Format \~tp",cdv_html_wx,format_bin_fun("~tp",Bin)},
+ {"Format \~w",cdv_html_wx,format_bin_fun("~w",Bin)},
+ {"Format \~s",cdv_html_wx,format_bin_fun("~s",Bin)},
+ {"Format \~ts",cdv_html_wx,format_bin_fun("~ts",Bin)},
+ {"Hex",cdv_html_wx,hex_binary_fun(Bin)},
+ {"Term",cdv_html_wx,binary_to_term_fun(Bin)}]).
+
+format_bin_fun(Format,Bin) ->
+ fun() ->
+ try io_lib:format(Format,[Bin]) of
+ Str -> plain_html(lists:flatten(Str))
+ catch error:badarg ->
+ Warning = "This binary can not be formatted with " ++ Format,
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+binary_to_term_fun(Bin) ->
+ fun() ->
+ try binary_to_term(Bin) of
+ Term -> plain_html(io_lib:format("~p",[Term]))
+ catch error:badarg ->
+ Warning = "This binary can not be coverted to an Erlang term",
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+-define(line_break,25).
+hex_binary_fun(Bin) ->
+ fun() ->
+ S = "<<" ++ format_hex(Bin,?line_break) ++ ">>",
+ plain_html(io_lib:format("~s",[S]))
+ end.
+
+format_hex(<<B1:4,B2:4>>,_) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16)];
+format_hex(<<B1:4,B2:4,Bin/binary>>,0) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16),$,,$\n,$\s,$\s
+ | format_hex(Bin,?line_break)];
+format_hex(<<B1:4,B2:4,Bin/binary>>,N) ->
+ [integer_to_list(B1,16),integer_to_list(B2,16),$,
+ | format_hex(Bin,N-1)].
+
+plain_html(Text) ->
+ observer_html_lib:plain_page(Text).
diff --git a/lib/observer/src/cdv_detail_wx.erl b/lib/observer/src/cdv_detail_wx.erl
new file mode 100644
index 0000000000..dc93507a36
--- /dev/null
+++ b/lib/observer/src/cdv_detail_wx.erl
@@ -0,0 +1,158 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_detail_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/3]).
+
+-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
+ handle_call/3, handle_info/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+-include("observer_defs.hrl").
+
+-record(state, {parent,
+ frame,
+ id,
+ pages=[]
+ }).
+
+%% Defines
+-define(ID_NOTEBOOK, 604).
+
+%% Detail view
+start_link(Id, ParentFrame, Callback) ->
+ wx_object:start_link(?MODULE, [Id, ParentFrame, Callback, self()], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([Id, ParentFrame, Callback, Parent]) ->
+ case Callback:get_details(Id) of
+ {ok,Details} ->
+ init(Id,ParentFrame,Callback,Parent,Details);
+ {yes_no, Info, Fun} ->
+ case observer_lib:display_yes_no_dialog(Info) of
+ ?wxID_YES -> Fun();
+ ?wxID_NO -> ok
+ end,
+ {stop,normal};
+ {info,Info} ->
+ observer_lib:display_info_dialog(Info),
+ {stop,normal}
+ end.
+
+init(Id,ParentFrame,Callback,Parent,{Title,Info,TW}) ->
+ Frame=wxFrame:new(ParentFrame, ?wxID_ANY, [Title],
+ [{style, ?wxDEFAULT_FRAME_STYLE}, {size, {850,600}}]),
+ MenuBar = wxMenuBar:new(),
+ create_menus(MenuBar),
+ wxFrame:setMenuBar(Frame, MenuBar),
+
+ Panel = wxPanel:new(Frame, []),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ {InfoPanel,Pages} = create_pages(Panel,Callback:detail_pages(),[Info]),
+ wxSizer:add(Sizer, InfoPanel, [{proportion, 1}, {flag, ?wxEXPAND}]),
+
+ case TW of
+ [] ->
+ undefined;
+ _ ->
+ StatusBar = observer_lib:create_status_bar(Panel),
+ wxSizer:add(Sizer, StatusBar, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 0},
+ {border,4}]),
+ wxTextCtrl:writeText(StatusBar, TW),
+ StatusBar
+ end,
+
+ wxPanel:setSizer(Panel, Sizer),
+
+ wxFrame:connect(Frame, close_window),
+ wxMenu:connect(Frame, command_menu_selected),
+ wxFrame:show(Frame),
+ {Frame, #state{parent=Parent,
+ id=Id,
+ frame=Frame,
+ pages=Pages
+ }}.
+
+create_pages(Panel,[{_PageTitle,Fun}],FunArgs) ->
+ %% Only one page - don't create notebook
+ Page = init_panel(Panel, Fun, FunArgs),
+ {Page,[Page]};
+create_pages(Panel,PageSpecs,FunArgs) ->
+ Notebook = wxNotebook:new(Panel, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
+ Pages = [init_tab(Notebook, PageTitle, Fun, FunArgs)
+ || {PageTitle,Fun} <- PageSpecs],
+ {Notebook, Pages}.
+
+init_tab(Notebook,Title,Fun,FunArgs) ->
+ Panel = init_panel(Notebook,Fun,FunArgs),
+ true = wxNotebook:addPage(Notebook, Panel, Title),
+ Panel.
+
+init_panel(ParentWin, Fun, FunArgs) ->
+ Panel = wxScrolledWindow:new(ParentWin),
+ wxScrolledWindow:enableScrolling(Panel,true,true),
+ wxScrolledWindow:setScrollbars(Panel,1,1,0,0),
+ Sizer = wxBoxSizer:new(?wxHORIZONTAL),
+ Window = apply(Fun, [Panel | FunArgs]),
+ wxSizer:add(Sizer, Window, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1},
+ {border, 5}]),
+ wxPanel:setSizer(Panel, Sizer),
+ Panel.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Callbacks%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+handle_event(#wx{event=#wxClose{type=close_window}}, State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id=?wxID_CLOSE, event=#wxCommand{type=command_menu_selected}},
+ State) ->
+ {stop, normal, State};
+
+handle_event(Event, _State) ->
+ error({unhandled_event, Event}).
+
+handle_info(_Info, State) ->
+ %% io:format("~p: ~p, Handle info: ~p~n", [?MODULE, ?LINE, _Info]),
+ {noreply, State}.
+
+handle_call(Call, From, _State) ->
+ error({unhandled_call, Call, From}).
+
+handle_cast(Cast, _State) ->
+ error({unhandled_cast, Cast}).
+
+terminate(_Reason, #state{parent=Parent,id=Id,frame=Frame}) ->
+ wx_object:cast(Parent,{detail_win_closed, Id}),
+ case Frame of
+ undefined -> ok;
+ _ -> wxFrame:destroy(Frame)
+ end,
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+create_menus(MenuBar) ->
+ Menus = [{"File", [#create_menu{id=?wxID_CLOSE, text="Close"}]}],
+ observer_lib:create_menus(Menus, MenuBar, new_window).
diff --git a/lib/observer/src/cdv_dist_cb.erl b/lib/observer/src/cdv_dist_cb.erl
new file mode 100644
index 0000000000..3860324d6f
--- /dev/null
+++ b/lib/observer/src/cdv_dist_cb.erl
@@ -0,0 +1,91 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_dist_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_NAME, 0).
+-define(COL_TYPE, ?COL_NAME+1).
+-define(COL_CTRL, ?COL_TYPE+1).
+-define(COL_CH, ?COL_CTRL+1).
+-define(COL_CRE, ?COL_CH+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_CH);
+col_to_elem(?COL_NAME) -> #nod.name;
+col_to_elem(?COL_CH) -> #nod.channel;
+col_to_elem(?COL_CTRL) -> #nod.controller;
+col_to_elem(?COL_CRE) -> #nod.creation;
+col_to_elem(?COL_TYPE) -> #nod.conn_type.
+
+col_spec() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 300},
+ {"Connection type", ?wxLIST_FORMAT_LEFT, 130},
+ {"Controller", ?wxLIST_FORMAT_LEFT, 130},
+ {"Channel", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Creation", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:dist_info(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_CH,?COL_CTRL],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:node_info(Id) of
+ {ok,Info,TW} ->
+ Proplist = crashdump_viewer:to_proplist(record_info(fields,nod),Info),
+ Title = io_lib:format("~s (~s)",[Info#nod.name,Id]),
+ {ok,{Title,Proplist,TW}};
+ {error,not_found} ->
+ Info = "The node you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", name},
+ {"Type", conn_type},
+ {"Channel", channel},
+ {"Controller", {click,controller}},
+ {"Creation", creation},
+ {"Extra Info", error}]},
+ {scroll_boxes,
+ [{"Remote Links",1,{click,remote_links}},
+ {"Remote Monitors",1,{click,remote_mon}},
+ {"Remote Monitored By",1,{click,remote_mon_by}}]}].
diff --git a/lib/observer/src/cdv_ets_cb.erl b/lib/observer/src/cdv_ets_cb.erl
new file mode 100644
index 0000000000..2a5c170e58
--- /dev/null
+++ b/lib/observer/src/cdv_ets_cb.erl
@@ -0,0 +1,67 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_ets_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_NAME, ?COL_ID+1).
+-define(COL_SLOT, ?COL_NAME+1).
+-define(COL_OWNER, ?COL_SLOT+1).
+-define(COL_BUCK, ?COL_OWNER+1).
+-define(COL_OBJ, ?COL_BUCK+1).
+-define(COL_MEM, ?COL_OBJ+1).
+-define(COL_TYPE, ?COL_MEM+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #ets_table.id;
+col_to_elem(?COL_NAME) -> #ets_table.name;
+col_to_elem(?COL_SLOT) -> #ets_table.slot;
+col_to_elem(?COL_OWNER) -> #ets_table.pid;
+col_to_elem(?COL_TYPE) -> #ets_table.type;
+col_to_elem(?COL_BUCK) -> #ets_table.buckets;
+col_to_elem(?COL_OBJ) -> #ets_table.size;
+col_to_elem(?COL_MEM) -> #ets_table.memory.
+
+col_spec() ->
+ [{"Id", ?wxLIST_FORMAT_LEFT, 200},
+ {"Name", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Owner", ?wxLIST_FORMAT_CENTRE, 90},
+ {"Buckets", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Objects", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Type", ?wxLIST_FORMAT_LEFT, 50}
+ ].
+
+get_info(Owner) ->
+ {ok,Info,TW} = crashdump_viewer:ets_tables(Owner),
+ {Info,TW}.
+
+get_detail_cols(all) ->
+ {[?COL_OWNER],false};
+get_detail_cols(_) ->
+ {[],false}.
diff --git a/lib/observer/src/cdv_fun_cb.erl b/lib/observer/src/cdv_fun_cb.erl
new file mode 100644
index 0000000000..689ef0e3bb
--- /dev/null
+++ b/lib/observer/src/cdv_fun_cb.erl
@@ -0,0 +1,58 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_fun_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_MOD, 0).
+-define(COL_UNIQ, ?COL_MOD+1).
+-define(COL_INDEX, ?COL_UNIQ+1).
+-define(COL_ADDR, ?COL_INDEX+1).
+-define(COL_NADDR, ?COL_ADDR+1).
+-define(COL_REFC, ?COL_NADDR+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_MOD);
+col_to_elem(?COL_MOD) -> #fu.module;
+col_to_elem(?COL_UNIQ) -> #fu.uniq;
+col_to_elem(?COL_INDEX) -> #fu.index;
+col_to_elem(?COL_ADDR) -> #fu.address;
+col_to_elem(?COL_NADDR) -> #fu.native_address;
+col_to_elem(?COL_REFC) -> #fu.refc.
+
+col_spec() ->
+ [{"Module", ?wxLIST_FORMAT_LEFT, 200},
+ {"Uniq", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Index", ?wxLIST_FORMAT_RIGHT, 50},
+ {"Address", ?wxLIST_FORMAT_LEFT, 120},
+ {"Native Address", ?wxLIST_FORMAT_LEFT, 120},
+ {"Refc", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:funs(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_MOD],false}.
diff --git a/lib/observer/src/cdv_gen_cb.erl b/lib/observer/src/cdv_gen_cb.erl
new file mode 100644
index 0000000000..6be717d76d
--- /dev/null
+++ b/lib/observer/src/cdv_gen_cb.erl
@@ -0,0 +1,45 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_gen_cb).
+
+-export([get_info/0]).
+
+-include("crashdump_viewer.hrl").
+
+get_info() ->
+ {ok,Info,TW} = crashdump_viewer:general_info(),
+ Fields = info_fields(),
+ Proplist =
+ crashdump_viewer:to_proplist(record_info(fields,general_info),Info),
+ {Fields,Proplist,TW}.
+
+info_fields() ->
+ [{"General Information",
+ [{"Slogan",slogan},
+ {"Node name",node_name},
+ {"Crashdump created on",created},
+ {"System version",system_vsn},
+ {"Compiled",compile_time},
+ {"Taints",taints},
+ {"Memory allocated",{bytes,mem_tot}},
+ {"Memory maximum",{bytes,mem_max}},
+ {"Atoms",num_atoms},
+ {"Processes",num_procs},
+ {"ETS tables",num_ets},
+ {"Timers",num_timers},
+ {"Funs",num_fun}]}].
diff --git a/lib/observer/src/cdv_html_wx.erl b/lib/observer/src/cdv_html_wx.erl
new file mode 100644
index 0000000000..fe77a41f59
--- /dev/null
+++ b/lib/observer/src/cdv_html_wx.erl
@@ -0,0 +1,128 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_html_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {panel,
+ expand_table,
+ expand_wins=[]}).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Fun]) when is_function(Fun) ->
+ init([ParentWin, Fun()]);
+init([ParentWin, {expand,HtmlText,Tab}]) ->
+ HtmlWin = observer_lib:html_window(ParentWin),
+ wxHtmlWindow:setPage(HtmlWin,HtmlText),
+ {HtmlWin, #state{panel=HtmlWin,expand_table=Tab}};
+init([ParentWin, HtmlText]) ->
+ HtmlWin = observer_lib:html_window(ParentWin),
+ wxHtmlWindow:setPage(HtmlWin,HtmlText),
+ {HtmlWin, #state{panel=HtmlWin}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast({detail_win_closed, Id},#state{expand_wins=Opened0}=State) ->
+ Opened = lists:keydelete(Id, 1, Opened0),
+ {noreply, State#state{expand_wins=Opened}};
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxHtmlLink{type=command_html_link_clicked,
+ linkInfo=#wxHtmlLinkInfo{href=Target}}},
+ #state{expand_table=Tab}=State) ->
+ NewState=
+ case Target of
+ "#Binary?" ++ BinSpec ->
+ [{"offset",Off},{"size",Size},{"pos",Pos}] =
+ httpd:parse_query(BinSpec),
+ Id = {cdv, {list_to_integer(Off),
+ list_to_integer(Size),
+ list_to_integer(Pos)}},
+ expand(Id,cdv_bin_cb,State);
+ "#OBSBinary?" ++ BinSpec ->
+ [{"key1",Preview},{"key2",Size},{"key3",Hash}] =
+ httpd:parse_query(BinSpec),
+ Id = {obs, {Tab, {list_to_integer(Preview),
+ list_to_integer(Size),
+ list_to_integer(Hash)}}},
+ expand(Id,cdv_bin_cb,State);
+ "#Term?" ++ TermKeys ->
+ [{"key1",Key1},{"key2",Key2},{"key3",Key3}] =
+ httpd:parse_query(TermKeys),
+ Id = {cdv, {Tab,{list_to_integer(Key1),
+ list_to_integer(Key2),
+ list_to_integer(Key3)}}},
+ expand(Id,cdv_term_cb,State);
+ _ ->
+ cdv_virtual_list_wx:start_detail_win(Target),
+ State
+ end,
+ {noreply, NewState};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+expand(Id,Callback,#state{expand_wins=Opened0}=State) ->
+ Opened =
+ case lists:keyfind(Id,1,Opened0) of
+ false ->
+ EW = cdv_detail_wx:start_link(Id,State#state.panel,Callback),
+ wx_object:get_pid(EW) ! active,
+ [{Id,EW}|Opened0];
+ {_,EW} ->
+ wxFrame:raise(EW),
+ Opened0
+ end,
+ State#state{expand_wins=Opened}.
diff --git a/lib/observer/src/cdv_info_wx.erl b/lib/observer/src/cdv_info_wx.erl
new file mode 100644
index 0000000000..59ce0cabb1
--- /dev/null
+++ b/lib/observer/src/cdv_info_wx.erl
@@ -0,0 +1,128 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_info_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {panel,
+ sizer,
+ fpanel,
+ callback,
+ trunc_warn=[]
+ }).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Callback]) when is_atom(Callback) ->
+ {InfoFields,Info,TW} = Callback:get_info(),
+ {Panel,Sizer,FPanel} = create_box(ParentWin,InfoFields,Info),
+ {Panel,#state{panel=Panel,
+ sizer=Sizer,
+ fpanel=FPanel,
+ callback=Callback,
+ trunc_warn=TW}};
+
+init([ParentWin, {InfoFields,Info,TW}]) ->
+ {Panel,Sizer,FPanel} = create_box(ParentWin,InfoFields,Info),
+ {Panel, #state{panel=Panel,
+ sizer=Sizer,
+ fpanel=FPanel,
+ trunc_warn=TW}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From, #state{callback=Callback,panel=Panel,
+ sizer=Sizer,fpanel=FPanel} = State) ->
+ {InfoFields,Info,TW} = Callback:get_info(),
+ NewFPanel =
+ wx:batch(
+ fun() ->
+ wxWindow:destroy(FPanel),
+ FP = create_field_panel(Panel,Sizer,InfoFields,Info),
+ wxSizer:layout(Sizer),
+ FP
+ end),
+ {reply, ok, State#state{fpanel=NewFPanel,trunc_warn=TW}};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxMouse{type=left_down},userData=Target}, State) ->
+ cdv_virtual_list_wx:start_detail_win(Target),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj,event=#wxMouse{type=enter_window}},State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj,event=#wxMouse{type=leave_window}},State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+create_box(ParentWin,InfoFields,Info) ->
+ Panel = wxPanel:new(ParentWin),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ FPanel = create_field_panel(Panel,Sizer,InfoFields,Info),
+ wxPanel:setSizer(Panel, Sizer),
+ {Panel,Sizer,FPanel}.
+
+create_field_panel(Panel,Sizer,InfoFields,Info0) ->
+ Info = observer_lib:fill_info(InfoFields, Info0),
+ {FPanel, _FSizer, _Fields} = observer_lib:display_info(Panel,Info),
+ BorderFlags = ?wxLEFT bor ?wxRIGHT,
+ wxSizer:add(Sizer, FPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ FPanel.
diff --git a/lib/observer/src/cdv_int_tab_cb.erl b/lib/observer/src/cdv_int_tab_cb.erl
new file mode 100644
index 0000000000..31727391fe
--- /dev/null
+++ b/lib/observer/src/cdv_int_tab_cb.erl
@@ -0,0 +1,86 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_int_tab_cb).
+
+-export([get_info/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+get_info() ->
+ observer_lib:report_progress({ok,"Processing internal tables"}),
+ HashInfo = get_hash_info(),
+ observer_lib:report_progress({ok,33}),
+ IndexInfo = get_index_info(),
+ observer_lib:report_progress({ok,66}),
+ IntEtsInfo = get_internal_ets_info(),
+ observer_lib:report_progress({ok,100}),
+ [{"Hash Tables",cdv_table_wx,HashInfo},
+ {"Index Tables",cdv_table_wx,IndexInfo},
+ {"Internal ETS Tables",cdv_table_wx,IntEtsInfo}].
+
+%%%-----------------------------------------------------------------
+%%% Hash tables
+get_hash_info() ->
+ {ok,Info0,TW} = crashdump_viewer:hash_tables(),
+ Columns = hash_columns(),
+ Info = [crashdump_viewer:to_value_list(R) || R <- Info0],
+ {Columns,Info,TW}.
+
+hash_columns() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Size", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Used", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Objects",?wxLIST_FORMAT_RIGHT, 100},
+ {"Depth", ?wxLIST_FORMAT_RIGHT, 100}].
+
+%%%-----------------------------------------------------------------
+%%% Index tables
+get_index_info() ->
+ {ok,Info0,TW} = crashdump_viewer:index_tables(),
+ Columns = index_columns(),
+ Info = [crashdump_viewer:to_value_list(R) || R <- Info0],
+ {Columns,Info,TW}.
+
+index_columns() ->
+ [{"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Size", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Limit", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Used", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Rate", ?wxLIST_FORMAT_RIGHT, 100},
+ {"Entries",?wxLIST_FORMAT_RIGHT, 100}].
+
+%%%-----------------------------------------------------------------
+%%% Internal ets tables
+get_internal_ets_info() ->
+ {ok,Info0,TW} = crashdump_viewer:internal_ets_tables(),
+ Columns = int_ets_columns(),
+ Info = [begin
+ [_,_|Data] = crashdump_viewer:to_value_list(R), %skip pid and slot
+ [Desc|Data]
+ end || {Desc,R} <- Info0],
+ {Columns,Info,TW}.
+
+int_ets_columns() ->
+ [{"Description", ?wxLIST_FORMAT_LEFT, 170},
+ {"Id", ?wxLIST_FORMAT_LEFT, 80},
+ {"Name", ?wxLIST_FORMAT_LEFT, 80},
+ {"Type", ?wxLIST_FORMAT_LEFT, 80},
+ {"Buckets", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Objects", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80}].
diff --git a/lib/observer/src/cdv_mem_cb.erl b/lib/observer/src/cdv_mem_cb.erl
new file mode 100644
index 0000000000..2b0809df13
--- /dev/null
+++ b/lib/observer/src/cdv_mem_cb.erl
@@ -0,0 +1,84 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_mem_cb).
+
+-export([get_info/0]).
+
+-include("crashdump_viewer.hrl").
+-include_lib("wx/include/wx.hrl").
+
+get_info() ->
+ observer_lib:report_progress({ok,"Processing memory info"}),
+ MemInfo = get_mem_info(),
+ observer_lib:report_progress({ok,33}),
+ {AllocInfo,AllocTW} = get_alloc_info(),
+ observer_lib:report_progress({ok,66}),
+ AreaInfo = get_area_info(),
+ observer_lib:report_progress({ok,100}),
+ [{"Memory",cdv_info_wx,MemInfo}
+ | [{Title,cdv_table_wx,{Cols,Data,AllocTW}} ||
+ {Title,Cols,Data} <- AllocInfo]] ++
+ [{"Allocated Areas",cdv_table_wx,AreaInfo}].
+
+
+%%%-----------------------------------------------------------------
+%%% Memory page
+get_mem_info() ->
+ {ok,Info,TW} = crashdump_viewer:memory(),
+ {[{"Memory Information",gen_mem_info_fields(Info)}],Info,TW}.
+
+gen_mem_info_fields([{Key,_}|T]) ->
+ [{upper(atom_to_list(Key)),{bytes,Key}}|gen_mem_info_fields(T)];
+gen_mem_info_fields([]) ->
+ [].
+
+upper(Key) ->
+ string:join([string:to_upper([H]) ++ T ||
+ [H|T] <- string:tokens(Key,"_")]," ").
+
+
+%%%-----------------------------------------------------------------
+%%% Allocated areas page
+get_area_info() ->
+ {ok,Info0,TW} = crashdump_viewer:allocated_areas(),
+ Info = [tuple_to_list(R) || R <- Info0],
+ {area_columns(),Info,TW}.
+
+area_columns() ->
+ [{"", ?wxLIST_FORMAT_LEFT, 150},
+ {"Allocated (bytes)",?wxLIST_FORMAT_RIGHT, 150},
+ {"Used (bytes)", ?wxLIST_FORMAT_RIGHT, 150}].
+
+%%%-----------------------------------------------------------------
+%%% Allocator page
+get_alloc_info() ->
+ {ok,Info,TW} = crashdump_viewer:allocator_info(),
+ {fix_alloc(Info),TW}.
+
+fix_alloc([{Title,Columns,Data}|Tables]) ->
+ [{Title,alloc_columns(Columns),
+ [[Key|Values] || {Key,Values} <- Data]} |
+ fix_alloc(Tables)];
+fix_alloc([{Title,[{_,V}|_]=Data}|Tables]) ->
+ fix_alloc([{Title,lists:duplicate(length(V),[]),Data}|Tables]);
+fix_alloc([]) ->
+ [].
+
+alloc_columns(Columns) ->
+ [{"", ?wxLIST_FORMAT_LEFT, 180} |
+ [{Column, ?wxLIST_FORMAT_RIGHT, 140} || Column <- Columns]].
diff --git a/lib/observer/src/cdv_mod_cb.erl b/lib/observer/src/cdv_mod_cb.erl
new file mode 100644
index 0000000000..e829ff4fca
--- /dev/null
+++ b/lib/observer/src/cdv_mod_cb.erl
@@ -0,0 +1,102 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_mod_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(COL_CUR, ?COL_ID+1).
+-define(COL_OLD, ?COL_CUR+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #loaded_mod.mod;
+col_to_elem(?COL_CUR) -> #loaded_mod.current_size;
+col_to_elem(?COL_OLD) -> #loaded_mod.old_size.
+
+col_spec() ->
+ [{"Module", ?wxLIST_FORMAT_LEFT, 300},
+ {"Current size", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Old size", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:loaded_modules(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ {ok,Info,TW} = crashdump_viewer:loaded_mod_details(Id),
+ Proplist = crashdump_viewer:to_proplist(record_info(fields,loaded_mod),Info),
+ Title = io_lib:format("~s",[Info#loaded_mod.mod]),
+ {ok,{Title,Proplist,TW}}.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2},
+ {"Current Attributes", fun init_curr_attr_page/2},
+ {"Current Compilation Info", fun init_curr_comp_page/2},
+ {"Old Attributes", fun init_old_attr_page/2},
+ {"Old Compilation Info", fun init_old_comp_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+init_curr_attr_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(current_attrib,Info)).
+
+init_curr_comp_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(current_comp_info,Info)).
+
+init_old_attr_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(old_attrib,Info)).
+
+init_old_comp_page(Parent, Info) ->
+ init_info_page(Parent, proplists:get_value(old_comp_info,Info)).
+
+init_info_page(Parent, undefined) ->
+ init_info_page(Parent, "");
+init_info_page(Parent, String) ->
+ cdv_html_wx:start_link(Parent,observer_html_lib:plain_page(String)).
+
+format({Bin,q}) when is_binary(Bin) ->
+ [$'|binary_to_list(Bin)];
+format({Bin,nq}) when is_binary(Bin) ->
+ lists:flatten(io_lib:format("~ts",[Bin]));
+format(D) ->
+ D.
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", mod},
+ {"Current Size", current_size},
+ {"Old Size", old_size}]}].
diff --git a/lib/observer/src/cdv_multi_wx.erl b/lib/observer/src/cdv_multi_wx.erl
new file mode 100644
index 0000000000..75c7f48fc2
--- /dev/null
+++ b/lib/observer/src/cdv_multi_wx.erl
@@ -0,0 +1,188 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_multi_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {main_panel,
+ main_sizer,
+ menu,
+ menu_sizer,
+ callback,
+ pages,
+ dyn_panel,
+ dyn_sizer,
+ dyn_page
+ }).
+
+start_link(Notebook, Info) ->
+ wx_object:start_link(?MODULE, [Notebook, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([Notebook, Callback]) when is_atom(Callback) ->
+ Pages = Callback:get_info(),
+ {MainPanel,State0} = init([Notebook, Pages]),
+ {MainPanel,State0#state{callback=Callback}};
+init([Notebook, Pages]) ->
+ MainPanel = wxPanel:new(Notebook),
+ Sizer = wxBoxSizer:new(?wxHORIZONTAL),
+ LeftMenuSizer = wxStaticBoxSizer:new(?wxVERTICAL,MainPanel,
+ [{label,"Please select"}]),
+ LeftMenu = wxListBox:new(MainPanel,?wxID_ANY,
+ [{style,?wxLB_SINGLE},
+ {choices,[T || {T,_,_} <- Pages]}]),
+ wxListBox:setSelection(LeftMenu,0),
+ wxListBox:connect(LeftMenu, command_listbox_selected),
+ wxSizer:add(LeftMenuSizer,LeftMenu,[{flag,?wxEXPAND},{proportion,2}]),
+
+ DynPanel = wxScrolledWindow:new(MainPanel),
+ wxScrolledWindow:enableScrolling(DynPanel,true,true),
+ wxScrolledWindow:setScrollbars(DynPanel,1,1,0,0),
+
+ BorderFlags = ?wxLEFT bor ?wxRIGHT,
+ wxSizer:add(Sizer, LeftMenuSizer,
+ [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 0}, {border, 5}]),
+ wxSizer:add(Sizer, DynPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
+ {proportion, 1}, {border, 5}]),
+ wxPanel:setSizer(MainPanel, Sizer),
+
+ State = load_dyn_page(#state{main_panel=MainPanel,
+ main_sizer=Sizer,
+ menu=LeftMenu,
+ menu_sizer=LeftMenuSizer,
+ pages=Pages,
+ dyn_panel=DynPanel
+ }),
+ {MainPanel, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ NewState =
+ wx:batch(
+ fun() ->
+ update_dyn_page(State)
+ end),
+ {noreply, NewState};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From, State) ->
+ NewState =
+ wx:batch(
+ fun() ->
+ update_left_menu(State)
+ end),
+ {reply, ok, NewState};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p:~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p:~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(#wx{event=#wxCommand{type=command_listbox_selected,
+ cmdString=[]}},
+ State) ->
+ %% For some reason, the listbox sometimes gets an "unselect"
+ %% command like this during termination. Ignore!
+ {noreply, State};
+
+handle_event(#wx{event=#wxCommand{type=command_listbox_selected,
+ cmdString=_DynName}},
+ State) ->
+ NewState =
+ wx:batch(fun() ->
+ update_dyn_page(State)
+ end),
+ {noreply,NewState};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Internal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+update_left_menu(#state{main_panel=Panel,
+ callback=Callback,
+ menu=OldMenu,
+ menu_sizer=MenuSizer} = State) ->
+ Pages = Callback:get_info(),
+ wxListBox:disconnect(OldMenu),
+ wxWindow:destroy(OldMenu),
+ NewMenu = wxListBox:new(Panel,?wxID_ANY,
+ [{style,?wxLB_SINGLE},
+ {choices,[T || {T,_,_} <- Pages]}]),
+ wxListBox:setSelection(NewMenu,0),
+ wxListBox:connect(NewMenu, command_listbox_selected),
+ wxSizer:add(MenuSizer,NewMenu,[{flag,?wxEXPAND},{proportion,2}]),
+ wxSizer:layout(MenuSizer),
+ State#state{pages=Pages,menu=NewMenu}.
+
+update_dyn_page(#state{dyn_page=undefined} = State) ->
+ load_dyn_page(State);
+update_dyn_page(#state{dyn_page=OldDynPage,
+ dyn_sizer=OldDynSizer} = State) ->
+ wxSizer:detach(OldDynSizer,OldDynPage),
+ wxWindow:destroy(OldDynPage),
+ load_dyn_page(State).
+
+load_dyn_page(#state{main_sizer=MainSizer,
+ dyn_panel=DynPanel,
+ menu=Menu,
+ pages=Pages} = State) ->
+ %% Freeze and thaw causes a hang (and is not needed) on 2.9 and higher
+ DoFreeze = [?wxMAJOR_VERSION,?wxMINOR_VERSION] < [2,9],
+ DoFreeze andalso wxWindow:freeze(DynPanel),
+ Name = wxListBox:getStringSelection(Menu),
+ {Page,Sizer} = load_dyn_page(DynPanel,Name,Pages),
+ wxSizer:layout(MainSizer),
+ DoFreeze andalso wxWindow:thaw(DynPanel),
+ wx_object:get_pid(Page) ! active,
+ State#state{dyn_page=Page,dyn_sizer=Sizer}.
+
+load_dyn_page(Panel,Name,Pages) ->
+ Sizer = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label,Name}]),
+
+ {_,Callback,Info} = lists:keyfind(Name,1,Pages),
+ DynPage = Callback:start_link(Panel,Info),
+
+ wxSizer:add(Sizer,DynPage,[{flag, ?wxEXPAND}, {proportion, 1}]),
+ wxPanel:setSizerAndFit(Panel,Sizer,[{deleteOld,true}]),
+ {DynPage,Sizer}.
diff --git a/lib/observer/src/cdv_port_cb.erl b/lib/observer/src/cdv_port_cb.erl
new file mode 100644
index 0000000000..08488d3e34
--- /dev/null
+++ b/lib/observer/src/cdv_port_cb.erl
@@ -0,0 +1,103 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_port_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0,
+ format/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_ID, 0).
+-define(COL_CONN, ?COL_ID+1).
+-define(COL_NAME, ?COL_CONN+1).
+-define(COL_CTRL, ?COL_NAME+1).
+-define(COL_SLOT, ?COL_CTRL+1).
+
+
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #port.id;
+col_to_elem(?COL_CONN) -> #port.connected;
+col_to_elem(?COL_NAME) -> #port.name;
+col_to_elem(?COL_CTRL) -> #port.controls;
+col_to_elem(?COL_SLOT) -> #port.slot.
+
+col_spec() ->
+ [{"Id", ?wxLIST_FORMAT_LEFT, 100},
+ {"Connected", ?wxLIST_FORMAT_LEFT, 120},
+ {"Name", ?wxLIST_FORMAT_LEFT, 150},
+ {"Controls", ?wxLIST_FORMAT_LEFT, 200},
+ {"Slot", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:ports(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID,?COL_CONN],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:port(Id) of
+ {ok,Info,TW} ->
+ Proplist =
+ crashdump_viewer:to_proplist(record_info(fields,port),Info),
+ {ok,{Id,Proplist,TW}};
+ {error,{other_node,NodeId}} ->
+ Info = "The port you are searching for was residing on "
+ "a remote node. No port information is available. "
+ "Show information about the remote node?",
+ Fun = fun() -> cdv_virtual_list_wx:start_detail_win(NodeId) end,
+ {yes_no, Info, Fun};
+ {error,not_found} ->
+ Info = "The port you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+format({I1,I2}) ->
+ "#Port<"++integer_to_list(I1) ++ "." ++ integer_to_list(I2) ++ ">";
+format(D) ->
+ D.
+
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Name", name},
+ {"Connected", {click,connected}},
+ {"Slot", slot},
+ {"Controls", controls}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",1,{click,monitors}}]}].
diff --git a/lib/observer/src/cdv_proc_cb.erl b/lib/observer/src/cdv_proc_cb.erl
new file mode 100644
index 0000000000..dfc2df9c4c
--- /dev/null
+++ b/lib/observer/src/cdv_proc_cb.erl
@@ -0,0 +1,156 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_proc_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1,
+ get_details/1,
+ detail_pages/0]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Columns
+-define(COL_ID, 0).
+-define(COL_NAME, ?COL_ID+1).
+-define(COL_STATE,?COL_NAME+1).
+-define(COL_REDS, ?COL_STATE+1).
+-define(COL_MEM, ?COL_REDS+1).
+-define(COL_MSG, ?COL_MEM+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_ID);
+col_to_elem(?COL_ID) -> #proc.pid;
+col_to_elem(?COL_NAME) -> #proc.name;
+col_to_elem(?COL_STATE) -> #proc.state;
+col_to_elem(?COL_MEM) -> #proc.memory;
+col_to_elem(?COL_REDS) -> #proc.reds;
+col_to_elem(?COL_MSG) -> #proc.msg_q_len.
+
+col_spec() ->
+ [{"Pid", ?wxLIST_FORMAT_CENTRE, 120},
+ {"Name or Initial Func", ?wxLIST_FORMAT_LEFT, 250},
+ {"State", ?wxLIST_FORMAT_LEFT, 100},
+ {"Reds", ?wxLIST_FORMAT_RIGHT, 80},
+ {"Memory", ?wxLIST_FORMAT_RIGHT, 80},
+ {"MsgQ", ?wxLIST_FORMAT_RIGHT, 50}].
+
+get_info(_) ->
+ {ok,Info,TW} = crashdump_viewer:processes(),
+ {Info,TW}.
+
+get_detail_cols(_) ->
+ {[?COL_ID],true}.
+
+%% Callbacks for cdv_detail_wx
+get_details(Id) ->
+ case crashdump_viewer:proc_details(Id) of
+ {ok,Info,TW} ->
+ %% The following table is used by observer_html_lib
+ %% for storing expanded terms and it is read by
+ %% cdv_html_wx when a link to an expandable term is clicked.
+ Tab = ets:new(cdv_expand,[set,public]),
+ Proplist0 =
+ crashdump_viewer:to_proplist(record_info(fields,proc),Info),
+ Proplist = [{expand_table,Tab}|Proplist0],
+ Title = io_lib:format("~s (~s)",[Info#proc.name, Id]),
+ {ok,{Title,Proplist,TW}};
+ {error,{other_node,NodeId}} ->
+ Info = "The process you are searching for was residing on "
+ "a remote node. No process information is available. "
+ "Show information about the remote node?",
+ Fun = fun() -> cdv_virtual_list_wx:start_detail_win(NodeId) end,
+ {yes_no, Info, Fun};
+ {error,not_found} ->
+ Info = "The process you are searching for could not be found.",
+ {info,Info}
+ end.
+
+detail_pages() ->
+ [{"General Information", fun init_gen_page/2},
+ {"Messages", fun init_message_page/2},
+ {"Dictionary", fun init_dict_page/2},
+ {"Stack Dump", fun init_stack_page/2},
+ {"ETS tables", fun init_ets_page/2},
+ {"Timers", fun init_timer_page/2}].
+
+init_gen_page(Parent, Info) ->
+ Fields = info_fields(),
+ cdv_info_wx:start_link(Parent,{Fields,Info,[]}).
+
+init_message_page(Parent, Info) ->
+ init_memory_page(Parent, Info, msg_q, "MsgQueue").
+
+init_dict_page(Parent, Info) ->
+ init_memory_page(Parent, Info, dict, "Dictionary").
+
+init_stack_page(Parent, Info) ->
+ init_memory_page(Parent, Info, stack_dump, "StackDump").
+
+init_memory_page(Parent, Info0, Tag, Heading) ->
+ Info = proplists:get_value(Tag,Info0),
+ Tab = proplists:get_value(expand_table,Info0),
+ Html = observer_html_lib:expandable_term(Heading,Info,Tab),
+ cdv_html_wx:start_link(Parent,{expand,Html,Tab}).
+
+init_ets_page(Parent, Info) ->
+ Pid = proplists:get_value(pid,Info),
+ cdv_virtual_list_wx:start_link(Parent, cdv_ets_cb, Pid).
+
+init_timer_page(Parent, Info) ->
+ Pid = proplists:get_value(pid,Info),
+ cdv_virtual_list_wx:start_link(Parent, cdv_timer_cb, Pid).
+
+%%%-----------------------------------------------------------------
+%%% Internal
+info_fields() ->
+ [{"Overview",
+ [{"Initial Call", init_func},
+ {dynamic, current_func},
+ {"Registered Name", name},
+ {"Status", state},
+ {"Started", start_time},
+ {"Parent", {click,parent}},
+ {"Message Queue Len",msg_q_len},
+ {"Reductions", reds},
+ {"Program counter", prog_count},
+ {"Continuation pointer",cp},
+ {"Arity",arity}]},
+ {scroll_boxes,
+ [{"Last Calls",1,{plain,last_calls}}]},
+ {scroll_boxes,
+ [{"Links",1,{click,links}},
+ {"Monitors",2,{click,monitors}},
+ {"Monitored By",2,{click,mon_by}}]},
+ {"Memory and Garbage Collection",
+ [{"Memory", memory},
+ {"Stack and Heap", stack_heap},
+ {"Old Heap", old_heap},
+ {"Heap Unused", heap_unused},
+ {"Old Heap Unused", old_heap_unused},
+ {"Number of Heap Fragements", num_heap_frag},
+ {"Heap Fragment Data",heap_frag_data},
+ {"New Heap Start", new_heap_start},
+ {"New Heap Top", new_heap_top},
+ {"Stack Top", stack_top},
+ {"Stack End", stack_end},
+ {"Old Heap Start", old_heap_start},
+ {"Old Heap Top", old_heap_top},
+ {"Old Heap End", old_heap_end}]}].
diff --git a/lib/observer/src/cdv_table_wx.erl b/lib/observer/src/cdv_table_wx.erl
new file mode 100644
index 0000000000..f8943db17d
--- /dev/null
+++ b/lib/observer/src/cdv_table_wx.erl
@@ -0,0 +1,106 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_table_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2]).
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Records
+-record(state,
+ {trunc_warn=[]}).
+
+start_link(ParentWin, Info) ->
+ wx_object:start_link(?MODULE, [ParentWin, Info], []).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init([ParentWin, Callback]) when is_atom(Callback) ->
+ {ok,TableInfo} = Callback:get_info(),
+ init([ParentWin, TableInfo]);
+
+init([ParentWin, {ColumnSpec,Info,TW}]) ->
+ Style0 = ?wxLC_REPORT bor ?wxLC_SINGLE_SEL bor ?wxLC_HRULES bor ?wxLC_VRULES,
+ Style =
+ case lists:all(fun({"",_,_}) -> true; (_) -> false end, ColumnSpec) of
+ true -> Style0 bor ?wxLC_NO_HEADER;
+ false -> Style0
+ end,
+ Grid = wxListCtrl:new(ParentWin, [{style, Style}]),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(Grid, Col, Li),
+ wxListCtrl:setColumnWidth(Grid, Col, DefSize),
+ Col + 1
+ end,
+ lists:foldl(AddListEntry, 0, ColumnSpec),
+ wxListItem:destroy(Li),
+ Insert = fun(RowData, Row) ->
+ wxListCtrl:insertItem(Grid, Row, ""),
+ set_items(Grid,Row,RowData,0),
+ Row + 1
+ end,
+ lists:foldl(Insert, 0, Info),
+ {Grid, #state{trunc_warn=TW}}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p: Unhandled info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(Msg, _From, State) ->
+ io:format("~p~p: Unhandled Call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast(Msg, State) ->
+ io:format("~p~p: Unhandled cast ~p~n",[?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+handle_event(Event, State) ->
+ io:format("~p:~p: Unhandled event ~p\n", [?MODULE,?LINE,Event]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%% Internal %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+set_items(Grid,Row,[Col|Cols],ColN) ->
+ Str = case Col of
+ undefined -> "";
+ _ -> observer_lib:to_str(Col)
+ end,
+ wxListCtrl:setItem(Grid, Row, ColN, Str),
+ set_items(Grid,Row,Cols,ColN+1);
+set_items(_,_,[],_) ->
+ ok.
diff --git a/lib/observer/src/cdv_term_cb.erl b/lib/observer/src/cdv_term_cb.erl
new file mode 100644
index 0000000000..6426cc0803
--- /dev/null
+++ b/lib/observer/src/cdv_term_cb.erl
@@ -0,0 +1,75 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_term_cb).
+
+-export([get_details/1,
+ detail_pages/0]).
+
+%% Callbacks for cdv_detail_wx
+get_details({_, {T,Key}}) ->
+ [{Key,Term}] = ets:lookup(T,Key),
+ {ok,{"Expanded Term", [Term, T], []}}.
+
+detail_pages() ->
+ [{"Term", fun init_term_page/2}].
+
+init_term_page(ParentWin, [Term, Tab]) ->
+ Expanded = expand(Term, true),
+ BinSaved = expand(Term, Tab),
+ cdv_multi_wx:start_link(
+ ParentWin,
+ [{"Format \~p",cdv_html_wx,format_term_fun("~p",BinSaved,Tab)},
+ {"Format \~tp",cdv_html_wx,format_term_fun("~tp",BinSaved,Tab)},
+ {"Format \~w",cdv_html_wx,format_term_fun("~w",BinSaved,Tab)},
+ {"Format \~s",cdv_html_wx,format_term_fun("~s",Expanded,Tab)},
+ {"Format \~ts",cdv_html_wx,format_term_fun("~ts",Expanded,Tab)}]).
+
+format_term_fun(Format,Term,Tab) ->
+ fun() ->
+ try io_lib:format(Format,[Term]) of
+ Str -> {expand, plain_html(Str), Tab}
+ catch error:badarg ->
+ Warning = "This term can not be formatted with " ++ Format,
+ observer_html_lib:warning(Warning)
+ end
+ end.
+
+plain_html(Text) ->
+ observer_html_lib:plain_page(Text).
+
+expand(['#CDVBin',Offset,Size,Pos], true) ->
+ {ok,Bin} = crashdump_viewer:expand_binary({Offset,Size,Pos}),
+ Bin;
+expand(Bin, Tab) when is_binary(Bin), not is_boolean(Tab) ->
+ <<Preview:80, _/binary>> = Bin,
+ Size = byte_size(Bin),
+ Hash = erlang:phash2(Bin),
+ Key = {Preview, Size, Hash},
+ ets:insert(Tab, {Key,Bin}),
+ ['#OBSBin',Preview,Size,Hash];
+expand([H|T], Expand) ->
+ case expand(T, Expand) of
+ ET when is_list(ET) ->
+ [expand(H, Expand)|ET];
+ ET -> % The tail is an expanded binary - cannot append with |
+ [expand(H, Expand),ET]
+ end;
+expand(Tuple, Expand) when is_tuple(Tuple) ->
+ list_to_tuple(expand(tuple_to_list(Tuple), Expand));
+expand(Term, _) ->
+ Term.
diff --git a/lib/observer/src/cdv_timer_cb.erl b/lib/observer/src/cdv_timer_cb.erl
new file mode 100644
index 0000000000..9cdbfa05a9
--- /dev/null
+++ b/lib/observer/src/cdv_timer_cb.erl
@@ -0,0 +1,51 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_timer_cb).
+
+-export([col_to_elem/1,
+ col_spec/0,
+ get_info/1,
+ get_detail_cols/1]).
+
+-include_lib("wx/include/wx.hrl").
+-include("crashdump_viewer.hrl").
+
+%% Defines
+-define(COL_OWNER, 0).
+-define(COL_MSG, ?COL_OWNER+1).
+-define(COL_TIME, ?COL_MSG+1).
+
+%% Callbacks for cdv_virtual_list_wx
+col_to_elem(id) -> col_to_elem(?COL_OWNER);
+col_to_elem(?COL_OWNER) -> #timer.pid;
+col_to_elem(?COL_MSG) -> #timer.msg;
+col_to_elem(?COL_TIME) -> #timer.time.
+
+col_spec() ->
+ [{"Owner", ?wxLIST_FORMAT_LEFT, 110},
+ {"Message", ?wxLIST_FORMAT_LEFT, 400},
+ {"Time left (ms)", ?wxLIST_FORMAT_RIGHT, 80}].
+
+get_info(Owner) ->
+ {ok,Info,TW} = crashdump_viewer:timers(Owner),
+ {Info,TW}.
+
+get_detail_cols(all) ->
+ {[?COL_OWNER],false};
+get_detail_cols(_) ->
+ {[],false}.
diff --git a/lib/observer/src/cdv_virtual_list_wx.erl b/lib/observer/src/cdv_virtual_list_wx.erl
new file mode 100644
index 0000000000..c5a7d9a2e5
--- /dev/null
+++ b/lib/observer/src/cdv_virtual_list_wx.erl
@@ -0,0 +1,414 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_virtual_list_wx).
+
+-behaviour(wx_object).
+
+-export([start_link/2, start_link/3, start_detail_win/1]).
+
+%% wx_object callbacks
+-export([init/1, handle_info/2, terminate/2, code_change/3, handle_call/3,
+ handle_event/2, handle_cast/2]).
+
+-include_lib("wx/include/wx.hrl").
+-include("observer_defs.hrl").
+
+%% Defines
+-define(COL_ID, 0).
+-define(ID_DETAILS, 202).
+
+%% Records
+
+-record(sort,
+ {
+ sort_key,
+ sort_incr=true
+ }).
+
+-record(holder, {parent,
+ info,
+ last_row,
+ sort,
+ attrs,
+ callback
+ }).
+
+-record(state, {grid,
+ panel,
+ detail_wins=[],
+ holder,
+ callback,
+ trunc_warn=[],
+ menu_cols=[], % columns to show in right click menu
+ menu_items=[]}). % right click menu items for the selected row
+
+start_link(ParentWin, Callback) ->
+ wx_object:start_link({local,Callback},?MODULE,
+ [ParentWin, Callback, all], []).
+
+start_link(ParentWin, Callback, Owner) ->
+ wx_object:start_link(?MODULE, [ParentWin, Callback, Owner], []).
+
+start_detail_win(Id) ->
+ Callback =
+ case Id of
+ "<"++_ ->
+ cdv_proc_cb;
+ "#Port"++_ ->
+ cdv_port_cb;
+ _ ->
+ case catch list_to_integer(Id) of
+ NodeId when is_integer(NodeId) ->
+ cdv_dist_cb;
+ _ ->
+ cdv_mod_cb
+ end
+ end,
+ start_detail_win(Callback,Id).
+start_detail_win(Callback,Id) ->
+ wx_object:cast(Callback,{start_detail_win,Id}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+init([ParentWin, Callback, Owner]) ->
+ {Holder,TW} = spawn_table_holder(Callback, Owner),
+ Panel = wxPanel:new(ParentWin),
+ {Grid,MenuCols} = create_list_box(Panel, Holder, Callback, Owner),
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 1},
+ {border,4}]),
+
+ wxWindow:setSizer(Panel, Sizer),
+
+ State = #state{grid=Grid,
+ panel=Panel,
+ holder=Holder,
+ callback=Callback,
+ trunc_warn=TW,
+ menu_cols=MenuCols
+ },
+ {Panel, State}.
+
+%% UI-creation
+
+create_list_box(Panel, Holder, Callback, Owner) ->
+ Style =
+ ?wxLC_SINGLE_SEL bor ?wxLC_REPORT bor ?wxLC_VIRTUAL bor
+ ?wxLC_HRULES bor ?wxHSCROLL bor ?wxVSCROLL,
+ ListCtrl = wxListCtrl:new(Panel, [{style, Style},
+ {onGetItemText,
+ fun(_, Row, Col) ->
+ call(Holder, {get_row, self(), Row, Col})
+ end},
+ {onGetItemAttr,
+ fun(_, Item) ->
+ call(Holder, {get_attr, self(), Item})
+ end}
+ ]),
+ Li = wxListItem:new(),
+ AddListEntry = fun({Name, Align, DefSize}, Col) ->
+ wxListItem:setText(Li, Name),
+ wxListItem:setAlign(Li, Align),
+ wxListCtrl:insertColumn(ListCtrl, Col, Li),
+ wxListCtrl:setColumnWidth(ListCtrl, Col, DefSize),
+ Col + 1
+ end,
+ ListItems = Callback:col_spec(),
+ lists:foldl(AddListEntry, 0, ListItems),
+ wxListItem:destroy(Li),
+
+ wxListCtrl:setItemCount(ListCtrl, 0),
+ wxListCtrl:connect(ListCtrl, size, [{skip, true}]),
+ wxListCtrl:connect(ListCtrl, command_list_col_click),
+
+
+ %% If detail pages can be opened from this list - catch double
+ %% click and right click
+ DetailCols =
+ case catch Callback:get_detail_cols(Owner) of
+ {DC,DoubleClick} when is_list(DC), DC=/=[] ->
+ wxListCtrl:connect(ListCtrl, command_list_item_right_click),
+ if DoubleClick ->
+ wxListCtrl:connect(ListCtrl, command_list_item_activated);
+ true ->
+ ok
+ end,
+ DC;
+ _ ->
+ []
+ end,
+
+ {ListCtrl,DetailCols}.
+
+do_start_detail_win(undefined, State) ->
+ State;
+do_start_detail_win(Id, #state{panel=Panel,detail_wins=Opened,
+ callback=Callback}=State) ->
+ NewOpened =
+ case lists:keyfind(Id, 1, Opened) of
+ false ->
+ case cdv_detail_wx:start_link(Id, Panel, Callback) of
+ {error, _} ->
+ Opened;
+ IW ->
+ [{Id, IW} | Opened]
+ end;
+ {_, IW} ->
+ wxFrame:raise(IW),
+ Opened
+ end,
+ State#state{detail_wins=NewOpened}.
+
+call(Holder, What) when is_atom(Holder) ->
+ call(whereis(Holder), What);
+call(Holder, What) when is_pid(Holder) ->
+ Ref = erlang:monitor(process, Holder),
+ Holder ! What,
+ receive
+ {'DOWN', Ref, _, _, _} -> "";
+ {Holder, Res} ->
+ erlang:demonitor(Ref),
+ Res
+ after 5000 ->
+ io:format("Hanging call ~p~n",[What]),
+ ""
+ end;
+call(_,_) ->
+ "".
+
+
+%%%%%%%%%%%%%%%%%%%%%%% Callbacks %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_info({holder_updated, Count}, State=#state{grid=Grid}) ->
+ wxListCtrl:setItemCount(Grid, Count),
+ Count > 0 andalso wxListCtrl:refreshItems(Grid, 0, Count-1),
+ {noreply, State};
+
+handle_info(active, State) ->
+ cdv_wx:set_status(State#state.trunc_warn),
+ {noreply, State};
+
+handle_info(Info, State) ->
+ io:format("~p:~p, Unexpected info: ~p~n", [?MODULE, ?LINE, Info]),
+ {noreply, State}.
+
+terminate(_Reason, #state{holder=Holder}) ->
+ Holder ! stop,
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+handle_call(new_dump, _From,
+ #state{grid=Grid,detail_wins=Opened,
+ holder=Holder,callback=Callback}=State) ->
+ lists:foreach(fun({_Id, IW}) -> wxFrame:destroy(IW) end, Opened),
+ wxListCtrl:deleteAllItems(Grid),
+ Ref = erlang:monitor(process,Holder),
+ Holder ! stop,
+ receive {'DOWN',Ref,_,_,_} -> ok end,
+ {NewHolder,TW} = spawn_table_holder(Callback, all),
+ {reply, ok, State#state{detail_wins=[],holder=NewHolder,trunc_warn=TW}};
+
+handle_call(Msg, _From, State) ->
+ io:format("~p:~p: Unhandled call ~p~n",[?MODULE, ?LINE, Msg]),
+ {reply, ok, State}.
+
+handle_cast({start_detail_win,Id}, State) ->
+ State2 = do_start_detail_win(Id, State),
+ {noreply, State2};
+
+handle_cast({detail_win_closed, Id},#state{detail_wins=Opened}=State) ->
+ Opened2 = lists:keydelete(Id, 1, Opened),
+ {noreply, State#state{detail_wins=Opened2}};
+
+handle_cast(Msg, State) ->
+ io:format("~p:~p: Unhandled cast ~p~n", [?MODULE, ?LINE, Msg]),
+ {noreply, State}.
+
+%%%%%%%%%%%%%%%%%%%%LOOP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+handle_event(#wx{id=MenuId,
+ event=#wxCommand{type = command_menu_selected}},
+ #state{menu_items=MenuItems} = State) ->
+ case lists:keyfind(MenuId,1,MenuItems) of
+ {MenuId,Id} ->
+ start_detail_win(Id);
+ false ->
+ ok
+ end,
+ {noreply, State};
+
+handle_event(#wx{event=#wxSize{size={W,_}}},
+ #state{grid=Grid}=State) ->
+ observer_lib:set_listctrl_col_size(Grid, W),
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_right_click,
+ itemIndex=Row}},
+ #state{panel=Panel, holder=Holder, menu_cols=MenuCols} = State) ->
+ Menu = wxMenu:new(),
+ MenuItems =
+ lists:flatmap(
+ fun(Col) ->
+ MenuId = ?ID_DETAILS + Col,
+ ColText = call(Holder, {get_row, self(), Row, Col}),
+ case ColText of
+ "[]" -> [];
+ _ ->
+ What =
+ case catch list_to_integer(ColText) of
+ NodeId when is_integer(NodeId) ->
+ "node " ++ ColText;
+ _ ->
+ ColText
+ end,
+ Text = "Properties for " ++ What,
+ wxMenu:append(Menu, MenuId, Text),
+ [{MenuId,ColText}]
+ end
+ end,
+ MenuCols),
+ wxWindow:popupMenu(Panel, Menu),
+ wxMenu:destroy(Menu),
+ {noreply,State#state{menu_items=MenuItems}};
+
+handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
+ #state{holder=Holder}=State) ->
+ Holder ! {change_sort, Col},
+ {noreply, State};
+
+handle_event(#wx{event=#wxList{type=command_list_item_activated,
+ itemIndex=Row}},
+ #state{holder=Holder} = State) ->
+ Id = call(Holder, {get_row, self(), Row, id}),
+ start_detail_win(Id),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ io:format("~p:~p: handle event ~p\n", [?MODULE, ?LINE, Event]),
+ {noreply, State}.
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%TABLE HOLDER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+spawn_table_holder(Callback, Owner) ->
+ {Info,TW} = Callback:get_info(Owner),
+ Attrs = observer_lib:create_attrs(),
+ Parent = self(),
+ Holder =
+ case Owner of
+ all ->
+ Name = list_to_atom(atom_to_list(Callback) ++ "__holder"),
+ spawn_link(
+ fun() ->
+ register(Name,self()),
+ init_table_holder(Parent, Attrs, Callback, Info)
+ end),
+ Name;
+ _ ->
+ spawn_link(
+ fun() ->
+ init_table_holder(Parent, Attrs, Callback, Info)
+ end)
+ end,
+ {Holder,TW}.
+
+init_table_holder(Parent, Attrs, Callback, InfoList0) ->
+ Sort = #sort{sort_key=Callback:col_to_elem(id)},
+ {_Sort, InfoList} = do_sort(Sort,InfoList0),
+ Info = array:from_list(InfoList),
+ NRows = array:size(Info),
+ Parent ! {holder_updated, NRows},
+ table_holder(#holder{parent=Parent,
+ info=Info,
+ sort=Sort,
+ attrs=Attrs,
+ callback=Callback}).
+
+table_holder(#holder{callback=Callback, attrs=Attrs}=S0) ->
+ receive
+ _M={get_row, From, Row, Col} ->
+ %% erlang:display(_M),
+ State = get_row(From, Row, Col, S0),
+ table_holder(State);
+ _M={get_attr, From, Row} ->
+ %% erlang:display(_M),
+ get_attr(From, Row, Attrs),
+ table_holder(S0);
+ _M={change_sort, Col} ->
+ %% erlang:display(_M),
+ State = change_sort(Callback:col_to_elem(Col), S0),
+ table_holder(State);
+ stop ->
+ ok;
+ What ->
+ io:format("Table holder got ~p~n",[What]),
+ table_holder(S0)
+ end.
+
+change_sort(Col, S0=#holder{parent=Parent, info=Info0, sort=Sort0}) ->
+ NRows = array:size(Info0),
+ InfoList0 = array:to_list(Info0),
+ {Sort, InfoList}=sort(Col, Sort0, InfoList0),
+ Info = array:from_list(InfoList),
+ Parent ! {holder_updated, NRows},
+ S0#holder{info=Info, last_row=undefined, sort=Sort}.
+
+sort(Col, Opt=#sort{sort_key=Col, sort_incr=Bool}, Table) ->
+ do_sort(Opt#sort{sort_incr=not Bool}, Table);
+sort(Col, Sort,Table) ->
+ do_sort(Sort#sort{sort_key=Col, sort_incr=true}, Table).
+
+do_sort(Sort=#sort{sort_key=Col, sort_incr=true}, Table) ->
+ {Sort, lists:keysort(Col, Table)};
+do_sort(Sort=#sort{sort_key=Col, sort_incr=false}, Table) ->
+ {Sort, lists:reverse(lists:keysort(Col, Table))}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+get_cell_data(Callback, ColNo, RowInfo) ->
+ case element(Callback:col_to_elem(ColNo), RowInfo) of
+ undefined -> "";
+ Cell -> try Callback:format(Cell) catch error:undef -> Cell end
+ end.
+
+get_row(From, Row, Col,
+ #holder{callback=Callback, last_row={Row,RowInfo}}=State) ->
+ Data = get_cell_data(Callback, Col, RowInfo),
+ From ! {self(), observer_lib:to_str(Data)},
+ State;
+get_row(From, Row, Col, #holder{callback=Callback, info=Info}=S0) ->
+ {Data,State} =
+ case Row >= array:size(Info) of
+ true ->
+ {"",S0};
+ false ->
+ RowInfo = array:get(Row, Info),
+ CellData = get_cell_data(Callback, Col, RowInfo),
+ {CellData,S0#holder{last_row={Row,RowInfo}}}
+ end,
+ From ! {self(), observer_lib:to_str(Data)},
+ State.
+
+get_attr(From, Row, Attrs) ->
+ Attribute = case Row rem 2 =:= 0 of
+ true -> Attrs#attrs.even;
+ false -> Attrs#attrs.odd
+ end,
+ From ! {self(), Attribute}.
diff --git a/lib/observer/src/cdv_wx.erl b/lib/observer/src/cdv_wx.erl
new file mode 100644
index 0000000000..26df60b0a6
--- /dev/null
+++ b/lib/observer/src/cdv_wx.erl
@@ -0,0 +1,462 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+-module(cdv_wx).
+-compile(export_all).
+-behaviour(wx_object).
+
+-export([start/1]).
+-export([get_attrib/1, set_status/1, create_txt_dialog/4]).
+
+-export([init/1, handle_event/2, handle_cast/2, terminate/2, code_change/3,
+ handle_call/3, handle_info/2, check_page_title/1]).
+
+%% Includes
+-include_lib("wx/include/wx.hrl").
+-include_lib("kernel/include/file.hrl").
+
+-include("observer_defs.hrl").
+
+%% Defines
+
+-define(SERVER, cdv_wx).
+
+-define(ID_UG, 1).
+-define(ID_HOWTO, 2).
+-define(ID_NOTEBOOK, 3).
+
+-define(GEN_STR, "General").
+-define(PRO_STR, "Processes").
+-define(PORT_STR, "Ports").
+-define(ETS_STR, "ETS Tables").
+-define(TIMER_STR, "Timers").
+-define(FUN_STR, "Funs").
+-define(ATOM_STR, "Atoms").
+-define(DIST_STR, "Nodes").
+-define(MOD_STR, "Modules").
+-define(MEM_STR, "Memory").
+-define(INT_STR, "Internal Tables").
+
+%% Records
+-record(state,
+ {server,
+ file,
+ frame,
+ menubar,
+ menus = [],
+ status_bar,
+ notebook,
+ main_panel,
+ gen_panel,
+ pro_panel,
+ port_panel,
+ ets_panel,
+ timer_panel,
+ fun_panel,
+ atom_panel,
+ dist_panel,
+ mod_panel,
+ mem_panel,
+ int_panel,
+ active_tab
+ }).
+
+start(File) ->
+ case wx_object:start(?MODULE, File, []) of
+ Err = {error, _} -> Err;
+ _Obj -> ok
+ end.
+
+get_attrib(What) ->
+ wx_object:call(?SERVER, {get_attrib, What}).
+
+set_status(What) ->
+ wx_object:cast(?SERVER, {status_bar, What}).
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+init(File0) ->
+ register(?SERVER, self()),
+ wx:new(),
+
+ {ok,CdvServer} = crashdump_viewer:start_link(),
+
+ catch wxSystemOptions:setOption("mac.listctrl.always_use_generic", 1),
+ Frame = wxFrame:new(wx:null(), ?wxID_ANY, "Crashdump Viewer",
+ [{size, {850, 600}}, {style, ?wxDEFAULT_FRAME_STYLE}]),
+ IconFile = filename:join(code:priv_dir(observer), "erlang_observer.png"),
+ Icon = wxIcon:new(IconFile, [{type,?wxBITMAP_TYPE_PNG}]),
+ wxFrame:setIcon(Frame, Icon),
+ wxIcon:destroy(Icon),
+
+ %% Setup panels
+ Panel = wxPanel:new(Frame, []),
+ Notebook = wxNotebook:new(Panel, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
+
+ %% Setup "statusbar" to show warnings
+ StatusBar = observer_lib:create_status_bar(Panel),
+
+ %% Setup sizer create early to get it when window shows
+ MainSizer = wxBoxSizer:new(?wxVERTICAL),
+
+ wxSizer:add(MainSizer, Notebook, [{proportion, 1}, {flag, ?wxEXPAND}]),
+ wxSizer:add(MainSizer, StatusBar, [{flag, ?wxEXPAND bor ?wxALL},
+ {proportion, 0},
+ {border,4}]),
+ wxPanel:setSizer(Panel, MainSizer),
+
+ wxNotebook:connect(Notebook, command_notebook_page_changing),
+ wxFrame:connect(Frame, close_window, [{skip, true}]),
+ wxMenu:connect(Frame, command_menu_selected),
+
+ case load_dump(Frame,File0) of
+ {ok,File} ->
+ %% Set window title
+ T1 = "Crashdump Viewer: ",
+ Title =
+ if length(File) > 70 ->
+ T1 ++ filename:basename(File);
+ true ->
+ T1 ++ File
+ end,
+ wxFrame:setTitle(Frame, Title),
+
+ setup(#state{server=CdvServer,
+ file=File,
+ frame=Frame,
+ status_bar=StatusBar,
+ notebook=Notebook,
+ main_panel=Panel});
+ error ->
+ wxFrame:destroy(Frame),
+ wx:destroy(),
+ crashdump_viewer:stop(),
+ ignore
+ end.
+
+setup(#state{frame=Frame, notebook=Notebook}=State) ->
+
+ %% Setup Menubar & Menus
+ MenuBar = wxMenuBar:new(),
+ DefMenus = default_menus(),
+ observer_lib:create_menus(DefMenus, MenuBar, default),
+ wxFrame:setMenuBar(Frame, MenuBar),
+
+ %% General information Panel
+ GenPanel = add_page(Notebook, ?GEN_STR, cdv_info_wx, cdv_gen_cb),
+
+ %% Process Panel
+ ProPanel = add_page(Notebook, ?PRO_STR, cdv_virtual_list_wx, cdv_proc_cb),
+
+ %% Port Panel
+ PortPanel = add_page(Notebook, ?PORT_STR, cdv_virtual_list_wx, cdv_port_cb),
+
+ %% Table Panel
+ EtsPanel = add_page(Notebook, ?ETS_STR, cdv_virtual_list_wx, cdv_ets_cb),
+
+ %% Timer Panel
+ TimerPanel = add_page(Notebook, ?TIMER_STR, cdv_virtual_list_wx,cdv_timer_cb),
+
+ %% Fun Panel
+ FunPanel = add_page(Notebook, ?FUN_STR, cdv_virtual_list_wx, cdv_fun_cb),
+
+ %% Atom Panel
+ AtomPanel = add_page(Notebook, ?ATOM_STR, cdv_virtual_list_wx, cdv_atom_cb),
+
+ %% Distribution Panel
+ DistPanel = add_page(Notebook, ?DIST_STR, cdv_virtual_list_wx, cdv_dist_cb),
+
+ %% Loaded Modules Panel
+ ModPanel = add_page(Notebook, ?MOD_STR, cdv_virtual_list_wx, cdv_mod_cb),
+
+ %% Memory Panel
+ MemPanel = add_page(Notebook, ?MEM_STR, cdv_multi_wx, cdv_mem_cb),
+
+ %% Memory Panel
+ IntPanel = add_page(Notebook, ?INT_STR, cdv_multi_wx, cdv_int_tab_cb),
+
+ %% Show the window
+ wxFrame:show(Frame),
+
+ GenPid = wx_object:get_pid(GenPanel),
+ GenPid ! active,
+ observer_lib:destroy_progress_dialog(),
+ process_flag(trap_exit, true),
+ {Frame, State#state{menubar = MenuBar,
+ gen_panel = GenPanel,
+ pro_panel = ProPanel,
+ port_panel = PortPanel,
+ ets_panel = EtsPanel,
+ timer_panel = TimerPanel,
+ fun_panel = FunPanel,
+ atom_panel = AtomPanel,
+ dist_panel = DistPanel,
+ mod_panel = ModPanel,
+ mem_panel = MemPanel,
+ int_panel = IntPanel,
+ active_tab = GenPid
+ }}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%Callbacks
+handle_event(#wx{event=#wxNotebook{type=command_notebook_page_changing}},
+ #state{active_tab=Previous} = State) ->
+ case get_active_pid(State) of
+ Previous -> {noreply, State};
+ Pid ->
+ Pid ! active,
+ {noreply, State#state{active_tab=Pid}}
+ end;
+
+handle_event(#wx{event = #wxClose{}}, State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id = ?wxID_OPEN,
+ event = #wxCommand{type = command_menu_selected}},
+ State) ->
+ NewState =
+ case load_dump(State#state.frame,undefined) of
+ {ok,File} ->
+ Panels = [State#state.gen_panel,
+ State#state.pro_panel,
+ State#state.port_panel,
+ State#state.ets_panel,
+ State#state.timer_panel,
+ State#state.fun_panel,
+ State#state.atom_panel,
+ State#state.dist_panel,
+ State#state.mod_panel,
+ State#state.mem_panel,
+ State#state.int_panel],
+ _ = [wx_object:call(Panel,new_dump) || Panel<-Panels],
+ wxNotebook:setSelection(State#state.notebook,0),
+ observer_lib:destroy_progress_dialog(),
+ State#state{file=File};
+ error ->
+ State
+ end,
+ {noreply,NewState};
+
+handle_event(#wx{id = ?wxID_EXIT,
+ event = #wxCommand{type = command_menu_selected}},
+ State) ->
+ {stop, normal, State};
+
+handle_event(#wx{id = HelpId,
+ event = #wxCommand{type = command_menu_selected}},
+ State) when HelpId==?wxID_HELP; HelpId==?ID_UG; HelpId==?ID_HOWTO ->
+ Help = get_help_doc(HelpId),
+ wx_misc:launchDefaultBrowser(Help) orelse
+ create_txt_dialog(State#state.frame,
+ "Could not launch browser: ~n " ++ Help,
+ "Error", ?wxICON_ERROR),
+ {noreply, State};
+
+handle_event(#wx{id = ?wxID_ABOUT,
+ event = #wxCommand{type = command_menu_selected}},
+ State = #state{frame=Frame}) ->
+ AboutString = "Display information from an erlang crash dump",
+ Style = [{style, ?wxOK bor ?wxSTAY_ON_TOP},
+ {caption, "About"}],
+ wxMessageDialog:showModal(wxMessageDialog:new(Frame, AboutString, Style)),
+ {noreply, State};
+
+handle_event(Event, State) ->
+ Pid = get_active_pid(State),
+ Pid ! Event,
+ {noreply, State}.
+
+handle_cast({status_bar, Msg}, State=#state{status_bar=SB}) ->
+ wxTextCtrl:clear(SB),
+ wxTextCtrl:writeText(SB, Msg),
+ {noreply, State};
+
+handle_cast(_Cast, State) ->
+ {noreply, State}.
+
+handle_call({get_attrib, Attrib}, _From, State) ->
+ {reply, get(Attrib), State};
+
+handle_call(_Msg, _From, State) ->
+ {reply, ok, State}.
+
+handle_info({'EXIT', Pid, normal}, #state{server=Pid}=State) ->
+ {stop, normal, State};
+
+handle_info({'EXIT', Pid, _Reason}, State) ->
+ io:format("Child (~s) crashed exiting: ~p ~p~n",
+ [pid2panel(Pid, State), Pid,_Reason]),
+ {stop, normal, State};
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, #state{frame = Frame}) ->
+ wxFrame:destroy(Frame),
+ wx:destroy(),
+ crashdump_viewer:stop(),
+ ok.
+
+code_change(_, _, State) ->
+ {ok, State}.
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+add_page(Notebook,Title,Callback,Extra) ->
+ Panel = Callback:start_link(Notebook, Extra),
+ wxNotebook:addPage(Notebook, Panel, Title, []),
+ Panel.
+
+create_txt_dialog(Frame, Msg, Title, Style) ->
+ MD = wxMessageDialog:new(Frame, Msg, [{style, Style}]),
+ wxMessageDialog:setTitle(MD, Title),
+ wxDialog:showModal(MD),
+ wxDialog:destroy(MD).
+
+check_page_title(Notebook) ->
+ Selection = wxNotebook:getSelection(Notebook),
+ wxNotebook:getPageText(Notebook, Selection).
+
+get_active_pid(#state{notebook=Notebook, gen_panel=Gen, pro_panel=Pro,
+ port_panel=Ports, ets_panel=Ets, timer_panel=Timers,
+ fun_panel=Funs, atom_panel=Atoms, dist_panel=Dist,
+ mod_panel=Mods, mem_panel=Mem, int_panel=Int
+ }) ->
+ Panel = case check_page_title(Notebook) of
+ ?GEN_STR -> Gen;
+ ?PRO_STR -> Pro;
+ ?PORT_STR -> Ports;
+ ?ETS_STR -> Ets;
+ ?TIMER_STR -> Timers;
+ ?FUN_STR -> Funs;
+ ?ATOM_STR -> Atoms;
+ ?DIST_STR -> Dist;
+ ?MOD_STR -> Mods;
+ ?MEM_STR -> Mem;
+ ?INT_STR -> Int
+ end,
+ wx_object:get_pid(Panel).
+
+pid2panel(Pid, #state{gen_panel=Gen, pro_panel=Pro, port_panel=Ports,
+ ets_panel=Ets, timer_panel=Timers, fun_panel=Funs,
+ atom_panel=Atoms, dist_panel=Dist, mod_panel=Mods,
+ mem_panel=Mem, int_panel=Int}) ->
+ case Pid of
+ Gen -> ?GEN_STR;
+ Pro -> ?PRO_STR;
+ Ports -> ?PORT_STR;
+ Ets -> ?ETS_STR;
+ Timers -> ?TIMER_STR;
+ Funs -> ?FUN_STR;
+ Atoms -> ?ATOM_STR;
+ Dist -> ?DIST_STR;
+ Mods -> ?MOD_STR;
+ Mem -> ?MEM_STR;
+ Int -> ?INT_STR;
+ _ -> "unknown"
+ end.
+
+default_menus() ->
+ Open = #create_menu{id = ?wxID_OPEN, text = "Open new crash dump"},
+ Quit = #create_menu{id = ?wxID_EXIT, text = "Quit"},
+ About = #create_menu{id = ?wxID_ABOUT, text = "About"},
+ Help = #create_menu{id = ?wxID_HELP},
+ UG = #create_menu{id = ?ID_UG, text = "Crashdump viewer user's guide"},
+ Howto = #create_menu{id = ?ID_HOWTO, text = "How to interpret crash dump"},
+ case os:type() =:= {unix, darwin} of
+ false ->
+ FileMenu = {"File", [Open,Quit]},
+ HelpMenu = {"Help", [About,Help,UG,Howto]},
+ [FileMenu, HelpMenu];
+ true ->
+ %% On Mac quit and about will be moved to the "default' place
+ %% automagicly, so just add them to a menu that always exist.
+ [{"File", [Open, About,Quit]}, {"&Help", [Help,UG,Howto]}]
+ end.
+
+
+load_dump(Frame,undefined) ->
+ FD = wxFileDialog:new(wx:null(),
+ [{style,?wxFD_OPEN bor ?wxFD_FILE_MUST_EXIST}]),
+ case wxFileDialog:showModal(FD) of
+ ?wxID_OK ->
+ Path = wxFileDialog:getPath(FD),
+ wxDialog:destroy(FD),
+ load_dump(Frame,Path);
+ _ ->
+ wxDialog:destroy(FD),
+ error
+ end;
+load_dump(Frame,FileName) ->
+ ok = observer_lib:display_progress_dialog("Crashdump Viewer",
+ "Loading crashdump"),
+ crashdump_viewer:read_file(FileName),
+ case observer_lib:wait_for_progress() of
+ ok ->
+ %% Set window title
+ T1 = "Crashdump Viewer: ",
+ Title =
+ if length(FileName) > 70 ->
+ T1 ++ filename:basename(FileName);
+ true ->
+ T1 ++ FileName
+ end,
+ wxFrame:setTitle(Frame, Title),
+ {ok,FileName};
+ error ->
+ error
+ end.
+
+%%%-----------------------------------------------------------------
+%%% Find help document (HTML files)
+get_help_doc(HelpId) ->
+ Internal = get_internal_help_doc(HelpId),
+ case filelib:is_file(Internal) of
+ true -> Internal;
+ false -> get_external_help_doc(HelpId)
+ end.
+
+get_internal_help_doc(?ID_HOWTO) ->
+ filename:join(erts_doc_dir(),help_file(?ID_HOWTO));
+get_internal_help_doc(HelpId) ->
+ filename:join(observer_doc_dir(),help_file(HelpId)).
+
+get_external_help_doc(?ID_HOWTO) ->
+ filename:join("http://www.erlang.org/doc/apps/erts",help_file(?ID_HOWTO));
+get_external_help_doc(HelpId) ->
+ filename:join("http://www.erlang.org/doc/apps/observer",help_file(HelpId)).
+
+observer_doc_dir() ->
+ filename:join([code:lib_dir(observer),"doc","html"]).
+
+erts_doc_dir() ->
+ ErtsVsn = erlang:system_info(version),
+ RootDir = code:root_dir(),
+ VsnErtsDir = filename:join(RootDir,"erts-"++ErtsVsn),
+ DocDir = filename:join(["doc","html"]),
+ case filelib:is_dir(VsnErtsDir) of
+ true ->
+ filename:join(VsnErtsDir,DocDir);
+ false ->
+ %% So this can be run in source tree
+ filename:join([RootDir,"erts",DocDir])
+ end.
+
+help_file(?wxID_HELP) -> "crashdump_help.html";
+help_file(?ID_UG) -> "crashdump_ug.html";
+help_file(?ID_HOWTO) -> "crash_dump.html".
diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl
index e7d71c581e..a17efbccb0 100644
--- a/lib/observer/src/crashdump_viewer.erl
+++ b/lib/observer/src/crashdump_viewer.erl
@@ -20,80 +20,53 @@
%%
%% This module is the main module in the crashdump viewer. It implements
-%% the server started by webtool and the API for the crashdump viewer tool.
-%%
-%% All functions in the API except configData/0 and start_link/0 are
-%% called from HTML pages via erl_scheme (mod_esi).
+%% the server backend for the crashdump viewer tool.
%%
%% Tables
%% ------
-%% cdv_menu_table: This table holds the menu which is presented in the left
-%% frame of the crashdump viewer page. Each element in the table represents
-%% one meny item, and the state of the item indicates if it is presently
-%% visible or not.
-%%
-%% cdv_dump_index_table: This table holds all tags read from the crashdump.
-%% Each tag indicates where the information about a specific item starts.
-%% The table entry for a tag includes the start position for this
-%% item-information. All tags start with a "=" at the beginning of
-%% a line.
+%% cdv_dump_index_table: This table holds all tags read from the
+%% crashdump. Each tag indicates where the information about a
+%% specific item starts. The table entry for a tag includes the start
+%% position for this item-information. In a crash dump file, all tags
+%% start with a "=" at the beginning of a line.
%%
%% Process state
%% -------------
%% file: The name of the crashdump currently viewed.
%% dump_vsn: The version number of the crashdump
-%% procs_summary: Process summary represented by a list of
-%% #proc records. This is used for efficiency reasons when sorting the
-%% process summary table instead of reading all processes from the
-%% dump again. Note that if the dump contains more than
-%% ?max_sort_process_num processes, the sort functionality is not
-%% available, and the procs_summary field in the state will have the
-%% value 'too_many'.
-%% sorted: string(), indicated what item was last sorted in process summary.
-%% This is needed so reverse sorting can be done.
-%% shared_heap: 'true' if crashdump comes from a system running shared heap,
-%% else 'false'.
%% wordsize: 4 | 8, the number of bytes in a word.
%% binaries: a gb_tree containing binaries or links to binaries in the dump
%%
%% User API
--export([start/0,stop/0,script_start/0,script_start/1]).
-
-%% Webtool API
--export([configData/0,
- start_link/0]).
--export([start_page/2,
- read_file_frame/2,
- read_file/2,
- redirect/2,
- filename_frame/2,
- menu_frame/2,
- initial_info_frame/2,
- toggle/2,
- general_info/2,
- processes/3,
- proc_details/2,
- port/2,
- ports/3,
- ets_tables/3,
- internal_ets_tables/2,
- timers/3,
- fun_table/3,
- atoms/3,
- dist_info/2,
- loaded_modules/3,
- loaded_mod_details/2,
- memory/2,
- allocated_areas/2,
- allocator_info/2,
- hash_tables/2,
- index_tables/2,
- sort_procs/3,
- expand/2,
- expand_binary/2,
- expand_memory/2]).
-
+-export([start/0,start/1,stop/0,script_start/0,script_start/1]).
+
+%% GUI API
+-export([start_link/0]).
+-export([read_file/1,
+ general_info/0,
+ processes/0,
+ proc_details/1,
+ port/1,
+ ports/0,
+ ets_tables/1,
+ internal_ets_tables/0,
+ timers/1,
+ funs/0,
+ atoms/0,
+ dist_info/0,
+ node_info/1,
+ loaded_modules/0,
+ loaded_mod_details/1,
+ memory/0,
+ allocated_areas/0,
+ allocator_info/0,
+ hash_tables/0,
+ index_tables/0,
+ expand_binary/1]).
+
+%% Library function
+-export([to_proplist/2, to_value_list/1]).
%% gen_server callbacks
-export([init/1, handle_call/3, handle_cast/2, handle_info/2,
@@ -106,28 +79,11 @@
-include_lib("kernel/include/file.hrl").
-include_lib("stdlib/include/ms_transform.hrl").
--define(START_PAGE,"/cdv_erl/crashdump_viewer/start_page").
--define(READ_FILE_PAGE,"/cdv_erl/crashdump_viewer/read_file?path=").
-define(SERVER, crashdump_viewer_server).
-define(call_timeout,3600000).
-define(chunk_size,1000). % number of bytes read from crashdump at a time
-define(max_line_size,100). % max number of bytes (i.e. characters) the
% line_head/1 function can return
--define(max_display_size,500). % max number of bytes that will be directly
- % displayed. If e.g. msg_q is longer than
- % this, it must be explicitly expanded.
--define(max_display_binary_size,50). % max size of a binary that will be
- % directly displayed.
--define(max_sort_process_num,10000). % Max number of processes that allows
- % sorting. If more than this number of
- % processes exist, they will be displayed
- % in the order they are found in the log.
--define(items_chunk_size,?max_sort_process_num). % Number of items per chunk
- % when page of many items
- % is displayed, e.g. processes,
- % timers, funs...
- % Must be equal to
- % ?max_sort_process_num!
-define(not_available,"N/A").
@@ -136,7 +92,6 @@
-define(allocator,allocator).
-define(atoms,atoms).
-define(binary,binary).
--define(debug_proc_dictionary,debug_proc_dictionary).
-define(ende,ende).
-define(erl_crash_dump,erl_crash_dump).
-define(ets,ets).
@@ -152,7 +107,6 @@
-define(no_distribution,no_distribution).
-define(node,node).
-define(not_connected,not_connected).
--define(num_atoms,num_atoms).
-define(old_instr_data,old_instr_data).
-define(port,port).
-define(proc,proc).
@@ -164,8 +118,7 @@
-define(visible_node,visible_node).
--record(state,{file,dump_vsn,procs_summary,sorted,shared_heap=false,
- wordsize=4,num_atoms="unknown",binaries,bg_status}).
+-record(state,{file,dump_vsn,wordsize=4,num_atoms="unknown",binaries}).
%%%-----------------------------------------------------------------
%%% Debugging
@@ -198,133 +151,72 @@ stop_debug() ->
%%%-----------------------------------------------------------------
%%% User API
start() ->
- webtool:start(),
- receive after 1000 -> ok end,
- webtool:start_tools([],"app=crashdump_viewer"),
- receive after 1000 -> ok end,
- ok.
+ start(undefined).
+start(File) ->
+ cdv_wx:start(File).
stop() ->
- webtool:stop_tools([],"app=crashdump_viewer"),
- webtool:stop().
+ case whereis(?SERVER) of
+ undefined ->
+ ok;
+ Pid ->
+ Ref = erlang:monitor(process,Pid),
+ cast(stop),
+ receive {'DOWN', Ref, process, Pid, _} -> ok end
+ end.
%%%-----------------------------------------------------------------
%%% Start crashdump_viewer via the cdv script located in
%%% $OBSERVER_PRIV_DIR/bin
script_start() ->
- usage().
-script_start([File]) ->
- DefaultBrowser =
- case os:type() of
- {win32,_} -> iexplore;
- {unix,darwin} -> open;
- _ -> firefox
- end,
- script_start([File,DefaultBrowser]);
-script_start([FileAtom,Browser]) ->
+ do_script_start(fun() -> start() end),
+ erlang:halt().
+script_start([FileAtom]) ->
File = atom_to_list(FileAtom),
case filelib:is_regular(File) of
true ->
- io:format("Starting crashdump_viewer...\n"),
- start(),
- io:format("Reading crashdump..."),
- read_file(File),
- redirect([],[]),
- io:format("done\n"),
- start_browser(Browser);
+ do_script_start(fun() -> start(File) end);
false ->
io:format("cdv error: the given file does not exist\n"),
usage()
- end.
-
-start_browser(Browser) ->
- PortStr = integer_to_list(gen_server:call(web_tool,get_port)),
- Url = "http://localhost:" ++ PortStr ++ ?START_PAGE,
- {OSType,_} = os:type(),
- case Browser of
- none ->
- ok;
- iexplore when OSType == win32->
- io:format("Starting internet explorer...\n"),
- {ok,R} = win32reg:open(""),
- Key="\\local_machine\\SOFTWARE\\Microsoft\\IE Setup\\Setup",
- win32reg:change_key(R,Key),
- {ok,Val} = win32reg:value(R,"Path"),
- IExplore=filename:join(win32reg:expand(Val),"iexplore.exe"),
- os:cmd("\"" ++ IExplore ++ "\" " ++ Url);
- _ when OSType == win32 ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd("\"" ++ atom_to_list(Browser) ++ "\" " ++ Url);
- B when B==firefox; B==mozilla ->
- io:format("Sending URL to ~w...",[Browser]),
- BStr = atom_to_list(Browser),
- SendCmd = BStr ++ " -raise -remote \'openUrl(" ++ Url ++ ")\'",
- Port = open_port({spawn,SendCmd},[exit_status]),
- receive
- {Port,{exit_status,0}} ->
- io:format("done\n");
- {Port,{exit_status,_Error}} ->
- io:format(" not running, starting ~w...\n",[Browser]),
- os:cmd(BStr ++ " " ++ Url)
- after 5000 ->
- io:format(" failed, starting ~w...\n",[Browser]),
- erlang:port_close(Port),
- os:cmd(BStr ++ " " ++ Url)
- end;
- _ ->
- io:format("Starting ~w...\n",[Browser]),
- os:cmd(atom_to_list(Browser) ++ " " ++ Url)
end,
- ok.
+ erlang:halt();
+script_start(_) ->
+ usage(),
+ erlang:halt().
+
+do_script_start(StartFun) ->
+ process_flag(trap_exit,true),
+ case StartFun() of
+ ok ->
+ case whereis(cdv_wx) of
+ Pid when is_pid(Pid) ->
+ link(Pid),
+ receive
+ {'EXIT', Pid, normal} ->
+ ok;
+ {'EXIT', Pid, Reason} ->
+ io:format("\ncdv crash: ~p\n",[Reason])
+ end;
+ _ ->
+ io:format("\ncdv crash: ~p\n",[unknown_reason])
+ end;
+ Error ->
+ io:format("\ncdv start failed: ~p\n",[Error])
+ end.
usage() ->
io:format(
- "\nusage: cdv file [ browser ]\n"
+ "usage: cdv [file]\n"
"\tThe \'file\' must be an existing erlang crash dump.\n"
- "\tDefault browser is \'iexplore\' (Internet Explorer) on Windows,\n"
- "\t\'open\' on Mac OS X, or else \'firefox\'.\n",
+ "\tIf omitted a file dialog will be opened.\n",
[]).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Return config data used by webtool
-configData() ->
- Dir = filename:join(code:priv_dir(observer),"crashdump_viewer"),
- {crashdump_viewer,
- [{web_data,{"CrashDumpViewer",?START_PAGE}},
- {alias,{"/crashdump_viewer",Dir}},
- {alias,{"/crashdump_erts_doc",erts_docdir()}},
- {alias,{"/crashdump_doc",cdv_docdir()}},
- {alias,{erl_alias,"/cdv_erl",[?MODULE]}},
- {start,{child,{{local,?SERVER},
- {?MODULE,start_link,[]},
- permanent,100,worker,[?MODULE]}}}
- ]}.
-
-erts_docdir() ->
- ErtsVsn = erlang:system_info(version),
- RootDir = code:root_dir(),
- VsnErtsDir = filename:join(RootDir,"erts-"++ErtsVsn),
- DocDir = filename:join(["doc","html"]),
- case filelib:is_dir(VsnErtsDir) of
- true ->
- filename:join(VsnErtsDir,DocDir);
- false ->
- %% So this can be run in clearcase
- filename:join([RootDir,"erts",DocDir])
- end.
-
-cdv_docdir() ->
- ObserverDir = code:lib_dir(observer),
- filename:join([ObserverDir,"doc","html"]).
-
%%====================================================================
%% External functions
%%====================================================================
%%%--------------------------------------------------------------------
-%%% Start the server
+%%% Start the server - called by cdv_wx
start_link() ->
case whereis(?SERVER) of
undefined ->
@@ -334,119 +226,63 @@ start_link() ->
end.
%%%-----------------------------------------------------------------
-%%% If crashdump_viewer is just started, show welcome frame. Else
-%%% show menu and general_info
-start_page(_Env,_Input) ->
- call(start_page).
-
-%%%-----------------------------------------------------------------
-%%% Display the form for entering the file name for the crashdump
-%%% to view.
-read_file_frame(_Env,_Input) ->
- crashdump_viewer_html:read_file_frame().
-
-%%%-----------------------------------------------------------------
-%%% Called when the 'ok' button is clicked after entering the dump
-%%% file name.
-read_file(_Env,Input) ->
- call({read_file,Input}).
-
-%%%-----------------------------------------------------------------
-%%% The topmost frame of the main page. Called when a crashdump is
-%%% loaded.
-filename_frame(_Env,_Input) ->
- call(filename_frame).
-
-%%%-----------------------------------------------------------------
-%%% The initial information frame. Called when a crashdump is loaded.
-initial_info_frame(_Env,_Input) ->
- call(initial_info_frame).
-
-%%%-----------------------------------------------------------------
-%%% The left frame of the main page. Called when a crashdump is
-%%% loaded.
-menu_frame(_Env,_Input) ->
- crashdump_viewer_html:menu_frame().
-
-%%%-----------------------------------------------------------------
-%%% Called when the collapsed or exploded picture in the menu is
-%%% clicked.
-toggle(_Env,Input) ->
- call({toggle,Input}).
+%%% Called by cdv_wx
+read_file(File) ->
+ cast({read_file,File}).
%%%-----------------------------------------------------------------
-%%% The following functions are called when menu items are clicked.
-general_info(_Env,_Input) ->
+%%% The following functions are called when the different tabs are
+%%% created
+general_info() ->
call(general_info).
-processes(SessionId,_Env,_Input) ->
- call({procs_summary,SessionId}).
-ports(SessionId,_Env,_Input) ->
- call({ports,SessionId}).
-ets_tables(SessionId,_Env,Input) ->
- call({ets_tables,SessionId,Input}).
-internal_ets_tables(_Env,_Input) ->
+processes() ->
+ call(procs_summary).
+ports() ->
+ call(ports).
+ets_tables(Owner) ->
+ call({ets_tables,Owner}).
+internal_ets_tables() ->
call(internal_ets_tables).
-timers(SessionId,_Env,Input) ->
- call({timers,SessionId,Input}).
-fun_table(SessionId,_Env,_Input) ->
- call({funs,SessionId}).
-atoms(SessionId,_Env,_Input) ->
- call({atoms,SessionId}).
-dist_info(_Env,_Input) ->
+timers(Owner) ->
+ call({timers,Owner}).
+funs() ->
+ call(funs).
+atoms() ->
+ call(atoms).
+dist_info() ->
call(dist_info).
-loaded_modules(SessionId,_Env,_Input) ->
- call({loaded_mods,SessionId}).
-loaded_mod_details(_Env,Input) ->
- call({loaded_mod_details,Input}).
-memory(_Env,_Input) ->
+node_info(Channel) ->
+ call({node_info,Channel}).
+loaded_modules() ->
+ call(loaded_mods).
+loaded_mod_details(Mod) ->
+ call({loaded_mod_details,Mod}).
+memory() ->
call(memory).
-allocated_areas(_Env,_Input) ->
+allocated_areas() ->
call(allocated_areas).
-allocator_info(_Env,_Input) ->
+allocator_info() ->
call(allocator_info).
-hash_tables(_Env,_Input) ->
+hash_tables() ->
call(hash_tables).
-index_tables(_Env,_Input) ->
+index_tables() ->
call(index_tables).
%%%-----------------------------------------------------------------
%%% Called when a link to a process (Pid) is clicked.
-proc_details(_Env,Input) ->
- call({proc_details,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when one of the headings in the process summary table are
-%%% clicked. It sorts the processes by the clicked heading.
-sort_procs(SessionId,_Env,Input) ->
- call({sort_procs,SessionId,Input}).
+proc_details(Pid) ->
+ call({proc_details,Pid}).
%%%-----------------------------------------------------------------
%%% Called when a link to a port is clicked.
-port(_Env,Input) ->
- call({port,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when the "Expand" link in a call stack (Last Calls) is
-%%% clicked.
-expand(_Env,Input) ->
- call({expand,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called when the "Expand" link in a stack dump, message queue or
-%%% dictionary is clicked.
-expand_memory(_Env,Input) ->
- call({expand_memory,Input}).
+port(Id) ->
+ call({port,Id}).
%%%-----------------------------------------------------------------
-%%% Called when "<< xxx bytes>>" link in a stack dump, message queue or
-%%% dictionary is clicked.
-expand_binary(_Env,Input) ->
- call({expand_binary,Input}).
-
-%%%-----------------------------------------------------------------
-%%% Called on regular intervals while waiting for a dump to be read
-redirect(_Env,_Input) ->
- call(redirect).
+%%% Called when "<< xxx bytes>>" link is clicket to open a new window
+%%% displaying the whole binary.
+expand_binary(Pos) ->
+ call({expand_binary,Pos}).
%%====================================================================
%% Server functions
@@ -461,7 +297,6 @@ redirect(_Env,_Input) ->
%% {stop, Reason}
%%--------------------------------------------------------------------
init([]) ->
- ets:new(cdv_menu_table,[set,named_table,{keypos,#menu_item.index},public]),
ets:new(cdv_dump_index_table,[ordered_set,named_table,public]),
{ok, #state{}}.
@@ -475,223 +310,125 @@ init([]) ->
%% {stop, Reason, Reply, State} | (terminate/2 is called)
%% {stop, Reason, State} (terminate/2 is called)
%%--------------------------------------------------------------------
-handle_call(start_page,_From,State=#state{file=undefined,bg_status=undefined})->
- Reply = crashdump_viewer_html:welcome(),
- {reply,Reply,State};
-handle_call(start_page, _From, State=#state{file=undefined,bg_status={done,Page}}) ->
- {reply,Page,State};
-handle_call(start_page, _From, State=#state{file=undefined,bg_status=Status}) ->
- Reply = crashdump_viewer_html:redirect(Status),
- {reply,Reply,State};
-handle_call(start_page, _From, State) ->
- Reply = crashdump_viewer_html:start_page(),
- {reply,Reply,State};
-handle_call({read_file,Input}, _From, _State) ->
- {ok,File} = get_value("path",httpd:parse_query(Input)),
- spawn_link(fun() -> read_file(File) end),
- Status = background_status(reading,File),
- Reply = crashdump_viewer_html:redirect(Status),
- {reply, Reply, #state{bg_status=Status}};
-handle_call(redirect,_From, State=#state{bg_status={done,Page}}) ->
- {reply, Page, State#state{bg_status=undefined}};
-handle_call(redirect,_From, State=#state{bg_status=Status}) ->
- Reply = crashdump_viewer_html:redirect(Status),
- {reply, Reply, State};
-handle_call(filename_frame,_From,State=#state{file=File}) ->
- Reply = crashdump_viewer_html:filename_frame(File),
- {reply,Reply,State};
-handle_call(initial_info_frame,_From,State=#state{file=File}) ->
+handle_call(general_info,_From,State=#state{file=File}) ->
GenInfo = general_info(File),
- [{DumpVsn,_}] = lookup_index(?erl_crash_dump),
NumAtoms = GenInfo#general_info.num_atoms,
- {WS,SH} = parse_vsn_str(GenInfo#general_info.system_vsn,4,false),
- NumProcs = list_to_integer(GenInfo#general_info.num_procs),
- ProcsSummary =
- if NumProcs > ?max_sort_process_num -> too_many;
- true -> State#state.procs_summary
- end,
- NewState = State#state{dump_vsn=[list_to_integer(L) ||
- L<-string:tokens(DumpVsn,".")],
- shared_heap=SH,
- wordsize=WS,
- num_atoms=NumAtoms,
- procs_summary=ProcsSummary},
- Reply = crashdump_viewer_html:general_info(GenInfo),
- {reply,Reply,NewState};
-handle_call({toggle,Input},_From,State) ->
- {ok,Index} = get_value("index",httpd:parse_query(Input)),
- do_toggle(list_to_integer(Index)),
- Reply = crashdump_viewer_html:menu_frame(),
- {reply,Reply,State};
-handle_call({expand,Input},_From,State=#state{file=File}) ->
- [{"pos",Pos},{"size",Size},{"what",What},{"truncated",Truncated}] =
- httpd:parse_query(Input),
- Expanded = get_expanded(File,list_to_integer(Pos),list_to_integer(Size)),
- TruncText = if Truncated=="true" -> "WARNING: This term is truncated!\n\n";
- true -> ""
- end,
- Reply =
- case {Truncated,What} of
- {_,"LastCalls"} ->
- LastCalls = replace_all($ ,$\n,Expanded,[]),
- crashdump_viewer_html:info_page(What,[TruncText,LastCalls]);
- {_,"StackDump"} ->
- crashdump_viewer_html:info_page(What,[TruncText,Expanded]);
- {"false",_} ->
- crashdump_viewer_html:pretty_info_page(What,Expanded);
- {"true",_} ->
- crashdump_viewer_html:info_page(What,[TruncText,Expanded])
- end,
- {reply,Reply,State};
-handle_call({expand_memory,Input},_From,State=#state{file=File,binaries=B}) ->
- [{"pid",Pid},{"what",What}] = httpd:parse_query(Input),
- Reply =
- case truncated_warning([{?proc,Pid}]) of
- [] ->
- Expanded = expand_memory(File,What,Pid,B),
- crashdump_viewer_html:expanded_memory(What,Expanded);
- _TW ->
- Info =
- "The crashdump is truncated in the middle of this "
- "process' memory information, so this information "
- "can not be extracted.",
- crashdump_viewer_html:info_page(What,Info)
- end,
- {reply,Reply,State};
-handle_call({expand_binary,Input},_From,State=#state{file=File}) ->
- [{"pos",Pos0}] = httpd:parse_query(Input),
- Pos = list_to_integer(Pos0),
+ WS = parse_vsn_str(GenInfo#general_info.system_vsn,4),
+ TW = case get(truncated) of
+ true -> ["WARNING: The crash dump is truncated. "
+ "Some information might be missing."];
+ false -> []
+ end,
+ {reply,{ok,GenInfo,TW},State#state{wordsize=WS, num_atoms=NumAtoms}};
+handle_call({expand_binary,{Offset,Size,Pos}},_From,State=#state{file=File}) ->
Fd = open(File),
pos_bof(Fd,Pos),
- {Bin,_Line} = get_binary(val(Fd)),
+ {Bin,_Line} = get_binary(Offset,Size,val(Fd)),
close(Fd),
- Reply=crashdump_viewer_html:expanded_binary(io_lib:format("~p",[Bin])),
- {reply,Reply,State};
-handle_call(general_info,_From,State=#state{file=File}) ->
- GenInfo=general_info(File),
- Reply = crashdump_viewer_html:general_info(GenInfo),
- {reply,Reply,State};
-handle_call({procs_summary,SessionId},_From,State) ->
- TW = truncated_warning([?proc]),
- NewState = procs_summary(SessionId,TW,"pid",State#state{sorted=undefined}),
- {reply,ok,NewState};
-handle_call({sort_procs,SessionId,Input}, _From, State) ->
- {ok,Sort} = get_value("sort",httpd:parse_query(Input)),
+ {reply,{ok,Bin},State};
+handle_call(procs_summary,_From,State=#state{file=File,wordsize=WS}) ->
TW = truncated_warning([?proc]),
- NewState = procs_summary(SessionId,TW,Sort,State),
- {reply,ok,NewState};
-handle_call({proc_details,Input},_From,State=#state{file=File,shared_heap=SH}) ->
- {ok,Pid} = get_value("pid",httpd:parse_query(Input)),
+ Procs = procs_summary(File,WS),
+ {reply,{ok,Procs,TW},State};
+handle_call({proc_details,Pid},_From,
+ State=#state{file=File,wordsize=WS,dump_vsn=DumpVsn,binaries=B})->
Reply =
- case get_proc_details(File,Pid,State#state.dump_vsn) of
- {ok,Proc} ->
- TW = truncated_warning([{?proc,Pid}]),
- crashdump_viewer_html:proc_details(Pid,Proc,TW,SH);
- {other_node,Node} ->
- TW = truncated_warning([?visible_node,
- ?hidden_node,
- ?not_connected]),
- crashdump_viewer_html:nods(Node,TW);
- not_found ->
- crashdump_viewer_html:info_page(["Could not find process: ",
- Pid],?space)
+ case get_proc_details(File,Pid,WS,DumpVsn,B) of
+ {ok,Proc,TW} ->
+ {ok,Proc,TW};
+ Other ->
+ {error,Other}
end,
{reply, Reply, State};
-handle_call({port,Input},_From,State=#state{file=File}) ->
- {ok,P} = get_value("port",httpd:parse_query(Input)),
- Id = [$#|P],
+handle_call({port,Id},_From,State=#state{file=File}) ->
Reply =
case get_port(File,Id) of
{ok,PortInfo} ->
TW = truncated_warning([{?port,Id}]),
- crashdump_viewer_html:port(Id,PortInfo,TW);
- {other_node,Node} ->
- TW = truncated_warning([?visible_node,
- ?hidden_node,
- ?not_connected]),
- crashdump_viewer_html:nods(Node,TW);
- not_found ->
- crashdump_viewer_html:info_page(
- ["Could not find port: ",Id],?space)
+ {ok,PortInfo,TW};
+ Other ->
+ {error,Other}
end,
{reply,Reply,State};
-handle_call({ports,SessionId},_From,State=#state{file=File}) ->
+handle_call(ports,_From,State=#state{file=File}) ->
TW = truncated_warning([?port]),
- get_ports(SessionId,File,TW),
- {reply,ok,State};
-handle_call({ets_tables,SessionId,Input},_From,State=#state{file=File,wordsize=WS}) ->
- {Pid,Heading} =
- case get_value("pid",httpd:parse_query(Input)) of
- {ok,P} ->
- {P,["ETS Tables for Process ",P]};
- error ->
- {'$2',"ETS Table Information"}
+ Ports = get_ports(File),
+ {reply,{ok,Ports,TW},State};
+handle_call({ets_tables,Pid0},_From,State=#state{file=File,wordsize=WS}) ->
+ Pid =
+ case Pid0 of
+ all -> '$2';
+ _ -> Pid0
end,
TW = truncated_warning([?ets]),
- get_ets_tables(SessionId,File,Heading,TW,Pid,WS),
- {reply,ok,State};
+ Ets = get_ets_tables(File,Pid,WS),
+ {reply,{ok,Ets,TW},State};
handle_call(internal_ets_tables,_From,State=#state{file=File,wordsize=WS}) ->
InternalEts = get_internal_ets_tables(File,WS),
TW = truncated_warning([?internal_ets]),
- Reply = crashdump_viewer_html:internal_ets_tables(InternalEts,TW),
- {reply,Reply,State};
-handle_call({timers,SessionId,Input},_From,State=#state{file=File}) ->
- {Pid,Heading} =
- case get_value("pid",httpd:parse_query(Input)) of
- {ok,P} -> {P,["Timers for Process ",P]};
- error -> {'$2',"Timer Information"}
+ {reply,{ok,InternalEts,TW},State};
+handle_call({timers,Pid0},_From,State=#state{file=File}) ->
+ Pid =
+ case Pid0 of
+ all -> '$2';
+ _ -> Pid0
end,
TW = truncated_warning([?timer]),
- get_timers(SessionId,File,Heading,TW,Pid),
- {reply,ok,State};
+ Timers = get_timers(File,Pid),
+ {reply,{ok,Timers,TW},State};
handle_call(dist_info,_From,State=#state{file=File}) ->
- Nods=nods(File),
TW = truncated_warning([?visible_node,?hidden_node,?not_connected]),
- Reply = crashdump_viewer_html:nods(Nods,TW),
+ Nods=nods(File),
+ {reply,{ok,Nods,TW},State};
+handle_call({node_info,Channel},_From,State=#state{file=File}) ->
+ Reply =
+ case get_node(File,Channel) of
+ {ok,Nod} ->
+ TW = truncated_warning([?visible_node,
+ ?hidden_node,
+ ?not_connected]),
+ {ok,Nod,TW};
+ {error,Other} ->
+ {error,Other}
+ end,
{reply,Reply,State};
-handle_call({loaded_mods,SessionId},_From,State=#state{file=File}) ->
+handle_call(loaded_mods,_From,State=#state{file=File}) ->
TW = truncated_warning([?mod]),
- loaded_mods(SessionId,File,TW),
- {reply,ok,State};
-handle_call({loaded_mod_details,Input},_From,State=#state{file=File}) ->
- {ok,Mod} = get_value("mod",httpd:parse_query(Input)),
- ModInfo = get_loaded_mod_details(File,Mod),
+ {_CC,_OC,Mods} = loaded_mods(File),
+ {reply,{ok,Mods,TW},State};
+handle_call({loaded_mod_details,Mod},_From,State=#state{file=File}) ->
TW = truncated_warning([{?mod,Mod}]),
- Reply = crashdump_viewer_html:loaded_mod_details(ModInfo,TW),
- {reply,Reply,State};
-handle_call({funs,SessionId},_From,State=#state{file=File}) ->
+ ModInfo = get_loaded_mod_details(File,Mod),
+ {reply,{ok,ModInfo,TW},State};
+handle_call(funs,_From,State=#state{file=File}) ->
TW = truncated_warning([?fu]),
- funs(SessionId,File,TW),
- {reply,ok,State};
-handle_call({atoms,SessionId},_From,State=#state{file=File,num_atoms=Num}) ->
- TW = truncated_warning([?atoms,?num_atoms]),
- atoms(SessionId,File,TW,Num),
- {reply,ok,State};
+ Funs = funs(File),
+ {reply,{ok,Funs,TW},State};
+handle_call(atoms,_From,State=#state{file=File,num_atoms=NumAtoms0}) ->
+ TW = truncated_warning([?atoms]),
+ NumAtoms = try list_to_integer(NumAtoms0) catch error:badarg -> -1 end,
+ Atoms = atoms(File,NumAtoms),
+ {reply,{ok,Atoms,TW},State};
handle_call(memory,_From,State=#state{file=File}) ->
Memory=memory(File),
TW = truncated_warning([?memory]),
- Reply = crashdump_viewer_html:memory(Memory,TW),
- {reply,Reply,State};
+ {reply,{ok,Memory,TW},State};
handle_call(allocated_areas,_From,State=#state{file=File}) ->
AllocatedAreas=allocated_areas(File),
TW = truncated_warning([?allocated_areas]),
- Reply = crashdump_viewer_html:allocated_areas(AllocatedAreas,TW),
- {reply,Reply,State};
+ {reply,{ok,AllocatedAreas,TW},State};
handle_call(allocator_info,_From,State=#state{file=File}) ->
SlAlloc=allocator_info(File),
TW = truncated_warning([?allocator]),
- Reply = crashdump_viewer_html:allocator_info(SlAlloc,TW),
- {reply,Reply,State};
+ {reply,{ok,SlAlloc,TW},State};
handle_call(hash_tables,_From,State=#state{file=File}) ->
HashTables=hash_tables(File),
TW = truncated_warning([?hash_table,?index_table]),
- Reply = crashdump_viewer_html:hash_tables(HashTables,TW),
- {reply,Reply,State};
+ {reply,{ok,HashTables,TW},State};
handle_call(index_tables,_From,State=#state{file=File}) ->
IndexTables=index_tables(File),
TW = truncated_warning([?hash_table,?index_table]),
- Reply = crashdump_viewer_html:index_tables(IndexTables,TW),
- {reply,Reply,State}.
+ {reply,{ok,IndexTables,TW},State}.
@@ -702,11 +439,18 @@ handle_call(index_tables,_From,State=#state{file=File}) ->
%% {noreply, State, Timeout} |
%% {stop, Reason, State} (terminate/2 is called)
%%--------------------------------------------------------------------
-handle_cast({background_done,{Page,File,Binaries},Dict}, State) ->
- lists:foreach(fun({Key,Val}) -> put(Key,Val) end, Dict),
- {noreply, State#state{file=File,binaries=Binaries,bg_status={done,Page}}};
-handle_cast({background_status,Status}, State) ->
- {noreply, State#state{bg_status=Status}}.
+handle_cast({read_file,File}, _State) ->
+ case do_read_file(File) of
+ {ok,Binaries,DumpVsn} ->
+ observer_lib:report_progress({ok,done}),
+ {noreply, #state{file=File,binaries=Binaries,dump_vsn=DumpVsn}};
+ Error ->
+ end_progress(Error),
+ {noreply, #state{}}
+ end;
+handle_cast(stop,State) ->
+ {stop,normal,State}.
+
%%--------------------------------------------------------------------
%% Function: handle_info/2
@@ -791,24 +535,6 @@ compare_pid("<"++Id,"<"++OtherId) ->
compare_pid(_,_) ->
false.
-background_status(Action,File) ->
- SizeInfo = filesizeinfo(File),
- background_status(Action,File,SizeInfo).
-
-background_status(processing,File,SizeInfo) ->
- "Processing " ++ File ++ SizeInfo;
-background_status(reading,File,SizeInfo) ->
- "Reading file " ++ File ++ SizeInfo.
-
-filesizeinfo(File) ->
- case file:read_file_info(File) of
- {ok,#file_info{size=Size}} ->
- " (" ++ integer_to_list(Size) ++ " bytes)";
- _X ->
- ""
- end.
-
-
open(File) ->
{ok,Fd} = file:open(File,[read,read_ahead,raw,binary]),
Fd.
@@ -861,6 +587,18 @@ get_chunk(Fd) ->
{ok,Bin}
end.
+%% Read and report progress
+progress_read(Fd) ->
+ {R,Bytes} =
+ case read(Fd) of
+ {ok,Bin} ->
+ {{ok,Bin},byte_size(Bin)};
+ Other ->
+ {Other,0}
+ end,
+ update_progress(Bytes),
+ R.
+
read(Fd) ->
file:read(Fd,?chunk_size).
@@ -962,73 +700,30 @@ get_rest_of_line_1(Fd, <<>>, Acc) ->
eof -> {eof,lists:reverse(Acc)}
end.
-count_rest_of_line(Fd) ->
+get_lines_to_empty(Fd) ->
case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_line(Fd,Bin,0);
- eof -> {eof,0}
- end.
-count_rest_of_line(Fd,<<$\n:8,Bin/binary>>,N) ->
- put_chunk(Fd,Bin),
- N;
-count_rest_of_line(Fd,<<$\r:8,Bin/binary>>,N) ->
- count_rest_of_line(Fd,Bin,N);
-count_rest_of_line(Fd,<<_Char:8,Bin/binary>>,N) ->
- count_rest_of_line(Fd,Bin,N+1);
-count_rest_of_line(Fd,<<>>,N) ->
- case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_line(Fd,Bin,N);
- eof -> {eof,N}
- end.
-
-get_n_lines_of_tag(Fd,N) ->
- case get_chunk(Fd) of
- {ok,Bin} ->
- {AllOrPart,Rest,Lines} = get_n_lines_of_tag(Fd,N,Bin,[]),
- {AllOrPart,N-Rest,Lines};
+ {ok,Bin} ->
+ get_lines_to_empty(Fd,Bin,[],[]);
eof ->
- empty
- end.
-get_n_lines_of_tag(Fd,N,<<"\n=",_/binary>>=Bin,Acc) ->
- put_chunk(Fd,Bin),
- {all,N-1,lists:reverse(Acc)};
-get_n_lines_of_tag(Fd,0,Bin,Acc) ->
- put_chunk(Fd,Bin),
- {part,0,lists:reverse(Acc)};
-get_n_lines_of_tag(Fd,N,<<$\n:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N-1,Bin,[$\n|Acc]);
-get_n_lines_of_tag(Fd,N,<<$\r:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N,Bin,Acc);
-get_n_lines_of_tag(Fd,N,<<Char:8,Bin/binary>>,Acc) ->
- get_n_lines_of_tag(Fd,N,Bin,[Char|Acc]);
-get_n_lines_of_tag(Fd,N,<<>>,Acc) ->
- case get_chunk(Fd) of
- {ok,Bin} ->
- get_n_lines_of_tag(Fd,N,Bin,Acc);
- eof ->
- case Acc of
- [$\n|_] ->
- {all,N,lists:reverse(Acc)};
- _ ->
- {all,N-1,lists:reverse(Acc)}
- end
- end.
-
-count_rest_of_tag(Fd) ->
- case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_tag(Fd,Bin,0);
- eof -> 0
+ []
end.
-count_rest_of_tag(Fd,<<"\n=",Bin/binary>>,N) ->
+get_lines_to_empty(Fd,<<$\n:8,Bin/binary>>,[],Lines) ->
put_chunk(Fd,Bin),
- N;
-count_rest_of_tag(Fd,<<$\r:8,Bin/binary>>,N) ->
- count_rest_of_tag(Fd,Bin,N);
-count_rest_of_tag(Fd,<<_Char:8,Bin/binary>>,N) ->
- count_rest_of_tag(Fd,Bin,N+1);
-count_rest_of_tag(Fd,<<>>,N) ->
+ lists:reverse(Lines);
+get_lines_to_empty(Fd,<<$\n:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,[],[lists:reverse(Acc)|Lines]);
+get_lines_to_empty(Fd,<<$\r:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,Acc,Lines);
+get_lines_to_empty(Fd,<<$\s:8,Bin/binary>>,[],Lines) ->
+ get_lines_to_empty(Fd,Bin,[],Lines);
+get_lines_to_empty(Fd,<<Char:8,Bin/binary>>,Acc,Lines) ->
+ get_lines_to_empty(Fd,Bin,[Char|Acc],Lines);
+get_lines_to_empty(Fd,<<>>,Acc,Lines) ->
case get_chunk(Fd) of
- {ok,Bin} -> count_rest_of_tag(Fd,Bin,N);
- eof -> N
+ {ok,Bin} ->
+ get_lines_to_empty(Fd,Bin,Acc,Lines);
+ eof ->
+ lists:reverse(Lines,[lists:reverse(Acc)])
end.
split(Str) ->
@@ -1046,150 +741,32 @@ split(Char,[H|T],Acc) ->
split(_Char,[],Acc) ->
{lists:reverse(Acc),[]}.
-size_or_term(Fd) ->
- size_or_term(Fd,get(pos)).
-size_or_term(Fd,Pos) ->
- case count_rest_of_line(Fd) of
- {eof,Size} ->
- {size,true,Size,Pos};
- Size when Size > ?max_display_size ->
- {size,false,Size,Pos};
- _Size ->
- {ok,Pos} = pos_bof(Fd,Pos),
- val(Fd)
- end.
-
%%%-----------------------------------------------------------------
%%%
-get_value(Key,List) ->
- case lists:keysearch(Key,1,List) of
- {value,{Key,Value}} -> {ok,Value};
- false -> error
- end.
-
-parse_vsn_str([],WS,false) ->
- %% If the log is translated, crashdump_translate might have written
- %% shared_heap=true in dictionary.
- case erase(shared_heap) of
- true -> {WS,true};
- _ -> {WS,false}
- end;
-parse_vsn_str([],WS,SH) ->
- {WS,SH};
-parse_vsn_str(Str,WS,SH) ->
+parse_vsn_str([],WS) ->
+ WS;
+parse_vsn_str(Str,WS) ->
case Str of
- "[64-bit]" ++ Rest ->
- case SH of
- false ->
- parse_vsn_str(Rest,8,false);
- _ ->
- {8,SH}
- end;
- "[shared heap]" ++ Rest ->
- case WS of
- 4 ->
- parse_vsn_str(Rest,WS,true);
- _ ->
- {WS,true}
- end;
+ "[64-bit]" ++ _Rest ->
+ 8;
[_Char|Rest] ->
- parse_vsn_str(Rest,WS,SH)
+ parse_vsn_str(Rest,WS)
end.
%%%-----------------------------------------------------------------
-%%%
-initial_menu() ->
- insert_items(
- [menu_item(0, {"./general_info","General information"},0),
- menu_item(0, {"./processes","Processes"}, 0),
- menu_item(0, {"./ports","Ports"}, 0),
- menu_item(2, "ETS tables", 0),
- menu_item(0, {"./ets_tables","ETS tables"}, 1),
- menu_item(0, {"./internal_ets_tables","Internal ETS tables"}, 1),
- menu_item(0, {"./timers","Timers"}, 0),
- menu_item(0, {"./fun_table","Fun table"}, 0),
- menu_item(0, {"./atoms","Atoms"}, 0),
- menu_item(0, {"./dist_info","Distribution information"}, 0),
- menu_item(0, {"./loaded_modules","Loaded modules"}, 0),
- menu_item(2, "Internal Tables", 0),
- menu_item(0, {"./hash_tables","Hash tables"}, 1),
- menu_item(0, {"./index_tables","Index tables"}, 1),
- menu_item(3, "Memory information", 0),
- menu_item(0, {"./memory","Memory"}, 1),
- menu_item(0, {"./allocated_areas","Allocated areas"}, 1),
- menu_item(0, {"./allocator_info","Allocator information"}, 1),
- menu_item(2, "Documentation", 0),
- menu_item(0, {"/crashdump_doc/crashdump_help.html",
- "Crashdump Viewer help"}, 1,"doc"),
- menu_item(0, {"/crashdump_erts_doc/crash_dump.html",
- "How to interpret Erlang crashdumps"}, 1,"doc")]).
-
-menu_item(Children,Text,Depth) ->
- menu_item(Children,Text,Depth,"main").
-menu_item(Children,Text,Depth,Target) ->
- #menu_item{picture=get_pic(Children),
- text=Text,
- depth=Depth,
- children=Children,
- state=if Depth==0 -> true; true -> false end,
- target=Target}.
-
-insert_items(Items) ->
- insert_items(Items,1).
-insert_items([Item|Items],Index) ->
- ets:insert(cdv_menu_table,Item#menu_item{index=Index}),
- insert_items(Items,Index+1);
-insert_items([],_) ->
- ok.
-
-get_pic(0) ->
- "";
-get_pic(_) ->
- "/crashdump_viewer/collapsd.gif".
-
-do_toggle(Index) ->
- [Item]= ets:lookup(cdv_menu_table,Index),
- case toggle_children(Index,Index+Item#menu_item.children,
- Item#menu_item.depth+1,undefined) of
- true ->
- ets:insert(cdv_menu_table,
- Item#menu_item{picture=
- "/crashdump_viewer/exploded.gif"});
- false ->
- ets:insert(cdv_menu_table,
- Item#menu_item{picture=
- "/crashdump_viewer/collapsd.gif"})
- end.
-
-toggle_children(Index,Max,_Depth,ToggleState) when Index>Max->
- ToggleState;
-toggle_children(Index,Max,Depth,ToggleState) ->
- case ets:lookup(cdv_menu_table,Index+1) of
- [#menu_item{depth=Depth}=Child] ->
- NewState = not Child#menu_item.state,
- ets:insert(cdv_menu_table,Child#menu_item{state=NewState}),
- toggle_children(Index+1,Max,Depth,NewState);
- _ ->
- toggle_children(Index+1,Max,Depth,ToggleState)
- end.
-
-%%%-----------------------------------------------------------------
%%% Traverse crash dump and insert index in table for each heading
-%%%
-%%% This function is executed in a background process in order to
-%%% avoid a timeout in the web browser. The browser displays "Please
-%%% wait..." while this is going on.
%%%
-%%% Variable written to process dictionary in this function are copied
-%%% to the crashdump_viewer_server when the function is completed (see
-%%% background_done/1).
-read_file(File) ->
+%%% Progress is reported during the time and MUST be checked with
+%%% crashdump_viewer:get_progress/0 until it returns {ok,done}.
+do_read_file(File) ->
case file:read_file_info(File) of
- {ok,#file_info{type=regular,access=FileA}} when FileA=:=read;
- FileA=:=read_write ->
+ {ok,#file_info{type=regular,
+ access=FileA,
+ size=Size}} when FileA=:=read; FileA=:=read_write ->
Fd = open(File),
- case read(Fd) of
+ init_progress("Reading file",Size),
+ case progress_read(Fd) of
{ok,<<$=:8,TagAndRest/binary>>} ->
{Tag,Id,Rest,N1} = tag(Fd,TagAndRest,1),
case Tag of
@@ -1197,41 +774,40 @@ read_file(File) ->
reset_index_table(),
insert_index(Tag,Id,N1+1),
put(last_tag,{Tag,""}),
- Status = background_status(processing,File),
- background_status(Status),
indexify(Fd,Rest,N1),
+ end_progress(),
check_if_truncated(),
- initial_menu(),
- Binaries = read_binaries(Fd),
- R = crashdump_viewer_html:start_page(),
+ [{DumpVsn0,_}] = lookup_index(?erl_crash_dump),
+ DumpVsn = [list_to_integer(L) ||
+ L<-string:tokens(DumpVsn0,".")],
+ Binaries = read_binaries(Fd,DumpVsn),
close(Fd),
- background_done({R,File,Binaries});
+ {ok,Binaries,DumpVsn};
_Other ->
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"~s is not an Erlang crash dump~n",
[File]),
close(Fd),
- background_done({R,undefined,undefined})
+ {error,R}
end;
{ok,<<"<Erlang crash dump>",_Rest/binary>>} ->
%% old version - no longer supported
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"The crashdump ~s is in the pre-R10B format, "
"which is no longer supported.~n",
- [File]),
+ [File]),
close(Fd),
- background_done({R,undefined,undefined});
+ {error,R};
_Other ->
- R = crashdump_viewer_html:error(
+ R = io_lib:format(
"~s is not an Erlang crash dump~n",
[File]),
close(Fd),
- background_done({R,undefined,undefined})
+ {error,R}
end;
_other ->
- R = crashdump_viewer_html:error("~s is not an Erlang crash dump~n",
- [File]),
- background_done({R,undefined,undefined})
+ R = io_lib:format("~s is not an Erlang crash dump~n",[File]),
+ {error,R}
end.
indexify(Fd,Bin,N) ->
@@ -1244,7 +820,7 @@ indexify(Fd,Bin,N) ->
put(last_tag,{Tag,Id}),
indexify(Fd,Rest,N1);
nomatch ->
- case read(Fd) of
+ case progress_read(Fd) of
{ok,Chunk0} when is_binary(Chunk0) ->
{Chunk,N1} =
case binary:last(Bin) of
@@ -1272,7 +848,7 @@ tag(Fd,<<Char:8,Rest/binary>>,N,Gat,Di,tag) ->
tag(Fd,<<Char:8,Rest/binary>>,N,Gat,Di,id) ->
tag(Fd,Rest,N+1,Gat,[Char|Di],id);
tag(Fd,<<>>,N,Gat,Di,Now) ->
- case read(Fd) of
+ case progress_read(Fd) of
{ok,Chunk} when is_binary(Chunk) ->
tag(Fd,Chunk,N,Gat,Di,Now);
eof ->
@@ -1304,21 +880,12 @@ find_truncated_proc({Tag,Pid}) ->
is_proc_tag(Tag) when Tag==?proc;
Tag==?proc_dictionary;
Tag==?proc_messages;
- Tag==?debug_proc_dictionary;
Tag==?proc_stack;
Tag==?proc_heap ->
true;
is_proc_tag(_) ->
false.
-%%% Inform the crashdump_viewer_server that a background job is completed.
-background_done(Result) ->
- Dict = get(),
- cast({background_done,Result,Dict}).
-
-background_status(Status) ->
- cast({background_status,Status}).
-
%%%-----------------------------------------------------------------
%%% Functions for reading information from the dump
general_info(File) ->
@@ -1330,22 +897,18 @@ general_info(File) ->
WholeLine -> WholeLine
end,
- GI0 = get_general_info(Fd,#general_info{created=Created}),
- GI = case GI0#general_info.num_atoms of
- ?space -> GI0#general_info{num_atoms=get_num_atoms(Fd)};
- _ -> GI0
- end,
+ GI = get_general_info(Fd,#general_info{created=Created}),
{MemTot,MemMax} =
case lookup_index(?memory) of
[{_,MemStart}] ->
pos_bof(Fd,MemStart),
Memory = get_meminfo(Fd,[]),
- Tot = case lists:keysearch("total",1,Memory) of
+ Tot = case lists:keysearch(total,1,Memory) of
{value,{_,T}} -> T;
false -> ""
end,
- Max = case lists:keysearch("maximum",1,Memory) of
+ Max = case lists:keysearch(maximum,1,Memory) of
{value,{_,M}} -> M;
false -> ""
end,
@@ -1408,269 +971,210 @@ get_general_info(Fd,GenInfo) ->
GenInfo
end.
-get_num_atoms(Fd) ->
- case lookup_index(?hash_table,"atom_tab") of
- [{_,Pos}] ->
- pos_bof(Fd,Pos),
- skip_rest_of_line(Fd), % size
- skip_rest_of_line(Fd), % used
- case line_head(Fd) of
- "objs" ->
- val(Fd);
- _1 ->
- get_num_atoms2()
- end;
- [] ->
- get_num_atoms2()
- end.
-get_num_atoms2() ->
- case lookup_index(?num_atoms) of
- [] ->
- ?space;
- [{NA,_Pos}] ->
- %% If dump is translated this will exist
- case get(truncated) of
- true ->
- [NA," (visible in dump)"]; % might be more
- false ->
- NA
- end
- end.
-
count() ->
{count_index(?proc),count_index(?ets),count_index(?fu),count_index(?timer)}.
%%-----------------------------------------------------------------
%% Page with all processes
-%%
-%% If there are less than ?max_sort_process_num processes in the dump,
-%% we will store the list of processes in the server state in order to
-%% allow sorting according to the different columns of the
-%% table. Since ?max_sort_process_num=:=?items_chunk_size, there will
-%% never be more than one chunk in this case.
-%%
-%% If there are more than ?max_sort_process_num processes in the dump,
-%% no sorting will be allowed, and the processes must be read (chunk
-%% by chunk) from the file each time the page is opened. This is to
-%% avoid really big data in the server state.
-procs_summary(SessionId,TW,_,State=#state{procs_summary=too_many}) ->
- chunk_page(SessionId,State#state.file,TW,?proc,processes,
- {no_sort,State#state.shared_heap,State#state.dump_vsn},
- procs_summary_parsefun()),
- State;
-procs_summary(SessionId,TW,SortOn,State) ->
- ProcsSummary =
- case State#state.procs_summary of
- undefined -> % first time - read from file
- Fd = open(State#state.file),
- {PS,_}=lookup_and_parse_index_chunk(first_chunk_pointer(?proc),
- Fd,procs_summary_parsefun()),
- close(Fd),
- PS;
- PS ->
- PS
- end,
- {SortedPS,NewSorted} = do_sort_procs(SortOn,ProcsSummary,State),
- HtmlInfo =
- crashdump_viewer_html:chunk_page(processes,SessionId,TW,
- {SortOn,
- State#state.shared_heap,
- State#state.dump_vsn},
- SortedPS),
- crashdump_viewer_html:chunk(SessionId,done,HtmlInfo),
- State#state{procs_summary=ProcsSummary,sorted=NewSorted}.
-
-procs_summary_parsefun() ->
- fun(Fd,Pid) ->
- get_procinfo(Fd,fun main_procinfo/4,#proc{pid=Pid})
- end.
+procs_summary(File,WS) ->
+ ParseFun = fun(Fd,Pid) ->
+ Proc = get_procinfo(Fd,fun main_procinfo/5,
+ #proc{pid=list_to_pid(Pid)},WS),
+ case Proc#proc.memory of
+ undefined -> Proc#proc{memory=Proc#proc.stack_heap};
+ _ -> Proc
+ end
+ end,
+ lookup_and_parse_index(File,?proc,ParseFun,"processes").
%%-----------------------------------------------------------------
%% Page with one process
-get_proc_details(File,Pid,DumpVsn) ->
+get_proc_details(File,Pid,WS,DumpVsn,Binaries) ->
case lookup_index(?proc,Pid) of
[{_,Start}] ->
Fd = open(File),
- pos_bof(Fd,Start),
- Proc0 =
- case DumpVsn of
- [0,0] ->
- %% Old version (translated)
- #proc{pid=Pid};
- _ ->
- #proc{pid=Pid,
- stack_dump=if_exist(?proc_stack,Pid),
- msg_q=if_exist(?proc_messages,Pid),
- dict=if_exist(?proc_dictionary,Pid),
- debug_dict=if_exist(?debug_proc_dictionary,Pid)}
+ {{Stack,MsgQ,Dict},TW} =
+ case truncated_warning([{?proc,Pid}]) of
+ [] ->
+ {expand_memory(Fd,Pid,DumpVsn,Binaries),[]};
+ TW0 ->
+ {{[],[],[]},TW0}
end,
- Proc = get_procinfo(Fd,fun all_procinfo/4,Proc0),
+ pos_bof(Fd,Start),
+ Proc0 = #proc{pid=Pid,stack_dump=Stack,msg_q=MsgQ,dict=Dict},
+ Proc = get_procinfo(Fd,fun all_procinfo/5,Proc0,WS),
close(Fd),
- {ok,Proc};
+ {ok,Proc,TW};
_ ->
- case maybe_other_node(File,Pid) of
- {other_node,Type,Node} ->
- Info = "The process you are searching for was residing on "
- "a remote node. No process information is available. "
- "Information about the remote node is show below.",
- {other_node,{Type,Info,Node}};
- not_found ->
- not_found
- end
- end.
-
-if_exist(Tag,Key) ->
- case count_index(Tag,Key) of
- 0 ->
- Tag1 =
- case is_proc_tag(Tag) of
- true -> ?proc;
- false -> Tag
- end,
- case truncated_here({Tag1,Key}) of
- true -> truncated;
- false -> ?space
- end;
- _ ->
- expand
+ maybe_other_node(Pid)
end.
-get_procinfo(Fd,Fun,Proc) ->
+get_procinfo(Fd,Fun,Proc,WS) ->
case line_head(Fd) of
"State" ->
State = case val(Fd) of
"Garbing" -> "Garbing\n(limited info)";
State0 -> State0
end,
- get_procinfo(Fd,Fun,Proc#proc{state=State});
+ get_procinfo(Fd,Fun,Proc#proc{state=State},WS);
"Name" ->
- get_procinfo(Fd,Fun,Proc#proc{name=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{name=val(Fd)},WS);
"Spawned as" ->
IF = val(Fd),
case Proc#proc.name of
- ?space ->
- get_procinfo(Fd,Fun,Proc#proc{name=IF,init_func=IF});
+ undefined ->
+ get_procinfo(Fd,Fun,Proc#proc{name=IF,init_func=IF},WS);
_ ->
- get_procinfo(Fd,Fun,Proc#proc{init_func=IF})
+ get_procinfo(Fd,Fun,Proc#proc{init_func=IF},WS)
end;
+ "Message queue length" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{msg_q_len=list_to_integer(val(Fd))},WS);
+ "Reductions" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{reds=list_to_integer(val(Fd))},WS);
+ "Stack+heap" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{stack_heap=
+ list_to_integer(val(Fd))*WS},WS);
+ "Memory" ->
+ %% stored as integer so we can sort on it
+ get_procinfo(Fd,Fun,Proc#proc{memory=list_to_integer(val(Fd))},WS);
+ {eof,_} ->
+ Proc; % truncated file
+ Other ->
+ Fun(Fd,Fun,Proc,WS,Other)
+ end.
+
+main_procinfo(Fd,Fun,Proc,WS,LineHead) ->
+ case LineHead of
+ "=" ++ _next_tag ->
+ Proc;
+ "arity = " ++ _ ->
+ %%! Temporary workaround
+ get_procinfo(Fd,Fun,Proc,WS);
+ _Other ->
+ skip_rest_of_line(Fd),
+ get_procinfo(Fd,Fun,Proc,WS)
+ end.
+all_procinfo(Fd,Fun,Proc,WS,LineHead) ->
+ case LineHead of
+ %% - START - moved from get_procinfo -
"Spawned by" ->
case val(Fd) of
"[]" ->
- get_procinfo(Fd,Fun,Proc);
+ get_procinfo(Fd,Fun,Proc,WS);
Parent ->
- get_procinfo(Fd,Fun,Proc#proc{parent=Parent})
+ get_procinfo(Fd,Fun,Proc#proc{parent=Parent},WS)
end;
"Started" ->
- get_procinfo(Fd,Fun,Proc#proc{start_time=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{start_time=val(Fd)},WS);
"Last scheduled in for" ->
get_procinfo(Fd,Fun,Proc#proc{current_func=
{"Last scheduled in for",
- val(Fd)}});
+ val(Fd)}},WS);
"Current call" ->
get_procinfo(Fd,Fun,Proc#proc{current_func={"Current call",
- val(Fd)}});
- "Message queue length" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{msg_q_len=list_to_integer(val(Fd))});
- "Reductions" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{reds=list_to_integer(val(Fd))});
+ val(Fd)}},WS);
"Number of heap fragments" ->
- get_procinfo(Fd,Fun,Proc#proc{num_heap_frag=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{num_heap_frag=val(Fd)},WS);
"Heap fragment data" ->
- get_procinfo(Fd,Fun,Proc#proc{heap_frag_data=val(Fd)});
- Stack when Stack=:="Stack+heap"; Stack=:="Stack" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{stack_heap=
- list_to_integer(val(Fd))});
+ get_procinfo(Fd,Fun,Proc#proc{heap_frag_data=val(Fd)},WS);
"OldHeap" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{old_heap=Bytes},WS);
"Heap unused" ->
- get_procinfo(Fd,Fun,Proc#proc{heap_unused=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{heap_unused=Bytes},WS);
"OldHeap unused" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_unused=val(Fd)});
+ Bytes = list_to_integer(val(Fd))*WS,
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_unused=Bytes},WS);
"New heap start" ->
- get_procinfo(Fd,Fun,Proc#proc{new_heap_start=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{new_heap_start=val(Fd)},WS);
"New heap top" ->
- get_procinfo(Fd,Fun,Proc#proc{new_heap_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{new_heap_top=val(Fd)},WS);
"Stack top" ->
- get_procinfo(Fd,Fun,Proc#proc{stack_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{stack_top=val(Fd)},WS);
"Stack end" ->
- get_procinfo(Fd,Fun,Proc#proc{stack_end=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{stack_end=val(Fd)},WS);
"Old heap start" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_start=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_start=val(Fd)},WS);
"Old heap top" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_top=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_top=val(Fd)},WS);
"Old heap end" ->
- get_procinfo(Fd,Fun,Proc#proc{old_heap_end=val(Fd)});
- "Memory" ->
- %% stored as integer so we can sort on it
- get_procinfo(Fd,Fun,Proc#proc{memory=list_to_integer(val(Fd))});
- {eof,_} ->
- Proc; % truncated file
- Other ->
- Fun(Fd,Fun,Proc,Other)
- end.
-
-main_procinfo(Fd,Fun,Proc,LineHead) ->
- case LineHead of
- "Stack dump" ->
- %% This is the last element in older dumps (DumpVsn=0.0)
- Proc;
- "=" ++ _next_tag ->
- %% DumpVsn=0.1 or newer: No stack dump here
- Proc;
- "arity = " ++ _ ->
- %%! Temporary workaround
- get_procinfo(Fd,Fun,Proc);
- _Other ->
- skip_rest_of_line(Fd),
- get_procinfo(Fd,Fun,Proc)
- end.
-all_procinfo(Fd,Fun,Proc,LineHead) ->
- case LineHead of
- "Message queue" ->
- get_procinfo(Fd,Fun,Proc#proc{msg_q=size_or_term(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{old_heap_end=val(Fd)},WS);
+ %% - END - moved from get_procinfo -
"Last calls" ->
- R = case size_or_term(Fd) of
- SizeThing when is_tuple(SizeThing) ->
- Proc#proc{last_calls=SizeThing};
- Term ->
- Proc#proc{last_calls=replace_all($ ,$\n,Term,[])}
- end,
- get_procinfo(Fd,Fun,R);
+ get_procinfo(Fd,Fun,Proc#proc{last_calls=get_lines_to_empty(Fd)},WS);
"Link list" ->
- get_procinfo(Fd,Fun,Proc#proc{links=val(Fd)});
+ {Links,Monitors,MonitoredBy} = parse_link_list(val(Fd),[],[],[]),
+ get_procinfo(Fd,Fun,Proc#proc{links=Links,
+ monitors=Monitors,
+ mon_by=MonitoredBy},WS);
"Program counter" ->
- get_procinfo(Fd,Fun,Proc#proc{prog_count=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{prog_count=val(Fd)},WS);
"CP" ->
- get_procinfo(Fd,Fun,Proc#proc{cp=val(Fd)});
+ get_procinfo(Fd,Fun,Proc#proc{cp=val(Fd)},WS);
"arity = " ++ Arity ->
%%! Temporary workaround
- get_procinfo(Fd,Fun,Proc#proc{arity=Arity--"\r\n"});
- "Dictionary" ->
- get_procinfo(Fd,Fun,Proc#proc{dict=size_or_term(Fd)});
- "$Dictionary" ->
- get_procinfo(Fd,Fun,Proc#proc{debug_dict=size_or_term(Fd)});
- "Stack dump" ->
- %% This is the last element in older dumps (DumpVsn=0.0)
- get_stack_dump(Fd,Proc);
+ get_procinfo(Fd,Fun,Proc#proc{arity=Arity--"\r\n"},WS);
"=" ++ _next_tag ->
- %% DumpVsn=0.1 or newer: No stack dump here
Proc;
Other ->
unexpected(Fd,Other,"process info"),
- get_procinfo(Fd,Fun,Proc)
+ get_procinfo(Fd,Fun,Proc,WS)
+ end.
+
+parse_link_list([SB|Str],Links,Monitors,MonitoredBy) when SB==$[; SB==$] ->
+ parse_link_list(Str,Links,Monitors,MonitoredBy);
+parse_link_list("#Port"++_=Str,Links,Monitors,MonitoredBy) ->
+ {Link,Rest} = parse_port(Str),
+ parse_link_list(Rest,[Link|Links],Monitors,MonitoredBy);
+parse_link_list("<"++_=Str,Links,Monitors,MonitoredBy) ->
+ {Link,Rest} = parse_pid(Str),
+ parse_link_list(Rest,[Link|Links],Monitors,MonitoredBy);
+parse_link_list("{to,"++Str,Links,Monitors,MonitoredBy) ->
+ {Mon,Rest} = parse_monitor(Str),
+ parse_link_list(Rest,Links,[Mon|Monitors],MonitoredBy);
+parse_link_list("{from,"++Str,Links,Monitors,MonitoredBy) ->
+ {Mon,Rest} = parse_monitor(Str),
+ parse_link_list(Rest,Links,Monitors,[Mon|MonitoredBy]);
+parse_link_list(", "++Rest,Links,Monitors,MonitoredBy) ->
+ parse_link_list(Rest,Links,Monitors,MonitoredBy);
+parse_link_list([],Links,Monitors,MonitoredBy) ->
+ {lists:reverse(Links),lists:reverse(Monitors),lists:reverse(MonitoredBy)}.
+
+parse_port(Str) ->
+ {Port,Rest} = parse_link(Str,[]),
+ {{Port,Port},Rest}.
+
+parse_pid(Str) ->
+ {Pid,Rest} = parse_link(Str,[]),
+ {{Pid,Pid},Rest}.
+
+parse_monitor(Str) ->
+ case parse_link(Str,[]) of
+ {Pid,","++Rest1} ->
+ case parse_link(Rest1,[]) of
+ {Ref,"}"++Rest2} ->
+ {{Pid,Pid++" ("++Ref++")"},Rest2};
+ {Ref,[]} ->
+ {{Pid,Pid++" ("++Ref++")"},[]}
+ end;
+ {Pid,[]} ->
+ {{Pid,Pid++" (unknown_ref)"},[]}
end.
-get_stack_dump(Fd,Proc) ->
- %% Always show stackdump as "Expand" link
- Pos = get(pos),
- Size = count_rest_of_tag(Fd),
- Proc#proc{stack_dump={size,true,Size,Pos}}.
+parse_link(">"++Rest,Acc) ->
+ {lists:reverse(Acc,">"),Rest};
+parse_link([H|T],Acc) ->
+ parse_link(T,[H|Acc]);
+parse_link([],Acc) ->
+ %% truncated
+ {lists:reverse(Acc),[]}.
-maybe_other_node(File,Id) ->
+maybe_other_node(Id) ->
Channel =
case split($.,Id) of
{"<" ++ N, _Rest} ->
@@ -1688,99 +1192,77 @@ maybe_other_node(File,Id) ->
end),
case ets:select(cdv_dump_index_table,Ms) of
- [] ->
+ [] ->
not_found;
- [{Type,Pos}] ->
- Fd = open(File),
- NodeInfo = get_nodeinfo(Fd,Channel,Pos),
- close(Fd),
- {other_node,Type,NodeInfo}
+ [_] ->
+ {other_node,Channel}
end.
-expand_memory(File,What,Pid,Binaries) ->
- Fd = open(File),
+expand_memory(Fd,Pid,DumpVsn,Binaries) ->
+ BinAddrAdj = get_bin_addr_adj(DumpVsn),
put(fd,Fd),
- Dict = read_heap(Fd,Pid,Binaries),
- Expanded =
- case What of
- "StackDump" -> read_stack_dump(Fd,Pid,Dict);
- "MsgQueue" -> read_messages(Fd,Pid,Dict);
- "Dictionary" -> read_dictionary(Fd,?proc_dictionary,Pid,Dict);
- "DebugDictionary" -> read_dictionary(Fd,?debug_proc_dictionary,Pid,Dict)
- end,
+ Dict = read_heap(Fd,Pid,BinAddrAdj,Binaries),
+ Expanded = {read_stack_dump(Fd,Pid,BinAddrAdj,Dict),
+ read_messages(Fd,Pid,BinAddrAdj,Dict),
+ read_dictionary(Fd,Pid,BinAddrAdj,Dict)},
erase(fd),
- close(Fd),
Expanded.
-
+
+%%%-----------------------------------------------------------------
+%%% This is a workaround for a bug in dump versions prior to 0.3:
+%%% Addresses were truncated to 32 bits. This could cause binaries to
+%%% get the same address as heap terms in the dump. To work around it
+%%% we always store binaries on very high addresses in the gb_tree.
+get_bin_addr_adj(DumpVsn) when DumpVsn < [0,3] ->
+ 16#f bsl 64;
+get_bin_addr_adj(_) ->
+ 0.
+
%%%
%%% Read binaries.
%%%
-read_binaries(Fd) ->
+read_binaries(Fd,DumpVsn) ->
AllBinaries = lookup_index(?binary),
- read_binaries(Fd,AllBinaries, gb_trees:empty()).
-
-read_binaries(Fd,[{Addr0,Pos}|Bins],Dict0) ->
- pos_bof(Fd,Pos),
- {Addr,_} = get_hex(Addr0),
- Dict =
- case line_head(Fd) of
- {eof,_} ->
- gb_trees:enter(Addr,'#CDVTruncatedBinary',Dict0);
- Size0 ->
- {Size,_} = get_hex(Size0),
- if Size > ?max_display_binary_size ->
- gb_trees:enter(Addr,{'#CDVTooBig',binary,Pos},Dict0);
- true ->
- pos_bof(Fd,Pos),
- Line = val(Fd),
- parse_binary(Addr,Line,Dict0)
- end
- end,
- read_binaries(Fd,Bins,Dict);
-read_binaries(_Fd,[],Dict) ->
- Dict.
-
-parse_binary(Addr, Line0, Dict) ->
- case get_hex(Line0) of
- {N,":"++Line1} ->
- {Bin,Line} = get_binary(N, Line1, []),
- [] = skip_blanks(Line),
- gb_trees:enter(Addr, Bin, Dict);
- {_N,[]} ->
- %% If the dump is truncated before the ':' in this line, then
- %% line_head/1 might not discover it (if a \n has been inserted
- %% somehow???)
- gb_trees:enter(Addr,'#CDVTruncatedBinary',Dict)
- end.
-
-
+ AddrAdj = get_bin_addr_adj(DumpVsn),
+ Fun = fun({Addr0,Pos},Dict0) ->
+ pos_bof(Fd,Pos),
+ {HexAddr,_} = get_hex(Addr0),
+ Addr = HexAddr bor AddrAdj,
+ Bin =
+ case line_head(Fd) of
+ {eof,_} -> '#CDVTruncatedBinary';
+ _Size -> {'#CDVBin',Pos}
+ end,
+ gb_trees:enter(Addr,Bin,Dict0)
+ end,
+ progress_foldl("Processing binaries",Fun,gb_trees:empty(),AllBinaries).
%%%
%%% Read top level section.
%%%
-read_stack_dump(Fd,Pid,Dict) ->
+read_stack_dump(Fd,Pid,BinAddrAdj,Dict) ->
case lookup_index(?proc_stack,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_stack_dump1(Fd,Dict,[]);
+ read_stack_dump1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_stack_dump1(Fd,Dict,Acc) ->
+read_stack_dump1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Stack = parse_top(Line,Dict),
- read_stack_dump1(Fd,Dict,[Stack|Acc])
+ Stack = parse_top(Line,BinAddrAdj,Dict),
+ read_stack_dump1(Fd,BinAddrAdj,Dict,[Stack|Acc])
end.
-parse_top(Line0, D) ->
+parse_top(Line0, BinAddrAdj, D) ->
{Label,Line1} = get_label(Line0),
- {Term,Line,D} = parse_term(Line1, D),
+ {Term,Line,D} = parse_term(Line1, BinAddrAdj, D),
[] = skip_blanks(Line),
{Label,Term}.
@@ -1788,27 +1270,27 @@ parse_top(Line0, D) ->
%%% Read message queue.
%%%
-read_messages(Fd,Pid,Dict) ->
+read_messages(Fd,Pid,BinAddrAdj,Dict) ->
case lookup_index(?proc_messages,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_messages1(Fd,Dict,[]);
+ read_messages1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_messages1(Fd,Dict,Acc) ->
+read_messages1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Msg = parse_message(Line,Dict),
- read_messages1(Fd,Dict,[Msg|Acc])
+ Msg = parse_message(Line,BinAddrAdj,Dict),
+ read_messages1(Fd,BinAddrAdj,Dict,[Msg|Acc])
end.
-parse_message(Line0, D) ->
- {Msg,":"++Line1,_} = parse_term(Line0, D),
- {Token,Line,_} = parse_term(Line1, D),
+parse_message(Line0, BinAddrAdj, D) ->
+ {Msg,":"++Line1,_} = parse_term(Line0, BinAddrAdj, D),
+ {Token,Line,_} = parse_term(Line1, BinAddrAdj, D),
[] = skip_blanks(Line),
{Msg,Token}.
@@ -1816,26 +1298,26 @@ parse_message(Line0, D) ->
%%% Read process dictionary
%%%
-read_dictionary(Fd,Tag,Pid,Dict) ->
- case lookup_index(Tag,Pid) of
+read_dictionary(Fd,Pid,BinAddrAdj,Dict) ->
+ case lookup_index(?proc_dictionary,Pid) of
[{_,Start}] ->
pos_bof(Fd,Start),
- read_dictionary1(Fd,Dict,[]);
+ read_dictionary1(Fd,BinAddrAdj,Dict,[]);
[] ->
[]
end.
-read_dictionary1(Fd,Dict,Acc) ->
+read_dictionary1(Fd,BinAddrAdj,Dict,Acc) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case val(Fd) of
"=" ++ _next_tag ->
lists:reverse(Acc);
Line ->
- Msg = parse_dictionary(Line,Dict),
- read_dictionary1(Fd,Dict,[Msg|Acc])
+ Msg = parse_dictionary(Line,BinAddrAdj,Dict),
+ read_dictionary1(Fd,BinAddrAdj,Dict,[Msg|Acc])
end.
-parse_dictionary(Line0, D) ->
- {Entry,Line,_} = parse_term(Line0, D),
+parse_dictionary(Line0, BinAddrAdj, D) ->
+ {Entry,Line,_} = parse_term(Line0, BinAddrAdj, D),
[] = skip_blanks(Line),
Entry.
@@ -1843,16 +1325,16 @@ parse_dictionary(Line0, D) ->
%%% Read heap data.
%%%
-read_heap(Fd,Pid,Dict0) ->
+read_heap(Fd,Pid,BinAddrAdj,Dict0) ->
case lookup_index(?proc_heap,Pid) of
[{_,Pos}] ->
pos_bof(Fd,Pos),
- read_heap(Dict0);
+ read_heap(BinAddrAdj,Dict0);
[] ->
Dict0
end.
-read_heap(Dict0) ->
+read_heap(BinAddrAdj,Dict0) ->
%% This function is never called if the dump is truncated in {?proc_heap,Pid}
case get(fd) of
end_of_heap ->
@@ -1863,68 +1345,18 @@ read_heap(Dict0) ->
put(fd, end_of_heap),
Dict0;
Line ->
- Dict = parse(Line,Dict0),
- read_heap(Dict)
+ Dict = parse(Line,BinAddrAdj,Dict0),
+ read_heap(BinAddrAdj,Dict)
end
end.
-parse(Line0, Dict0) ->
+parse(Line0, BinAddrAdj, Dict0) ->
{Addr,":"++Line1} = get_hex(Line0),
- {_Term,Line,Dict} = parse_heap_term(Line1, Addr, Dict0),
+ {_Term,Line,Dict} = parse_heap_term(Line1, Addr, BinAddrAdj, Dict0),
[] = skip_blanks(Line),
Dict.
-do_sort_procs("state",Procs,#state{sorted="state"}) ->
- {lists:reverse(lists:keysort(#proc.state,Procs)),"rstate"};
-do_sort_procs("state",Procs,_) ->
- {lists:keysort(#proc.state,Procs),"state"};
-do_sort_procs("pid",Procs,#state{sorted="pid"}) ->
- {lists:reverse(Procs),"rpid"};
-do_sort_procs("pid",Procs,_) ->
- {Procs,"pid"};
-do_sort_procs("msg_q_len",Procs,#state{sorted="msg_q_len"}) ->
- {lists:keysort(#proc.msg_q_len,Procs),"rmsg_q_len"};
-do_sort_procs("msg_q_len",Procs,_) ->
- {lists:reverse(lists:keysort(#proc.msg_q_len,Procs)),"msg_q_len"};
-do_sort_procs("reds",Procs,#state{sorted="reds"}) ->
- {lists:keysort(#proc.reds,Procs),"rreds"};
-do_sort_procs("reds",Procs,_) ->
- {lists:reverse(lists:keysort(#proc.reds,Procs)),"reds"};
-do_sort_procs("mem",Procs,#state{sorted="mem",dump_vsn=DumpVsn}) ->
- KeyPos = if DumpVsn>=?r16b01_dump_vsn -> #proc.memory;
- true -> #proc.stack_heap
- end,
- {lists:keysort(KeyPos,Procs),"rmem"};
-do_sort_procs("mem",Procs,#state{dump_vsn=DumpVsn}) ->
- KeyPos = if DumpVsn>=?r16b01_dump_vsn -> #proc.memory;
- true -> #proc.stack_heap
- end,
- {lists:reverse(lists:keysort(KeyPos,Procs)),"mem"};
-do_sort_procs("init_func",Procs,#state{sorted="init_func"}) ->
- {lists:reverse(lists:keysort(#proc.init_func,Procs)),"rinit_func"};
-do_sort_procs("init_func",Procs,_) ->
- {lists:keysort(#proc.init_func,Procs),"init_func"};
-do_sort_procs("name_func",Procs,#state{sorted="name_func"}) ->
- {lists:reverse(lists:keysort(#proc.name,Procs)),"rname_func"};
-do_sort_procs("name_func",Procs,_) ->
- {lists:keysort(#proc.name,Procs),"name_func"};
-do_sort_procs("name",Procs,#state{sorted=Sorted}) ->
- {No,Yes} =
- lists:foldl(fun(P,{N,Y}) ->
- case P#proc.name of
- ?space -> {[P|N],Y};
- _other -> {N,[P|Y]}
- end
- end,
- {[],[]},
- Procs),
- Result = lists:keysort(#proc.name,Yes) ++ No,
- case Sorted of
- "name" -> {lists:reverse(Result),"rname"};
- _ -> {Result,"name"}
- end.
-
%%-----------------------------------------------------------------
%% Page with one port
get_port(File,Port) ->
@@ -1936,46 +1368,59 @@ get_port(File,Port) ->
close(Fd),
{ok,R};
[] ->
- case maybe_other_node(File,Port) of
- {other_node,Type,Node} ->
- Info = "The port you are searching for was residing on "
- "a remote node. No port information is available. "
- "Information about the remote node is show below.",
- {other_node,{Type,Info,Node}};
- not_found ->
- not_found
- end
+ maybe_other_node(Port)
end.
%%-----------------------------------------------------------------
%% Page with all ports
-get_ports(SessionId,File,TW) ->
- ParseFun = fun(Fd,Id) -> get_portinfo(Fd,#port{id=Id}) end,
- chunk_page(SessionId,File,TW,?port,ports,[],ParseFun).
+get_ports(File) ->
+ ParseFun = fun(Fd,Id) -> get_portinfo(Fd,#port{id=port_to_tuple(Id)}) end,
+ lookup_and_parse_index(File,?port,ParseFun,"ports").
+
+%% Converting port string to tuple to secure correct sorting. This is
+%% converted back in cdv_port_cb:format/1.
+port_to_tuple("#Port<"++Port) ->
+ [I1,I2] = string:tokens(Port,".>"),
+ {list_to_integer(I1),list_to_integer(I2)}.
get_portinfo(Fd,Port) ->
case line_head(Fd) of
"Slot" ->
- get_portinfo(Fd,Port#port{slot=val(Fd)});
+ %% stored as integer so we can sort on it
+ get_portinfo(Fd,Port#port{slot=list_to_integer(val(Fd))});
"Connected" ->
- get_portinfo(Fd,Port#port{connected=val(Fd)});
+ %% stored as pid so we can sort on it
+ Connected0 = val(Fd),
+ Connected =
+ try list_to_pid(Connected0)
+ catch error:badarg -> Connected0
+ end,
+ get_portinfo(Fd,Port#port{connected=Connected});
"Links" ->
- get_portinfo(Fd,Port#port{links=val(Fd)});
+ Pids = split_pid_list_no_space(val(Fd)),
+ Links = [{Pid,Pid} || Pid <- Pids],
+ get_portinfo(Fd,Port#port{links=Links});
"Registered as" ->
get_portinfo(Fd,Port#port{name=val(Fd)});
"Monitors" ->
- get_portinfo(Fd,Port#port{monitors=val(Fd)});
+ Monitors0 = string:tokens(val(Fd),"()"),
+ Monitors = [begin
+ [Pid,Ref] = string:tokens(Mon,","),
+ {Pid,Pid++" ("++Ref++")"}
+ end || Mon <- Monitors0],
+ get_portinfo(Fd,Port#port{monitors=Monitors});
"Port controls linked-in driver" ->
- get_portinfo(Fd,Port#port{controls=["Linked in driver: " |
- val(Fd)]});
+ Str = lists:flatten(["Linked in driver: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port controls external process" ->
- get_portinfo(Fd,Port#port{controls=["External proc: " | val(Fd)]});
+ Str = lists:flatten(["External proc: " | val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port is a file" ->
- get_portinfo(Fd,Port#port{controls=["File: "| val(Fd)]});
+ Str = lists:flatten(["File: "| val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"Port is UNIX fd not opened by emulator" ->
- get_portinfo(Fd,Port#port{
- controls=["UNIX fd not opened by emulator: "|
- val(Fd)]});
+ Str = lists:flatten(["UNIX fd not opened by emulator: "| val(Fd)]),
+ get_portinfo(Fd,Port#port{controls=Str});
"=" ++ _next_tag ->
Port;
Other ->
@@ -1983,17 +1428,27 @@ get_portinfo(Fd,Port) ->
Port
end.
+split_pid_list_no_space(String) ->
+ split_pid_list_no_space(String,[],[]).
+split_pid_list_no_space([$>|Rest],Acc,Pids) ->
+ split_pid_list_no_space(Rest,[],[lists:reverse(Acc,[$>])|Pids]);
+split_pid_list_no_space([H|T],Acc,Pids) ->
+ split_pid_list_no_space(T,[H|Acc],Pids);
+split_pid_list_no_space([],[],Pids) ->
+ lists:reverse(Pids).
%%-----------------------------------------------------------------
%% Page with external ets tables
-get_ets_tables(SessionId,File,Heading,TW,Pid,WS) ->
- ParseFun = fun(Fd,Id) -> get_etsinfo(Fd,#ets_table{pid=Id},WS) end,
- chunk_page(SessionId,File,TW,{?ets,Pid},ets_tables,Heading,ParseFun).
+get_ets_tables(File,Pid,WS) ->
+ ParseFun = fun(Fd,Id) ->
+ get_etsinfo(Fd,#ets_table{pid=list_to_pid(Id)},WS)
+ end,
+ lookup_and_parse_index(File,{?ets,Pid},ParseFun,"ets").
get_etsinfo(Fd,EtsTable,WS) ->
case line_head(Fd) of
"Slot" ->
- get_etsinfo(Fd,EtsTable#ets_table{slot=val(Fd)},WS);
+ get_etsinfo(Fd,EtsTable#ets_table{slot=list_to_integer(val(Fd))},WS);
"Table" ->
get_etsinfo(Fd,EtsTable#ets_table{id=val(Fd)},WS);
"Name" ->
@@ -2002,15 +1457,18 @@ get_etsinfo(Fd,EtsTable,WS) ->
skip_rest_of_line(Fd),
get_etsinfo(Fd,EtsTable#ets_table{type="tree",buckets="-"},WS);
"Buckets" ->
- get_etsinfo(Fd,EtsTable#ets_table{buckets=val(Fd)},WS);
+ %% A bug in erl_db_hash.c prints a space after the buckets
+ %% - need to strip the string to make list_to_integer/1 happy.
+ Buckets = list_to_integer(string:strip(val(Fd))),
+ get_etsinfo(Fd,EtsTable#ets_table{buckets=Buckets},WS);
"Objects" ->
- get_etsinfo(Fd,EtsTable#ets_table{size=val(Fd)},WS);
+ get_etsinfo(Fd,EtsTable#ets_table{size=list_to_integer(val(Fd))},WS);
"Words" ->
Words = list_to_integer(val(Fd)),
Bytes =
case Words of
- -1 -> "-1"; % probably truncated
- _ -> integer_to_list(Words * WS)
+ -1 -> -1; % probably truncated
+ _ -> Words * WS
end,
get_etsinfo(Fd,EtsTable#ets_table{memory=Bytes},WS);
"=" ++ _next_tag ->
@@ -2036,16 +1494,17 @@ get_internal_ets_tables(File,WS) ->
%%-----------------------------------------------------------------
%% Page with list of all timers
-get_timers(SessionId,File,Heading,TW,Pid) ->
- ParseFun = fun(Fd,Id) -> get_timerinfo_1(Fd,#timer{pid=Id}) end,
- chunk_page(SessionId,File,TW,{?timer,Pid},timers,Heading,ParseFun).
+get_timers(File,Pid) ->
+ ParseFun = fun(Fd,Id) -> get_timerinfo_1(Fd,#timer{pid=list_to_pid(Id)}) end,
+ lookup_and_parse_index(File,{?timer,Pid},ParseFun,"timers").
get_timerinfo_1(Fd,Timer) ->
case line_head(Fd) of
"Message" ->
get_timerinfo_1(Fd,Timer#timer{msg=val(Fd)});
"Time left" ->
- get_timerinfo_1(Fd,Timer#timer{time=val(Fd)});
+ TimeLeft = list_to_integer(val(Fd) -- " ms"),
+ get_timerinfo_1(Fd,Timer#timer{time=TimeLeft});
"=" ++ _next_tag ->
Timer;
Other ->
@@ -2054,6 +1513,28 @@ get_timerinfo_1(Fd,Timer) ->
end.
%%-----------------------------------------------------------------
+%% Page with information about a node in the distribution
+get_node(File,Channel) ->
+ Ms = ets:fun2ms(
+ fun({{Tag,Start},Ch}) when Tag=:=?visible_node, Ch=:=Channel ->
+ {visible,Start};
+ ({{Tag,Start},Ch}) when Tag=:=?hidden_node, Ch=:=Channel ->
+ {hidden,Start};
+ ({{Tag,Start},Ch}) when Tag=:=?not_connected, Ch=:=Channel ->
+ {not_connected,Start}
+ end),
+
+ case ets:select(cdv_dump_index_table,Ms) of
+ [] ->
+ {error,not_found};
+ [{Type,Pos}] ->
+ Fd = open(File),
+ NodeInfo = get_nodeinfo(Fd,Channel,Type,Pos),
+ close(Fd),
+ {ok,NodeInfo}
+ end.
+
+%%-----------------------------------------------------------------
%% Page with information about the erlang distribution
nods(File) ->
case lookup_index(?no_distribution) of
@@ -2064,28 +1545,29 @@ nods(File) ->
Fd = open(File),
Visible = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,visible,Start)
end,
V),
Hidden = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,hidden,Start)
end,
H),
NotConnected = lists:map(
fun({Channel,Start}) ->
- get_nodeinfo(Fd,Channel,Start)
+ get_nodeinfo(Fd,Channel,not_connected,Start)
end,
N),
close(Fd),
- {Visible,Hidden,NotConnected};
+ Visible++Hidden++NotConnected;
[_] ->
- no_distribution
+ %% no_distribution
+ []
end.
-get_nodeinfo(Fd,Channel,Start) ->
+get_nodeinfo(Fd,Channel,Type,Start) ->
pos_bof(Fd,Start),
- get_nodeinfo(Fd,#nod{channel=Channel}).
+ get_nodeinfo(Fd,#nod{channel=list_to_integer(Channel),conn_type=Type}).
get_nodeinfo(Fd,Nod) ->
case line_head(Fd) of
@@ -2094,21 +1576,27 @@ get_nodeinfo(Fd,Nod) ->
"Controller" ->
get_nodeinfo(Fd,Nod#nod{controller=val(Fd)});
"Creation" ->
- get_nodeinfo(Fd,Nod#nod{creation=val(Fd)});
+ get_nodeinfo(Fd,Nod#nod{creation=list_to_integer(val(Fd))});
"Remote link" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteLinks = Nod#nod.remote_links,
- get_nodeinfo(Fd,Nod#nod{remote_links=[split(Procs)|RemoteLinks]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" <-> "++Remote,
+ NewRemLinks = [{Local,Str} | Nod#nod.remote_links],
+ get_nodeinfo(Fd,Nod#nod{remote_links=NewRemLinks});
"Remote monitoring" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteMon = Nod#nod.remote_mon,
- get_nodeinfo(Fd,Nod#nod{remote_mon=[split(Procs)|RemoteMon]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" -> "++Remote,
+ NewRemMon = [{Local,Str} | Nod#nod.remote_mon],
+ get_nodeinfo(Fd,Nod#nod{remote_mon=NewRemMon});
"Remotely monitored by" ->
Procs = val(Fd), % e.g. "<0.31.0> <4322.54.0>"
- RemoteMonBy = Nod#nod.remote_mon_by,
- get_nodeinfo(Fd,Nod#nod{remote_mon_by=[split(Procs)|RemoteMonBy]});
+ {Local,Remote} = split(Procs),
+ Str = Local++" <- "++Remote,
+ NewRemMonBy = [{Local,Str} | Nod#nod.remote_mon_by],
+ get_nodeinfo(Fd,Nod#nod{remote_mon_by=NewRemMonBy});
"Error" ->
- get_nodeinfo(Fd,Nod#nod{error=val(Fd)});
+ get_nodeinfo(Fd,Nod#nod{error="ERROR: "++val(Fd)});
"=" ++ _next_tag ->
Nod;
Other ->
@@ -2129,10 +1617,11 @@ get_loaded_mod_details(File,Mod) ->
%%-----------------------------------------------------------------
%% Page with list of all loaded modules
-loaded_mods(SessionId,File,TW) ->
+loaded_mods(File) ->
ParseFun =
fun(Fd,Id) ->
- get_loaded_mod_info(Fd,#loaded_mod{mod=Id},
+ get_loaded_mod_info(Fd,
+ #loaded_mod{mod=get_atom(list_to_binary(Id))},
fun main_modinfo/3)
end,
{CC,OC} =
@@ -2146,7 +1635,7 @@ loaded_mods(SessionId,File,TW) ->
[] ->
{"unknown","unknown"}
end,
- chunk_page(SessionId,File,TW,?mod,loaded_mods,{CC,OC},ParseFun).
+ {CC,OC,lookup_and_parse_index(File,?mod,ParseFun,"modules")}.
get_loaded_mod_totals(Fd,{CC,OC}) ->
case line_head(Fd) of
@@ -2164,9 +1653,11 @@ get_loaded_mod_totals(Fd,{CC,OC}) ->
get_loaded_mod_info(Fd,LM,Fun) ->
case line_head(Fd) of
"Current size" ->
- get_loaded_mod_info(Fd,LM#loaded_mod{current_size=val(Fd)},Fun);
+ CS = list_to_integer(val(Fd)),
+ get_loaded_mod_info(Fd,LM#loaded_mod{current_size=CS},Fun);
"Old size" ->
- get_loaded_mod_info(Fd,LM#loaded_mod{old_size=val(Fd)},Fun);
+ OS = list_to_integer(val(Fd)),
+ get_loaded_mod_info(Fd,LM#loaded_mod{old_size=OS},Fun);
"=" ++ _next_tag ->
LM;
{eof,_} ->
@@ -2229,24 +1720,24 @@ hex_to_dec(N) -> list_to_integer(N).
%%-----------------------------------------------------------------
%% Page with list of all funs
-funs(SessionId,File,TW) ->
+funs(File) ->
ParseFun = fun(Fd,_Id) -> get_funinfo(Fd,#fu{}) end,
- chunk_page(SessionId,File,TW,?fu,funs,[],ParseFun).
+ lookup_and_parse_index(File,?fu,ParseFun,"funs").
get_funinfo(Fd,Fu) ->
case line_head(Fd) of
"Module" ->
get_funinfo(Fd,Fu#fu{module=val(Fd)});
"Uniq" ->
- get_funinfo(Fd,Fu#fu{uniq=val(Fd)});
+ get_funinfo(Fd,Fu#fu{uniq=list_to_integer(val(Fd))});
"Index" ->
- get_funinfo(Fd,Fu#fu{index=val(Fd)});
+ get_funinfo(Fd,Fu#fu{index=list_to_integer(val(Fd))});
"Address" ->
get_funinfo(Fd,Fu#fu{address=val(Fd)});
"Native_address" ->
get_funinfo(Fd,Fu#fu{native_address=val(Fd)});
"Refc" ->
- get_funinfo(Fd,Fu#fu{refc=val(Fd)});
+ get_funinfo(Fd,Fu#fu{refc=list_to_integer(val(Fd))});
"=" ++ _next_tag ->
Fu;
Other ->
@@ -2256,45 +1747,54 @@ get_funinfo(Fd,Fu) ->
%%-----------------------------------------------------------------
%% Page with list of all atoms
-atoms(SessionId,File,TW,Num) ->
+atoms(File,NumAtoms) ->
case lookup_index(?atoms) of
[{_Id,Start}] ->
Fd = open(File),
pos_bof(Fd,Start),
- case get_atoms(Fd,?items_chunk_size) of
- {Atoms,Cont} ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,Atoms),
- atoms_chunks(Fd,SessionId,Cont);
- done ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,done)
- end;
+ get_atoms(Fd,NumAtoms);
_ ->
- crashdump_viewer_html:atoms(SessionId,TW,Num,done)
+ []
end.
-get_atoms(Fd,Number) ->
- case get_n_lines_of_tag(Fd,Number) of
- {all,_,Lines} ->
- close(Fd),
- {Lines,done};
- {part,_,Lines} ->
- {Lines,Number};
- empty ->
- close(Fd),
- done
+get_atoms(Fd,NumAtoms) ->
+ case get_chunk(Fd) of
+ {ok,Bin} ->
+ init_progress("Processing atoms",NumAtoms),
+ get_atoms(Fd,Bin,NumAtoms,[]);
+ eof ->
+ []
end.
-atoms_chunks(_Fd,SessionId,done) ->
- crashdump_viewer_html:atoms_chunk(SessionId,done);
-atoms_chunks(Fd,SessionId,Number) ->
- case get_atoms(Fd,Number) of
- {Atoms,Cont} ->
- crashdump_viewer_html:atoms_chunk(SessionId,Atoms),
- atoms_chunks(Fd,SessionId,Cont);
- done ->
- atoms_chunks(Fd,SessionId,done)
- end.
+%% Atoms are written one per line in the crash dump, in creation order
+%% from last to first.
+get_atoms(Fd,Bin,NumAtoms,Atoms) ->
+ Bins = binary:split(Bin,<<"\n">>,[global]),
+ get_atoms1(Fd,Bins,NumAtoms,Atoms).
+
+get_atoms1(_Fd,[<<"=",_/binary>>|_],_N,Atoms) ->
+ end_progress(),
+ Atoms;
+get_atoms1(Fd,[LastBin],N,Atoms) ->
+ case get_chunk(Fd) of
+ {ok,Bin0} ->
+ get_atoms(Fd,<<LastBin/binary,Bin0/binary>>,N,Atoms);
+ eof ->
+ end_progress(),
+ [{N,get_atom(LastBin)}|Atoms]
+ end;
+get_atoms1(Fd,[Bin|Bins],N,Atoms) ->
+ update_progress(),
+ get_atoms1(Fd,Bins,N-1,[{N,get_atom(Bin)}|Atoms]).
+
+%% This ensures sorting according to first actual letter in the atom,
+%% disregarding possible single quote. It is formatted back to correct
+%% syntax in cdv_atom_cb:format/1
+get_atom(<<"\'",Atom/binary>>) ->
+ {Atom,q}; % quoted
+get_atom(Atom) when is_binary(Atom) ->
+ {Atom,nq}. % not quoted
%%-----------------------------------------------------------------
%% Page with memory information
@@ -2317,7 +1817,7 @@ get_meminfo(Fd,Acc) ->
{eof,_last_line} ->
lists:reverse(Acc);
Key ->
- get_meminfo(Fd,[{Key,val(Fd)}|Acc])
+ get_meminfo(Fd,[{list_to_atom(Key),val(Fd)}|Acc])
end.
%%-----------------------------------------------------------------
@@ -2345,7 +1845,7 @@ get_allocareainfo(Fd,Acc) ->
AllocInfo =
case split(Val) of
{Alloc,[]} ->
- {Key,Alloc,?space};
+ {Key,Alloc,""};
{Alloc,Used} ->
{Key,Alloc,Used}
end,
@@ -2361,7 +1861,7 @@ allocator_info(File) ->
AllAllocators ->
Fd = open(File),
R = lists:map(fun({Heading,Start}) ->
- {Heading,get_allocatorinfo(Fd,Start)}
+ {Heading,get_allocatorinfo(Fd,Start)}
end,
AllAllocators),
close(Fd),
@@ -2370,17 +1870,19 @@ allocator_info(File) ->
get_allocatorinfo(Fd,Start) ->
pos_bof(Fd,Start),
- get_allocatorinfo1(Fd,[]).
+ get_allocatorinfo1(Fd,[],0).
-get_allocatorinfo1(Fd,Acc) ->
+get_allocatorinfo1(Fd,Acc,Max) ->
case line_head(Fd) of
"=" ++ _next_tag ->
- lists:reverse(Acc);
+ pad_and_reverse(Acc,Max,[]);
{eof,_last_line} ->
- lists:reverse(Acc);
+ pad_and_reverse(Acc,Max,[]);
Key ->
Values = get_all_vals(val(Fd),[]),
- get_allocatorinfo1(Fd,[{Key,Values}|Acc])
+ L = length(Values),
+ Max1 = if L > Max -> L; true -> Max end,
+ get_allocatorinfo1(Fd,[{Key,Values}|Acc],Max1)
end.
get_all_vals([$ |Rest],Acc) ->
@@ -2390,6 +1892,16 @@ get_all_vals([],Acc) ->
get_all_vals([Char|Rest],Acc) ->
get_all_vals(Rest,[Char|Acc]).
+%% Make sure all V have the same length by padding with "".
+pad_and_reverse([{K,V}|T],Len,Rev) ->
+ VLen = length(V),
+ V1 = if VLen == Len -> V;
+ true -> V ++ lists:duplicate(Len-VLen,"")
+ end,
+ pad_and_reverse(T,Len,[{K,V1}|Rev]);
+pad_and_reverse([],_,Rev) ->
+ Rev.
+
%% Calculate allocator summary:
%%
%% System totals:
@@ -2473,7 +1985,8 @@ allocator_summary(Allocators) ->
{TBS,TCS} ->
{integer_to_list(TBS),integer_to_list(TCS)}
end,
- {{"Summary",["blocks size","carriers size","mseg carriers size"]},
+ {"Allocator Summary",
+ ["blocks size","carriers size","mseg carriers size"],
[{"total",[TotalBS,TotalCS,TotalMCS]} |
format_allocator_summary(lists:reverse(TypeTotals))]}.
@@ -2673,142 +2186,120 @@ get_indextableinfo1(Fd,IndexTable) ->
IndexTable
end.
-
-
-
-
-%%-----------------------------------------------------------------
-%% Expand a set of data which was shown in a truncated form on
-get_expanded(File,Pos,Size) ->
- Fd = open(File),
- R = case file:pread(Fd,Pos,Size) of
- {ok,Bin}->
- binary_to_list(Bin);
- eof ->
- ?space
- end,
- close(Fd),
- R.
-
-
-replace_all(From,To,[From|Rest],Acc) ->
- replace_all(From,To,Rest,[To|Acc]);
-replace_all(From,To,[Char|Rest],Acc) ->
- replace_all(From,To,Rest,[Char|Acc]);
-replace_all(_From,_To,[],Acc) ->
- lists:reverse(Acc).
-
-
%%%-----------------------------------------------------------------
%%% Parse memory in crashdump version 0.1 and newer
%%%
-parse_heap_term([$l|Line0], Addr, D0) -> %Cons cell.
- {H,"|"++Line1,D1} = parse_term(Line0, D0),
- {T,Line,D2} = parse_term(Line1, D1),
+parse_heap_term([$l|Line0], Addr, BinAddrAdj, D0) -> %Cons cell.
+ {H,"|"++Line1,D1} = parse_term(Line0, BinAddrAdj, D0),
+ {T,Line,D2} = parse_term(Line1, BinAddrAdj, D1),
Term = [H|T],
D = gb_trees:insert(Addr, Term, D2),
{Term,Line,D};
-parse_heap_term([$t|Line0], Addr, D) -> %Tuple
+parse_heap_term([$t|Line0], Addr, BinAddrAdj, D) -> %Tuple
{N,":"++Line} = get_hex(Line0),
- parse_tuple(N, Line, Addr, D, []);
-parse_heap_term([$F|Line0], Addr, D0) -> %Float
+ parse_tuple(N, Line, Addr, BinAddrAdj, D, []);
+parse_heap_term([$F|Line0], Addr, _BinAddrAdj, D0) -> %Float
{N,":"++Line1} = get_hex(Line0),
{Chars,Line} = get_chars(N, Line1),
Term = list_to_float(Chars),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B16#"++Line0, Addr, D0) -> %Positive big number.
+parse_heap_term("B16#"++Line0, Addr, _BinAddrAdj, D0) -> %Positive big number.
{Term,Line} = get_hex(Line0),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B-16#"++Line0, Addr, D0) -> %Negative big number
+parse_heap_term("B-16#"++Line0, Addr, _BinAddrAdj, D0) -> %Negative big number
{Term0,Line} = get_hex(Line0),
Term = -Term0,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("B"++Line0, Addr, D0) -> %Decimal big num (new in R10B-something).
+parse_heap_term("B"++Line0, Addr, _BinAddrAdj, D0) -> %Decimal big num
case string:to_integer(Line0) of
{Int,Line} when is_integer(Int) ->
D = gb_trees:insert(Addr, Int, D0),
{Int,Line,D}
end;
-parse_heap_term([$P|Line0], Addr, D0) -> % External Pid.
+parse_heap_term([$P|Line0], Addr, _BinAddrAdj, D0) -> % External Pid.
{Pid0,Line} = get_id(Line0),
- Pid = "#CDVPid"++Pid0,
+ Pid = ['#CDVPid'|Pid0],
D = gb_trees:insert(Addr, Pid, D0),
{Pid,Line,D};
-parse_heap_term([$p|Line0], Addr, D0) -> % External Port.
+parse_heap_term([$p|Line0], Addr, _BinAddrAdj, D0) -> % External Port.
{Port0,Line} = get_id(Line0),
- Port = "#CDVPort"++Port0,
+ Port = ['#CDVPort'|Port0],
D = gb_trees:insert(Addr, Port, D0),
{Port,Line,D};
-parse_heap_term("E"++Line0, Addr, D0) -> %Term encoded in external format.
+parse_heap_term("E"++Line0, Addr, _BinAddrAdj, D0) -> %Term encoded in external format.
{Bin,Line} = get_binary(Line0),
Term = binary_to_term(Bin),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Yh"++Line0, Addr, D0) -> %Heap binary.
+parse_heap_term("Yh"++Line0, Addr, _BinAddrAdj, D0) -> %Heap binary.
{Term,Line} = get_binary(Line0),
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Yc"++Line0, Addr, D0) -> %Reference-counted binary.
- {Binp,":"++Line1} = get_hex(Line0),
- {First,":"++Line2} = get_hex(Line1),
+parse_heap_term("Yc"++Line0, Addr, BinAddrAdj, D0) -> %Reference-counted binary.
+ {Binp0,":"++Line1} = get_hex(Line0),
+ {Offset,":"++Line2} = get_hex(Line1),
{Sz,Line} = get_hex(Line2),
+ Binp = Binp0 bor BinAddrAdj,
Term = case gb_trees:lookup(Binp, D0) of
- {value,<<_:First/binary,T:Sz/binary,_/binary>>} -> T;
- {value,{'#CDVTooBig',binary,Pos}} -> cdvbin(Sz,Pos);
- {value,'#CDVTruncatedBinary'} -> '#CDVTruncatedBinary';
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
none -> '#CDVNonexistingBinary'
end,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D};
-parse_heap_term("Ys"++Line0, Addr, D0) -> %Sub binary.
- {Binp,":"++Line1} = get_hex(Line0),
- {First,":"++Line2} = get_hex(Line1),
+parse_heap_term("Ys"++Line0, Addr, BinAddrAdj, D0) -> %Sub binary.
+ {Binp0,":"++Line1} = get_hex(Line0),
+ {Offset,":"++Line2} = get_hex(Line1),
{Sz,Line} = get_hex(Line2),
+ Binp = Binp0 bor BinAddrAdj,
Term = case gb_trees:lookup(Binp, D0) of
- {value,<<_:First/binary,T:Sz/binary,_/binary>>} -> T;
- {value,{'#CDVTooBig',binary,Pos}} -> cdvbin(Sz,Pos);
- {value,'#CDVTruncatedBinary'} -> '#CDVTruncatedBinary';
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
+ none when Binp0=/=Binp ->
+ %% Might it be on the heap?
+ case gb_trees:lookup(Binp0, D0) of
+ {value,Bin} -> cdvbin(Offset,Sz,Bin);
+ none -> '#CDVNonexistingBinary'
+ end;
none -> '#CDVNonexistingBinary'
end,
D = gb_trees:insert(Addr, Term, D0),
{Term,Line,D}.
-parse_tuple(0, Line, Addr, D0, Acc) ->
+parse_tuple(0, Line, Addr, _, D0, Acc) ->
Tuple = list_to_tuple(lists:reverse(Acc)),
D = gb_trees:insert(Addr, Tuple, D0),
{Tuple,Line,D};
-parse_tuple(N, Line0, Addr, D0, Acc) ->
- case parse_term(Line0, D0) of
+parse_tuple(N, Line0, Addr, BinAddrAdj, D0, Acc) ->
+ case parse_term(Line0, BinAddrAdj, D0) of
{Term,[$,|Line],D} when N > 1 ->
- parse_tuple(N-1, Line, Addr, D, [Term|Acc]);
+ parse_tuple(N-1, Line, Addr, BinAddrAdj, D, [Term|Acc]);
{Term,Line,D}->
- parse_tuple(N-1, Line, Addr, D, [Term|Acc])
+ parse_tuple(N-1, Line, Addr, BinAddrAdj, D, [Term|Acc])
end.
-parse_term([$H|Line0], D) -> %Pointer to heap term.
+parse_term([$H|Line0], BinAddrAdj, D) -> %Pointer to heap term.
{Ptr,Line} = get_hex(Line0),
- deref_ptr(Ptr, Line, D);
-parse_term([$N|Line], D) -> %[] (nil).
+ deref_ptr(Ptr, Line, BinAddrAdj, D);
+parse_term([$N|Line], _, D) -> %[] (nil).
{[],Line,D};
-parse_term([$I|Line0], D) -> %Small.
+parse_term([$I|Line0], _, D) -> %Small.
{Int,Line} = string:to_integer(Line0),
{Int,Line,D};
-parse_term([$A|_]=Line, D) -> %Atom.
+parse_term([$A|_]=Line, _, D) -> %Atom.
parse_atom(Line, D);
-parse_term([$P|Line0], D) -> %Pid.
+parse_term([$P|Line0], _, D) -> %Pid.
{Pid,Line} = get_id(Line0),
- {"#CDVPid"++Pid,Line,D};
-parse_term([$p|Line0], D) -> %Port.
+ {['#CDVPid'|Pid],Line,D};
+parse_term([$p|Line0], _, D) -> %Port.
{Port,Line} = get_id(Line0),
- {"#CDVPort"++Port,Line,D};
-parse_term([$S|Str0], D) -> %Information string.
+ {['#CDVPort'|Port],Line,D};
+parse_term([$S|Str0], _, D) -> %Information string.
Str = lists:reverse(skip_blanks(lists:reverse(Str0))),
{Str,[],D};
-parse_term([$D|Line0], D) -> %DistExternal
+parse_term([$D|Line0], _, D) -> %DistExternal
try
{AttabSize,":"++Line1} = get_hex(Line0),
{Attab, "E"++Line2} = parse_atom_translation_table(AttabSize, Line1, []),
@@ -2848,7 +2339,7 @@ parse_atom_translation_table(N, Line0, As) ->
-deref_ptr(Ptr, Line, D0) ->
+deref_ptr(Ptr, Line, BinAddrAdj, D0) ->
case gb_trees:lookup(Ptr, D0) of
{value,Term} ->
{Term,Line,D0};
@@ -2860,10 +2351,10 @@ deref_ptr(Ptr, Line, D0) ->
case val(Fd) of
"="++_ ->
put(fd, end_of_heap),
- deref_ptr(Ptr, Line, D0);
+ deref_ptr(Ptr, Line, BinAddrAdj, D0);
L ->
- D = parse(L, D0),
- deref_ptr(Ptr, Line, D)
+ D = parse(L, BinAddrAdj, D0),
+ deref_ptr(Ptr, Line, BinAddrAdj, D)
end
end
end.
@@ -2901,13 +2392,16 @@ get_chars(0, Line, Acc) ->
get_chars(N, [H|T], Acc) ->
get_chars(N-1, T, [H|Acc]).
-get_id(Line) ->
- get_id(Line, []).
+get_id(Line0) ->
+ [$<|Line] = lists:dropwhile(fun($<) -> false; (_) -> true end,Line0),
+ get_id(Line, [], []).
-get_id([$>|Line], Acc) ->
- {lists:reverse(Acc, [$>]),Line};
-get_id([H|T], Acc) ->
- get_id(T, [H|Acc]).
+get_id([$>|Line], Acc, Id) ->
+ {lists:reverse(Id,[list_to_integer(lists:reverse(Acc))]),Line};
+get_id([$.|Line], Acc, Id) ->
+ get_id(Line,[],[list_to_integer(lists:reverse(Acc))|Id]);
+get_id([H|T], Acc, Id) ->
+ get_id(T, [H|Acc], Id).
get_label(L) ->
get_label(L, []).
@@ -2925,19 +2419,26 @@ get_label([H|T], Acc) ->
get_binary(Line0) ->
{N,":"++Line} = get_hex(Line0),
- get_binary(N, Line, []).
+ do_get_binary(N, Line, []).
+
+get_binary(Offset,Size,Line0) ->
+ {_N,":"++Line} = get_hex(Line0),
+ do_get_binary(Size, lists:sublist(Line,(Offset*2)+1,Size*2), []).
-get_binary(0, Line, Acc) ->
+do_get_binary(0, Line, Acc) ->
{list_to_binary(lists:reverse(Acc)),Line};
-get_binary(N, [A,B|Line], Acc) ->
+do_get_binary(N, [A,B|Line], Acc) ->
Byte = (get_hex_digit(A) bsl 4) bor get_hex_digit(B),
- get_binary(N-1, Line, [Byte|Acc]);
-get_binary(_N, [], _Acc) ->
+ do_get_binary(N-1, Line, [Byte|Acc]);
+do_get_binary(_N, [], _Acc) ->
{'#CDVTruncatedBinary',[]}.
-cdvbin(Sz,Pos) ->
- "#CDVBin<"++integer_to_list(Sz)++","++integer_to_list(Pos)++">".
-
+cdvbin(Offset,Size,{'#CDVBin',Pos}) ->
+ ['#CDVBin',Offset,Size,Pos];
+cdvbin(Offset,Size,['#CDVBin',_,_,Pos]) ->
+ ['#CDVBin',Offset,Size,Pos];
+cdvbin(_,_,'#CDVTruncatedBinary') ->
+ '#CDVTruncatedBinary'.
%%-----------------------------------------------------------------
%% Functions for accessing the cdv_dump_index_table
@@ -2947,29 +2448,15 @@ reset_index_table() ->
insert_index(Tag,Id,Pos) ->
ets:insert(cdv_dump_index_table,{{Tag,Pos},Id}).
+lookup_index({Tag,Id}) ->
+ lookup_index(Tag,Id);
lookup_index(Tag) ->
lookup_index(Tag,'$2').
lookup_index(Tag,Id) ->
ets:select(cdv_dump_index_table,[{{{Tag,'$1'},Id},[],[{{Id,'$1'}}]}]).
-lookup_index_chunk({'#CDVFirstChunk',Tag,Id}) ->
- ets:select(cdv_dump_index_table,
- [{{{Tag,'$1'},Id},[],[{{Id,'$1'}}]}],
- ?items_chunk_size);
-lookup_index_chunk(Cont) ->
- ets:select(Cont).
-
-%% Create a tag which can be used instead of an ets Continuation for
-%% the first call to lookup_index_chunk.
-first_chunk_pointer({Tag,Id}) ->
- {'#CDVFirstChunk',Tag,Id};
-first_chunk_pointer(Tag) ->
- first_chunk_pointer({Tag,'$2'}).
-
count_index(Tag) ->
ets:select_count(cdv_dump_index_table,[{{{Tag,'_'},'_'},[],[true]}]).
-count_index(Tag,Id) ->
- ets:select_count(cdv_dump_index_table,[{{{Tag,'_'},Id},[],[true]}]).
%%-----------------------------------------------------------------
@@ -2979,7 +2466,6 @@ tag_to_atom("allocated_areas") -> ?allocated_areas;
tag_to_atom("allocator") -> ?allocator;
tag_to_atom("atoms") -> ?atoms;
tag_to_atom("binary") -> ?binary;
-tag_to_atom("debug_proc_dictionary") -> ?debug_proc_dictionary;
tag_to_atom("end") -> ?ende;
tag_to_atom("erl_crash_dump") -> ?erl_crash_dump;
tag_to_atom("ets") -> ?ets;
@@ -2995,7 +2481,6 @@ tag_to_atom("mod") -> ?mod;
tag_to_atom("no_distribution") -> ?no_distribution;
tag_to_atom("node") -> ?node;
tag_to_atom("not_connected") -> ?not_connected;
-tag_to_atom("num_atoms") -> ?num_atoms;
tag_to_atom("old_instr_data") -> ?old_instr_data;
tag_to_atom("port") -> ?port;
tag_to_atom("proc") -> ?proc;
@@ -3010,37 +2495,133 @@ tag_to_atom(UnknownTag) ->
list_to_atom(UnknownTag).
%%%-----------------------------------------------------------------
-%%% Create a page by sending chunk by chunk to crashdump_viewer_html
-chunk_page(SessionId,File,TW,What,HtmlCB,HtmlExtra,ParseFun) ->
+%%% Fetch next chunk from crashdump file
+lookup_and_parse_index(File,What,ParseFun,Str) when is_list(File) ->
+ Indices = lookup_index(What),
+ Fun = fun(Fd,{Id,Start}) ->
+ pos_bof(Fd,Start),
+ ParseFun(Fd,Id)
+ end,
+ Report = "Processing " ++ Str,
+ progress_pmap(Report,File,Fun,Indices).
+
+%%%-----------------------------------------------------------------
+%%% Convert a record to a proplist
+to_proplist(Fields,Record) ->
+ Values = to_value_list(Record),
+ lists:zip(Fields,Values).
+
+%%%-----------------------------------------------------------------
+%%% Convert a record to a simple list of field values
+to_value_list(Record) ->
+ [_RecordName|Values] = tuple_to_list(Record),
+ Values.
+
+%%%-----------------------------------------------------------------
+%%% Fold over List and report progress in percent.
+%%% Report is the text to be presented in the progress dialog.
+%%% Acc0 is the initial accumulator and will be passed to Fun as the
+%%% second arguement, i.e. Fun = fun(Item,Acc) -> NewAcc end.
+progress_foldl(Report,Fun,Acc0,List) ->
+ init_progress(Report, length(List)),
+ progress_foldl1(Fun,Acc0,List).
+
+progress_foldl1(Fun,Acc,[H|T]) ->
+ update_progress(),
+ progress_foldl1(Fun,Fun(H,Acc),T);
+progress_foldl1(_Fun,Acc,[]) ->
+ end_progress(),
+ Acc.
+
+
+%%%-----------------------------------------------------------------
+%%% Map over List and report progress in percent.
+%%% Report is the text to be presented in the progress dialog.
+%%% Distribute the load over a number of processes, and File is opened
+%%% on each process and passed to the Fun as first argument.
+%%% I.e. Fun = fun(Fd,Item) -> ItemResult end.
+progress_pmap(Report,File,Fun,List) ->
+ NTot = length(List),
+ NProcs = erlang:system_info(schedulers) * 2,
+ NPerProc = (NTot div NProcs) + 1,
+
+ %% Worker processes send message to collector for each ReportInterval.
+ ReportInterval = (NTot div 100) + 1,
+
+ %% Progress reporter on collector process reports 1 percent for
+ %% each message from worker process.
+ init_progress(Report,99),
+
+ Collector = self(),
+ {[],Pids} =
+ lists:foldl(
+ fun(_,{L,Ps}) ->
+ {L1,L2} = if length(L)>=NPerProc -> lists:split(NPerProc,L);
+ true -> {L,[]} % last chunk
+ end,
+ P = spawn(
+ fun() ->
+ progress_map(Collector,ReportInterval,File,Fun,L1)
+ end),
+ erlang:monitor(process,P),
+ {L2,[P|Ps]}
+ end,
+ {List,[]},
+ lists:seq(1,NProcs)),
+ collect(Pids,[]).
+
+progress_map(Collector,ReportInterval,File,Fun,List) ->
Fd = open(File),
- case lookup_and_parse_index_chunk(first_chunk_pointer(What),Fd,ParseFun) of
- done ->
- crashdump_viewer_html:chunk_page(HtmlCB,SessionId,TW,HtmlExtra,done);
- {Chunk,Cont} ->
- HtmlInfo = crashdump_viewer_html:chunk_page(
- HtmlCB,
- SessionId,TW,HtmlExtra,Chunk),
- chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,
- lookup_and_parse_index_chunk(Cont,Fd,ParseFun))
- end.
-
-chunk_page_1(_Fd,HtmlInfo,SessionId,_ParseFun,done) ->
- crashdump_viewer_html:chunk(SessionId,done,HtmlInfo);
-chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,{Chunk,Cont}) ->
- crashdump_viewer_html:chunk(SessionId,Chunk,HtmlInfo),
- chunk_page_1(Fd,HtmlInfo,SessionId,ParseFun,
- lookup_and_parse_index_chunk(Cont,Fd,ParseFun)).
-
-lookup_and_parse_index_chunk(Pointer,Fd,ParseFun) ->
- case lookup_index_chunk(Pointer) of
- '$end_of_table' ->
- close(Fd),
- done;
- {Chunk,Cont} ->
- R = lists:map(fun({Id,Start}) ->
- pos_bof(Fd,Start),
- ParseFun(Fd,Id)
- end,
- Chunk),
- {R,Cont}
+ init_progress(ReportInterval, fun(_) -> Collector ! progress end, ok),
+ progress_map(Fd,Fun,List,[]).
+progress_map(Fd,Fun,[H|T],Acc) ->
+ update_progress(),
+ progress_map(Fd,Fun,T,[Fun(Fd,H)|Acc]);
+progress_map(Fd,_Fun,[],Acc) ->
+ close(Fd),
+ exit({pmap_done,Acc}).
+
+collect([],Acc) ->
+ end_progress(),
+ lists:append(Acc);
+collect(Pids,Acc) ->
+ receive
+ progress ->
+ update_progress(),
+ collect(Pids,Acc);
+ {'DOWN', _Ref, process, Pid, {pmap_done,Result}} ->
+ collect(lists:delete(Pid,Pids),[Result|Acc])
end.
+
+%%%-----------------------------------------------------------------
+%%% Help functions for progress reporting
+
+%% Set text in progress dialog and initialize the progress counter
+init_progress(Report,N) ->
+ observer_lib:report_progress({ok,Report}),
+ Interval = (N div 100) + 1,
+ Fun = fun(P0) -> P=P0+1,observer_lib:report_progress({ok,P}),P end,
+ init_progress(Interval,Fun,0).
+init_progress(Interval,Fun,Acc) ->
+ put(progress,{Interval,Interval,Fun,Acc}),
+ ok.
+
+%% Count progress and report on given interval
+update_progress() ->
+ update_progress(1).
+update_progress(Processed) ->
+ do_update_progress(get(progress),Processed).
+
+do_update_progress({Count,Interval,Fun,Acc},Processed) when Processed>Count ->
+ do_update_progress({Interval,Interval,Fun,Fun(Acc)},Processed-Count);
+do_update_progress({Count,Interval,Fun,Acc},Processed) ->
+ put(progress,{Count-Processed,Interval,Fun,Acc}),
+ ok.
+
+%% End progress reporting for this item
+end_progress() ->
+ end_progress({ok,100}).
+end_progress(Report) ->
+ observer_lib:report_progress(Report),
+ erase(progress),
+ ok.
diff --git a/lib/observer/src/crashdump_viewer.hrl b/lib/observer/src/crashdump_viewer.hrl
index 2e0ea5cf96..ae288ed573 100644
--- a/lib/observer/src/crashdump_viewer.hrl
+++ b/lib/observer/src/crashdump_viewer.hrl
@@ -16,7 +16,7 @@
%%
%% %CopyrightEnd%
%%
--define(space, "&nbsp;").
+-define(space, undefined).
-define(unknown, "unknown").
-define(r16b01_dump_vsn, [0,2]). % =erl_crash_dump:0.2
@@ -24,28 +24,28 @@
-record(general_info,
{created,
- slogan=?space,
- system_vsn=?space,
- compile_time=?space,
- taints=?space,
- node_name=?space,
- num_atoms=?space,
- num_procs=?space,
- num_ets=?space,
- num_timers=?space,
- num_fun=?space,
- mem_tot=?space,
- mem_max=?space,
- instr_info=?space}).
+ slogan,
+ system_vsn,
+ compile_time,
+ taints,
+ node_name,
+ num_atoms,
+ num_procs,
+ num_ets,
+ num_timers,
+ num_fun,
+ mem_tot,
+ mem_max,
+ instr_info}).
-record(proc,
%% Initial data according to the follwoing:
%%
- %% msg_q_len, reds and stack_heap are integers because it must
+ %% msg_q_len, reds, memory and stack_heap are integers because it must
%% be possible to sort on them. All other fields are strings
%%
- %% for old dumps start_time, parent and number of heap frament
- %% does not exist
+ %% for old dumps start_time, parent and number of heap framents
+ %% do not exist
%%
%% current_func can be both "current function" and
%% "last scheduled in for"
@@ -54,100 +54,102 @@
%% displayed as a link to "Expand" (if dump is from OTP R9B
%% or newer)
{pid,
- name=?space,
- init_func=?space,
+ name,
+ init_func,
parent=?unknown,
start_time=?unknown,
- state=?space,
- current_func={"Current Function",?space},
+ state,
+ current_func,
msg_q_len=0,
- msg_q=?space,
- last_calls=?space,
- links=?space,
- prog_count=?space,
- cp=?space,
- arity=?space,
- dict=?space,
- debug_dict=?space,
+ msg_q,
+ last_calls,
+ links,
+ monitors,
+ mon_by,
+ prog_count,
+ cp,
+ arity,
+ dict,
reds=0,
num_heap_frag=?unknown,
- heap_frag_data=?space,
+ heap_frag_data,
stack_heap=0,
- old_heap=?space,
- heap_unused=?space,
- old_heap_unused=?space,
- new_heap_start=?space,
- new_heap_top=?space,
- stack_top=?space,
- stack_end=?space,
- old_heap_start=?space,
- old_heap_top=?space,
- old_heap_end=?space,
+ old_heap,
+ heap_unused,
+ old_heap_unused,
+ new_heap_start,
+ new_heap_top,
+ stack_top,
+ stack_end,
+ old_heap_start,
+ old_heap_top,
+ old_heap_end,
memory,
- stack_dump=?space}).
+ stack_dump}).
-record(port,
{id,
- slot=?space,
- connected=?space,
- links=?space,
- name=?space,
- monitors=?space,
- controls=?space}).
+ slot,
+ connected,
+ links,
+ name,
+ monitors,
+ controls}).
-record(ets_table,
{pid,
- slot=?space,
- id=?space,
- name=?space,
+ slot,
+ id,
+ name,
type="hash",
- buckets=?space,
- size=?space,
- memory=?space}).
+ buckets,
+ size,
+ memory}).
-record(timer,
{pid,
- msg=?space,
- time=?space}).
+ msg,
+ time}).
-record(fu,
- {module=?space,
- uniq=?space,
- index=?space,
- address=?space,
- native_address=?space,
- refc=?space}).
+ {module,
+ uniq,
+ index,
+ address,
+ native_address,
+ refc}).
-record(nod,
- {name=?space,
+ {name,
channel,
- controller=?space,
- creation=?space,
- remote_links=?space,
- remote_mon=?space,
- remote_mon_by=?space,
- error=?space}).
+ conn_type,
+ controller,
+ creation,
+ remote_links=[],
+ remote_mon=[],
+ remote_mon_by=[],
+ error}).
-record(loaded_mod,
{mod,
- current_size=?space,
- current_attrib=?space,
- current_comp_info=?space,
- old_size=?space,
- old_attrib=?space,
- old_comp_info=?space}).
+ current_size,
+ current_attrib,
+ current_comp_info,
+ old_size,
+ old_attrib,
+ old_comp_info}).
-record(hash_table,
{name,
- size=?space,
- used=?space,
- objs=?space,
- depth=?space}).
+ size,
+ used,
+ objs,
+ depth}).
-record(index_table,
{name,
- size=?space,
- used=?space,
- limit=?space,
- rate=?space,
- entries=?space}).
+ size,
+ limit,
+ used,
+ rate,
+ entries}).
diff --git a/lib/observer/src/crashdump_viewer_html.erl b/lib/observer/src/crashdump_viewer_html.erl
deleted file mode 100644
index 93c1a842b5..0000000000
--- a/lib/observer/src/crashdump_viewer_html.erl
+++ /dev/null
@@ -1,1440 +0,0 @@
-%%
-%% %CopyrightBegin%
-%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
-%%
-%% The contents of this file are subject to the Erlang Public License,
-%% Version 1.1, (the "License"); you may not use this file except in
-%% compliance with the License. You should have received a copy of the
-%% Erlang Public License along with this software. If not, it can be
-%% retrieved online at http://www.erlang.org/.
-%%
-%% Software distributed under the License is distributed on an "AS IS"
-%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-%% the License for the specific language governing rights and limitations
-%% under the License.
-%%
-%% %CopyrightEnd%
-%%
--module(crashdump_viewer_html).
-
-%%
-%% This module implements the HTML generation for the crashdump
-%% viewer. No logic or states are kept by this module.
-%%
-
--export([welcome/0,
- read_file_frame/0,
- redirect/1,
- start_page/0,
- filename_frame/1,
- menu_frame/0,
- general_info/1,
- pretty_info_page/2,
- info_page/2,
- proc_details/4,
- expanded_memory/2,
- expanded_binary/1,
- port/3,
- internal_ets_tables/2,
- nods/2,
- loaded_mod_details/2,
- atoms/4,
- atoms_chunk/2,
- memory/2,
- allocated_areas/2,
- allocator_info/2,
- hash_tables/2,
- index_tables/2,
- error/2,
- chunk_page/5,
- chunk/3]).
-
--include("crashdump_viewer.hrl").
-
-%%%-----------------------------------------------------------------
-%%% Welcome frame
-welcome() ->
- header(body(welcome_body())).
-
-welcome_body() ->
- table(
- "WIDTH=100% HEIGHT=60%",
- [tr("VALIGN=middle",
- td("ALIGN=center",
- font("SIZE=6",
- ["Welcome to the Web Based",br(),
- "Erlang Crash Dump Analyser"]))),
- tr("VALIGN=middle",
- td("ALIGN=center",
- form(["name=load_new ACTION=\"./read_file_frame\""],
- input(["TYPE=submit VALUE=\"Load Crashdump\""]))))]).
-
-%%%-----------------------------------------------------------------
-%%% Present a form to enter file name of erlang crash dump
-read_file_frame() ->
- header("Read File",body(read_file_frame_body())).
-
-
-read_file_frame_body() ->
- %% Using a plain text input field instead of a file input field
- %% (e.g. <INPUT TYPE=file NAME=pathj SIZE=40">) because most
- %% browsers can not forward the full path from this dialog even if
- %% the browser is running on localhost (Ref 'fakepath'-problem)
- Entry = input("TYPE=text NAME=path SIZE=60"),
- Form =
- form(
- "NAME=read_file_form METHOD=post ACTION=\"./read_file\"",
- table(
- "BORDER=0",
- [tr(td("COLSPAN=2","Enter file to analyse")),
- tr(
- [td(Entry),
- td("ALIGN=center",input("TYPE=submit VALUE=Ok"))])])),
- table(
- "WIDTH=100% HEIGHT=60%",
- tr("VALIGN=middle",
- td("ALIGN=center",Form))).
-
-
-%%%-----------------------------------------------------------------
-%%% Display "Please wait..." while crashdump is being read
-redirect(Status) ->
- Head = ["<META HTTP-EQUIV=\"refresh\" CONTENT=\"3; URL=./redirect\">"],
- header("Please wait...",Head,body([Status,br(),"Please wait..."])).
-
-%%%-----------------------------------------------------------------
-%%% Frameset containing "filename", "menu", and "main" frames
-start_page() ->
- header("Crashdump Viewer Start Page",start_page_frameset()).
-
-start_page_frameset() ->
- frameset(
- "ROWS=\"70,*\"",
- [frame(["NAME=\"filename\" SRC=\"./filename_frame\""]),
- frameset(
- "COLS=\"200,*\"",
- [frame(["NAME=\"menu\" ",
- "SRC=\"/cdv_erl/crashdump_viewer/menu_frame\""]),
- frame("NAME=\"main\" SRC=\"./initial_info_frame\"")])]).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Topmost frame presents the filename of the crashdump currently
-%%% viewed
-filename_frame(File) ->
- header("Filename",body(filename_body(File))).
-
-filename_body(File) ->
- p("ALIGN=center",[b("Crashdump currently viewed:"),br(),File]).
-
-
-%%%-----------------------------------------------------------------
-%%% Left frame displays the menu
-menu_frame() ->
- header("Menu", body(menu_body())).
-
-menu_body() ->
- [p(format_items(1,ets:info(cdv_menu_table,size),true)),
- p([br(),
- form(["name=load_new ACTION=\"./read_file_frame\" ",
- "TARGET=app_frame"],
- input("TYPE=submit VALUE=\"Load New Crashdump\""))])].
-
-format_items(I,Max,_ParentState) when I>Max->
- [];
-format_items(I,Max,ParentState) when I=<Max->
- case ets:lookup(cdv_menu_table,I) of
- [] -> [];
- [#menu_item{state=false,children=0}] ->
- format_items(I+1,Max,ParentState);
- [#menu_item{state=false,children=Children}] ->
- format_items(I+Children+1,Max,arentState);
- [Item=#menu_item{state=true,children=0}] when ParentState ->
- This = format_item(Item),
- [This|format_items(I+1,Max,ParentState)];
- [Item=#menu_item{state=true,children=Children}] when ParentState ->
- This = format_item(Item),
- Ch = format_items(I+1,I+Children,true),
- [[This | Ch] | format_items(I+Children+1,Max,ParentState)]
- end.
-
-format_item(Item) ->
- [lists:duplicate(Item#menu_item.depth*5,?space),
- format_picture(Item#menu_item.index,
- Item#menu_item.picture,
- Item#menu_item.children),
- format_title(Item#menu_item.text,Item#menu_item.target),
- br()].
-
-format_picture(_Index,Picture,0) ->
- img(Picture);
-format_picture(Index,Picture,_Children) ->
- href( ["./toggle?index=", integer_to_list(Index)], img(Picture)).
-
-format_title({Link,Text},Target) ->
- href(["TARGET=\"",Target,"\""],Link,Text);
-format_title(Text,_Type) ->
- Text.
-
-%%%-----------------------------------------------------------------
-%%% Display the general information
-general_info(GenInfo) ->
- Heading = "General Information",
- header(Heading,body(general_info_body(Heading,GenInfo))).
-
-general_info_body(Heading,GenInfo) ->
- TruncatedInfo =
- case get(truncated) of
- true ->
- p(font("SIZE=\"+1\" COLOR=\"#FF0000\"",
- b(["WARNING:",br(),
- "The crashdump is truncated",br(),
- "Some information might be missing",br()])));
- false ->
- ""
- end,
-
- [heading(Heading,"general_info"),
- TruncatedInfo,
- table(
- "BORDER=4 CELLPADDING=4",
- [tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Slogan"),
- td(GenInfo#general_info.slogan)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Node name"),
- td(GenInfo#general_info.node_name)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Crashdump created on"),
- td(GenInfo#general_info.created)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","System version"),
- td(GenInfo#general_info.system_vsn)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Compiled"),
- td(GenInfo#general_info.compile_time)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Taints"),
- td(GenInfo#general_info.taints)]),
- case GenInfo#general_info.mem_tot of
- "" -> "";
- MemTot ->
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Memory allocated"),
- td([MemTot," bytes"])])
- end,
- case GenInfo#general_info.mem_max of
- "" -> "";
- MemMax ->
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Memory maximum"),
- td([MemMax," bytes"])])
- end,
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Atoms"),
- td(GenInfo#general_info.num_atoms)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Processes"),
- td(GenInfo#general_info.num_procs)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","ETS tables"),
- td(GenInfo#general_info.num_ets)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Timers"),
- td(GenInfo#general_info.num_timers)]),
- tr([th("ALIGN=left BGCOLOR=\"#8899AA\"","Funs"),
- td(GenInfo#general_info.num_fun)])]),
- case GenInfo#general_info.instr_info of
- old_instr_data ->
- [br(),br(),
- font("COLOR=\"#FF0000\"",
- ["Instrumentation information is found at the end of ",br(),
- "the dump. The information has an old format, and ",br(),
- "is not presented in this tool. Please read the ",br(),
- "crashdump manually to see this information."])];
- instr_data ->
- [br(),br(),
- font("COLOR=\"#FF0000\"",
- ["Instrumentation information is found at the end of ",br(),
- "the dump. The information is not presented in this ",br(),
- "tool. Please read the crashdump manually to see",br(),
- "this information."])];
- false ->
- []
- end].
-
-%%%-----------------------------------------------------------------
-%%% Display an error message
-error(Text,Args) ->
- Str = io_lib:format(Text,Args),
- header(body(error_body(Str))).
-
-error_body(Str) ->
- [h1("An error occured:"),Str,"\n"].
-
-
-%%%-----------------------------------------------------------------
-%%% Display the given information as is
-info_page(Heading,Info) ->
- info_page(Heading,Info,[]).
-info_page(Heading,Info,TW) ->
- header(Heading,body(info_body(Heading,Info,TW))).
-
-info_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found\n"];
-info_body(Heading,Info,TW) ->
- [h1(Heading),
- warn(TW),
- pre(href_proc_port(lists:flatten(Info)))].
-
-%%%-----------------------------------------------------------------
-%%% Pretty print the given information
-pretty_info_page(Heading,Info) ->
- header(Heading,body(pretty_info_body(Heading,Info))).
-
-pretty_info_body(Heading,[]) ->
- [h1(Heading),
- "No information was found\n"];
-pretty_info_body(Heading,Info) ->
- [h1(Heading),
- pre(pretty_format(Info))].
-
-%%%-----------------------------------------------------------------
-%%% Print details for one process
-proc_details(Pid,Proc,TW,SharedHeap) ->
- Script =
-"<SCRIPT type=\"text/javascript\">
- function popup() {
- window.open(\"\",\"expanded\",'resizable=yes,scrollbars=yes')
-}
-</SCRIPT>\n",
-
- Heading = ["Process ", Pid],
- header(Heading,Script,body(proc_details_body(Heading,Proc,TW,SharedHeap))).
-
-proc_details_body(Heading,Proc,TW,SharedHeap) ->
- Pid = Proc#proc.pid,
- Name = if Proc#proc.name==Proc#proc.init_func -> ?space;
- true -> Proc#proc.name
- end,
- [help("processes"),
- warn(TW),
- table(
- "BORDER=4 COLS=4 WIDTH=\"100%\"",
- [tr(
- "BGCOLOR=\"#8899AA\"",
- [td("COLSPAN=4 ALIGN=center",Heading)]),
- tr(
- [td("NOWRAP=true",b("Name")),
- td("COLSPAN=1",Name),
- td("NOWRAP=true",b("Spawned as")),
- td("COLSPAN=1",Proc#proc.init_func)]),
- tr(
- [td("NOWRAP=true",b("State")),
- td("COLSPAN=1",Proc#proc.state),
- td("NOWRAP=true",b(element(1,Proc#proc.current_func))),
- td("COLSPAN=1",element(2,Proc#proc.current_func))]),
- tr(
- [td("NOWRAP=true",b("Started")),
- td("COLSPAN=1",Proc#proc.start_time),
- td("NOWRAP=true",b("Spawned by")),
- td("COLSPAN=1",href_proc_port(Proc#proc.parent))]),
- tr(
- [td("NOWRAP=true",b("Reductions")),
- td("COLSPAN=1",integer_to_list(Proc#proc.reds))] ++
- case Proc#proc.memory of
- undefined -> []; % before R16B01
- Mem ->
- [td("NOWRAP=true",b("Memory (bytes)")),
- td("COLSPAN=1",integer_to_list(Mem))]
- end),
- if SharedHeap ->
- Stack = case Proc#proc.stack_heap of
- -1 -> "unknown";
- S -> integer_to_list(S)
- end,
- tr(
- [td("NOWRAP=true",b("Stack")),
- td("COLSPAN=3",Stack)]);
- true ->
- [tr(
- [td("NOWRAP=true",b("Stack+heap")),
- td(integer_to_list(Proc#proc.stack_heap)),
- td("NOWRAP=true",b("OldHeap")),
- td(Proc#proc.old_heap)]),
- tr(
- [td("NOWRAP=true",b("Heap unused")),
- td(Proc#proc.heap_unused),
- td("NOWRAP=true",b("OldHeap unused")),
- td(Proc#proc.old_heap_unused)]),
- tr(
- [td("NOWRAP=true",b("Number of heap fragments")),
- td(Proc#proc.num_heap_frag),
- td("NOWRAP=true",b("Heap fragment data")),
- td(Proc#proc.heap_frag_data)])]
- end,
- case Proc#proc.new_heap_start of
- ?space -> "";
- _ ->
- %% Garbing
- [tr(
- [td("NOWRAP=true",b("New heap start")),
- td("COLSPAN=1",Proc#proc.new_heap_start),
- td("NOWRAP=true",b("New heap top")),
- td("COLSPAN=1",Proc#proc.new_heap_top)]),
- tr(
- [td("NOWRAP=true",b("Stack top")),
- td("COLSPAN=1",Proc#proc.stack_top),
- td("NOWRAP=true",b("Stack end")),
- td("COLSPAN=1",Proc#proc.stack_end)]),
- tr(
- [td("NOWRAP=true",b("Old heap start")),
- td("COLSPAN=1",Proc#proc.old_heap_start),
- td("NOWRAP=true",b("Old heap top")),
- td("COLSPAN=1",Proc#proc.old_heap_top)]),
- tr(
- [td("NOWRAP=true",b("Old heap end")),
- td("COLSPAN=3",Proc#proc.old_heap_end)])]
- end,
- case Proc#proc.prog_count of
- ?space -> "";
- _ ->
- [tr(
- [td("NOWRAP=true",b("Program counter")),
- td("COLSPAN=3",Proc#proc.prog_count)]),
- tr(
- [td("NOWRAP=true",b("Continuation pointer")),
- td("COLSPAN=3",Proc#proc.cp)]),
- tr(
- [td("NOWRAP=true",b("Arity")),
- td("COLSPAN=3",Proc#proc.arity)])]
- end,
- tr(
- [td("NOWRAP=true",b("Link list")),
- td("COLSPAN=3",href_proc_port(Proc#proc.links))]),
-
- tr(
- [td("NOWRAP=true",b("Msg queue length")),
- td("COLSPAN=3",integer_to_list(Proc#proc.msg_q_len))]),
-
- %% These are displayed only if data exist
- display_or_link_to_expand("MsgQueue",Proc#proc.msg_q,Pid),
- display_or_link_to_expand("Dictionary",Proc#proc.dict,Pid),
- display_or_link_to_expand("DebugDictionary",Proc#proc.debug_dict,Pid),
- display_or_link_to_expand("LastCalls",Proc#proc.last_calls,Pid),
- display_or_link_to_expand("StackDump",Proc#proc.stack_dump,Pid)]),
-
- p([href(["./ets_tables?pid=",Proc#proc.pid],
- "ETS tables owned by this process"),
- "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;",
- href(["./timers?pid=",Proc#proc.pid],
- "Timers owned by this process")])].
-
-display_or_link_to_expand(Heading,Data,Pid) ->
- case Data of
- expand ->
- link_to_read_memory(Heading,Pid);
- truncated ->
- Text = font("COLOR=\"#FF0000\"",
- "The dump is truncated, no data available"),
- tr(
- [td("NOWRAP=true VALIGN=top",b(Heading)),
- td("COLSPAN=3",Text)]);
- ?space ->
- "";
- {size,Truncated,Size,Pos} ->
- %% Too much data, or truncated data -
- %% display a link to expand it
- tr(
- [td("NOWRAP=true",b(Heading)),
- td("COLSPAN=3",
- href("TARGET=\"expanded\" onClick=popup()",
- ["./expand?pos=",integer_to_list(Pos),
- "&size=",integer_to_list(Size),
- "&what=",Heading,
- "&truncated=",atom_to_list(Truncated)],
- ["Expand (",integer_to_list(Size)," bytes)"]))]);
- _ ->
- %% Not too much Data - display it
- tr(
- [td("NOWRAP=true VALIGN=top",b(Heading)),
- td("COLSPAN=3",pre(format(Heading,Data)))])
- end.
-
-link_to_read_memory(Heading,Pid) ->
- tr(
- [td("NOWRAP=true",b(Heading)),
- td("COLSPAN=3",
- href("TARGET=\"expanded\" onClick=popup()",
- ["./expand_memory?pid=",Pid,
- "&what=",Heading],
- ["Expand ", Heading]))]).
-
-format("LastCalls",Data) ->
- Data;
-format("StackDump",Data) ->
- Data;
-format(_Heading,Data) ->
- pretty_format(Data).
-
-
-
-%%%-----------------------------------------------------------------
-%%% Expanded memory
-expanded_memory(Heading,Expanded) ->
- header(Heading,body(expanded_memory_body(Heading,Expanded))).
-
-expanded_memory_body(Heading,[]) ->
- [heading(Heading,"processes"),
- case Heading of
- "MsgQueue" -> "No messages were found";
- "StackDump" -> "No stack dump was found";
- "Dictionary" -> "No dictionary was found";
- "DebugDictionary" -> "No debug dictionary was found"
- end];
-expanded_memory_body(Heading,Expanded) ->
- [heading(Heading,"processes"),
- case Heading of
- "MsgQueue" ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Message"),
- th("SeqTraceToken")]) |
- lists:map(fun(Msg) -> msgq_table(Msg) end, Expanded)]);
- "StackDump" ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Label"),
- th("Term")]) |
- lists:map(fun(Entry) -> stackdump_table(Entry) end, Expanded)]);
- _ ->
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Key"),
- th("Value")]) |
- lists:map(fun(Entry) -> dict_table(Entry) end, Expanded)])
- end].
-
-msgq_table({Msg0,Token0}) ->
- Token = case Token0 of
- [] -> ?space;
- _ -> io_lib:fwrite("~w",[Token0])
- end,
- Msg = href_proc_port(lists:flatten(io_lib:format("~p",[Msg0]))),
- tr([td(pre(Msg)), td(Token)]).
-
-stackdump_table({Label0,Term0}) ->
- Label = io_lib:format("~w",[Label0]),
- Term = href_proc_port(lists:flatten(io_lib:format("~p",[Term0]))),
- tr([td("VALIGN=top",Label), td(pre(Term))]).
-
-dict_table({Key0,Value0}) ->
- Key = href_proc_port(lists:flatten(io_lib:format("~p",[Key0]))),
- Value = href_proc_port(lists:flatten(io_lib:format("~p",[Value0]))),
- tr([td("VALIGN=top",pre(Key)), td(pre(Value))]).
-
-
-%%%-----------------------------------------------------------------
-%%% Display an expanded binary, i.e. the whole binary, not just the
-%%% size of it.
-expanded_binary(Bin) ->
- Heading = "Expanded binary",
- header(Heading,body(expanded_binary_body(Heading,Bin))).
-
-expanded_binary_body(Heading,Bin) ->
- [h1(Heading),
- pre(href_proc_port(lists:flatten(Bin))),
- br(),br(),
- href("javascript:history.go(-1)","BACK")].
-
-%%%-----------------------------------------------------------------
-%%% Print info for one port
-port(Heading,Port,TW) ->
- header(Heading,body(port_body(Heading,Port,TW))).
-
-port_body(Heading,Port,TW) ->
- [heading(Heading,"ports"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr([th(Head) || Head <- port_table_head()]), ports_table(Port)])].
-
-%%%-----------------------------------------------------------------
-%%% Print table of internal ETS tables
-internal_ets_tables(InternalEts,TW) ->
- Heading = "Internal ETS tables",
- header(Heading,body(internal_ets_tables_body(Heading,InternalEts,TW))).
-
-internal_ets_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No internal ETS tables were found\n"];
-internal_ets_tables_body(Heading,InternalEts,TW) ->
- [heading(Heading,"internal_ets_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Description"),
- th("Id"),
- th("Name"),
- th("Type"),
- th("Buckets"),
- th("Objects"),
- th("Memory (bytes)")]) |
- lists:map(fun(InternalEtsTable) ->
- internal_ets_tables_table1(InternalEtsTable)
- end,
- InternalEts)])].
-
-internal_ets_tables_table1({Descr,InternalEtsTable}) ->
- #ets_table{id=Id,name=Name,type=Type,buckets=Buckets,
- size=Size,memory=Memory} = InternalEtsTable,
- tr(
- [td(Descr),
- td(Id),
- td(Name),
- td(Type),
- td("ALIGN=right",Buckets),
- td("ALIGN=right",Size),
- td("ALIGN=right",Memory)]).
-
-%%%-----------------------------------------------------------------
-%%% Print table of nodes in distribution
-nods(Nods,TW) ->
- header("Distribution Information",body(nodes_body(Nods,TW))).
-
-nodes_body(no_distribution,_TW) ->
- [heading("Distribution Information","distribution_info"),
- "Not alive\n"];
-nodes_body({Type,Info,Node},TW) when is_record(Node,nod) ->
- %% Display only one node - used when a pid or port on a remote
- %% node is clicked.
- [heading("Remote Node","distribution_info"),
- warn(TW),
- Info,
- make_nodes_table(Type,[Node])];
-nodes_body({Visible,Hidden,NotConnected},TW) ->
- %% Display all nodes - this is the complete distribution info
- [heading("Distribution Information","distribution_info"),
- warn(TW),
- make_nodes_table("Visible Nodes",Visible),
- make_nodes_table("Hidden Nodes",Hidden),
- make_nodes_table("Not Connected Nodes",NotConnected)].
-
-make_nodes_table(Text,[]) ->
- p(["No \"",Text,"\" were found"]);
-make_nodes_table(Text,Nodes) ->
- p(table(
- "BORDER=4 CELLPADDING=4",
- [nodes_table_heading(Text),
- lists:map(fun(Node) -> nodes_table_row(Node) end, Nodes)])).
-
-nodes_table_heading(Text) ->
- [tr("BGCOLOR=\"#8899AA\"",[th("COLSPAN=6",Text)]),
- tr([th("Name"),
- th("Channel"),
- th("Controller"),
- th("Creation(s)"),
- th("Links/Monitors"),
- th("Extra info")])].
-
-nodes_table_row(Node) ->
- #nod{name=Name,channel=Channel,controller=Controller,creation=Creation,
- remote_links=Links,remote_mon=Mon,remote_mon_by=MonBy,error=Error}=Node,
- tr(
- [td(maybe_refcount(Name)),
- td("ALIGN=right",Channel),
- td(href_proc_port(Controller)),
- td("ALIGN=right",break_lines_creation(Creation)),
- td(format_links_and_monitors(Links,Mon,MonBy)),
- td(format_extra_info(Error))]).
-
-maybe_refcount(Name) ->
- maybe_refcount(Name, []).
-maybe_refcount([$ ,$( | Rest], Acc) ->
- [lists:reverse(Acc),br(),[$(|Rest]];
-maybe_refcount([Char | Rest], Acc) ->
- maybe_refcount(Rest, [Char | Acc]);
-maybe_refcount([],Acc) ->
- lists:reverse(Acc).
-
-break_lines_creation(Creation) ->
- break_lines_creation(Creation,[]).
-break_lines_creation([$ ,$( | Rest1], Acc) ->
- {RefCount,Rest2} = to_end_par(Rest1,[$(,$ ]),
- [lists:reverse(Acc),RefCount,br(),break_lines_creation(Rest2)];
-break_lines_creation([$ | Rest], Acc) ->
- [lists:reverse(Acc),br(),break_lines_creation(Rest)];
-break_lines_creation([Char | Rest], Acc) ->
- break_lines_creation(Rest, [Char | Acc]);
-break_lines_creation([],Acc) ->
- lists:reverse(Acc).
-
-to_end_par([$),$ | Rest], Acc) ->
- {lists:reverse([$) | Acc]),Rest};
-to_end_par([$) | Rest], Acc) ->
- {lists:reverse([$) | Acc]),Rest};
-to_end_par([Char | Rest], Acc) ->
- to_end_par(Rest, [Char | Acc]);
-to_end_par([],Acc) ->
- {lists:reverse(Acc),[]}.
-
-
-format_links_and_monitors(?space,?space,?space) ->
- ?space;
-format_links_and_monitors(Links,Mon,MonBy) ->
- [format_links_and_monitors(Links," is linked to "),
- format_links_and_monitors(Mon," is monitoring "),
- format_links_and_monitors(MonBy," is monitored by ")].
-
-format_links_and_monitors(?space,_Text) ->
- "";
-format_links_and_monitors([{Local,Remote}|Rest],Text) ->
- [[href_proc_port(Local),Text,href_proc_port(Remote),br()] |
- format_links_and_monitors(Rest,Text)];
-format_links_and_monitors([],_Text) ->
- [].
-
-format_extra_info(?space) ->
- ?space;
-format_extra_info(Error) ->
- case Error of
- ?space -> "";
- _ -> font("COLOR=\"#FF0000\"",["ERROR: ",Error,"\n"])
- end.
-
-%%%-----------------------------------------------------------------
-%%% Print detailed information about one module
-loaded_mod_details(ModInfo,TW) ->
- header(ModInfo#loaded_mod.mod,body(loaded_mod_details_body(ModInfo,TW))).
-
-loaded_mod_details_body(ModInfo,TW) ->
- #loaded_mod{mod=Mod,current_size=CS,current_attrib=CA,
- current_comp_info=CCI,old_size=OS,
- old_attrib=OA,old_comp_info=OCI} = ModInfo,
- [help("loaded_modules"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(th("BGCOLOR=\"#8899AA\" COLSPAN=3",
- ["Module: ",Mod])),
- tr([td(?space),th("Current"),th("Old")]),
- tr([th("ALIGN=left","Size (bytes)"),
- td(CS),
- td(OS)]),
- tr([th("ALIGN=left","Attributes"),
- td(pre(CA)),
- td(pre(OA))]),
- tr([th("ALIGN=left","Compilation info"),
- td(pre(CCI)),
- td(pre(OCI))])])].
-
-
-%%%-----------------------------------------------------------------
-%%% Print atoms
-atoms(SessionId,TW,Num,FirstChunk) ->
- Heading = "Atoms",
- case FirstChunk of
- done ->
- deliver_first(SessionId,[start_html_page(Heading),
- h1(Heading),
- warn(TW),
- "No atoms were found in log",br(),
- "Total number of atoms in node was ", Num,
- br()]);
- _ ->
- deliver_first(SessionId,[start_html_page(Heading),
- heading(Heading,"atoms"),
- warn(TW),
- "Total number of atoms in node was ", Num,
- br(),
- "The last created atom is shown first",
- br(),
- start_pre()]),
- atoms_chunk(SessionId,FirstChunk)
- end.
-
-atoms_chunk(SessionId,done) ->
- deliver(SessionId,[stop_pre(),stop_html_page()]);
-atoms_chunk(SessionId,Atoms) ->
- deliver(SessionId,Atoms).
-
-%%%-----------------------------------------------------------------
-%%% Print memory information
-memory(Memory,TW) ->
- Heading = "Memory Information",
- header(Heading,body(memory_body(Heading,Memory,TW))).
-
-memory_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No memory information was found\n"];
-memory_body(Heading,Memory,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr("BGCOLOR=\"#8899AA\"",
- [th(?space),
- th("Bytes")]) |
- lists:map(fun(Entry) -> memory_table(Entry) end, Memory)])].
-
-memory_table({Key,Value}) ->
- tr([th("ALIGN=left",Key),td("ALIGN=right",Value)]).
-
-%%%-----------------------------------------------------------------
-%%% Print allocated areas information
-allocated_areas(AllocatedAreas,TW) ->
- Heading = "Information about allocated areas",
- header(Heading,body(allocated_areas_body(Heading,AllocatedAreas,TW))).
-
-allocated_areas_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found about allocated areas\n"];
-allocated_areas_body(Heading,AllocatedAreas,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr("BGCOLOR=\"#8899AA\"",
- [th(?space),
- th("Allocated (bytes)"),
- th("Used (bytes)")]) |
- lists:map(fun(Entry) -> allocated_areas_table(Entry) end,
- AllocatedAreas)])].
-
-allocated_areas_table({Key,Alloc,Used}) ->
- tr(
- [th("ALIGN=left",Key),
- td("ALIGN=right",Alloc),
- td("ALIGN=right",Used)]).
-
-
-%%%-----------------------------------------------------------------
-%%% Print allocator_info information
-allocator_info(Allocators,TW) ->
- Heading = "Allocator Information",
- header(Heading,body(allocator_info_body(Heading,Allocators,TW))).
-
-allocator_info_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No information was found about allocators\n"];
-allocator_info_body(Heading,Allocators,TW) ->
- [heading(Heading,"memory"),
- warn(TW),
- p(b("Sizes are in bytes")),
- lists:map(fun({Head,Allocator}) ->
- TableHead =
- case Head of
- {SubTitle,Columns} ->
- tr("BGCOLOR=\"#8899AA\"",
- [th("ALIGN=left",
- font("SIZE=+1",SubTitle)) |
- lists:map(
- fun(CH) ->
- th("ALIGN=right",CH)
- end,
- Columns)]);
- SubTitle ->
- tr("BGCOLOR=\"#8899AA\"",
- th("COLSPAN=10 ALIGN=left",
- font("SIZE=+1",SubTitle)))
- end,
- [table(
- "BORDER=4 CELLPADDING=4",
- [TableHead |
- lists:map(
- fun({Key,Values}) ->
- tr([th("ALIGN=left",Key) |
- lists:map(
- fun(Val) ->
- td("ALIGN=right",Val)
- end,Values)])
- end,
- Allocator)]),
- br(),br()]
- end,
- Allocators)].
-
-%%%-----------------------------------------------------------------
-%%% Print informatin about internal tables
-hash_tables(HashTables,TW) ->
- Heading = "Hash Table Information",
- header(Heading,body(hash_tables_body(Heading,HashTables,TW))).
-
-hash_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No hash table information was found\n"];
-hash_tables_body(Heading,HashTables,TW) ->
- [heading(Heading,"internal_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Name"),
- th("Size"),
- th("Used"),
- th("Objects"),
- th("Depth")]) |
- lists:map(fun(HashTable) -> hash_tables_table(HashTable) end,
- HashTables)])].
-
-hash_tables_table(HashTable) ->
- #hash_table{name=Name,size=Size,used=Used,objs=Objs,depth=Depth}=HashTable,
- tr(
- [td(Name),
- td("ALIGN=right",Size),
- td("ALIGN=right",Used),
- td("ALIGN=right",Objs),
- td("ALIGN=right",Depth)]).
-
-index_tables(IndexTables,TW) ->
- Heading = "Index Table Information",
- header(Heading,body(index_tables_body(Heading,IndexTables,TW))).
-
-index_tables_body(Heading,[],TW) ->
- [h1(Heading),
- warn(TW),
- "No index table information was found\n"];
-index_tables_body(Heading,IndexTables,TW) ->
- [heading(Heading,"internal_tables"),
- warn(TW),
- table(
- "BORDER=4 CELLPADDING=4",
- [tr(
- [th("Name"),
- th("Size"),
- th("Limit"),
- th("Used"),
- th("Rate"),
- th("Entries")]) |
- lists:map(fun(IndexTable) -> index_tables_table(IndexTable) end,
- IndexTables)])].
-
-index_tables_table(IndexTable) ->
- #index_table{name=Name,size=Size,limit=Limit,used=Used,
- rate=Rate,entries=Entries} = IndexTable,
- tr(
- [td(Name),
- td("ALIGN=right",Size),
- td("ALIGN=right",Limit),
- td("ALIGN=right",Used),
- td("ALIGN=right",Rate),
- td("ALIGN=right",Entries)]).
-
-%%%-----------------------------------------------------------------
-%%% Internal library
-start_html_page(Title) ->
- [only_http_header(),
- start_html(),
- only_html_header(Title),
- start_html_body()].
-
-stop_html_page() ->
- [stop_html_body(),
- stop_html()].
-
-only_http_header() ->
- ["Pragma:no-cache\r\n",
- "Content-type: text/html\r\n\r\n"].
-
-only_html_header(Title) ->
- only_html_header(Title,"").
-only_html_header(Title,JavaScript) ->
- ["<HEAD>\n",
- "<TITLE>", Title, "</TITLE>\n",
- JavaScript,
- "</HEAD>\n"].
-
-start_html() ->
- "<HTML>\n".
-stop_html() ->
- "</HTML>".
-start_html_body() ->
- "<BODY BGCOLOR=\"#FFFFFF\">\n".
-stop_html_body() ->
- "</BODY>\n".
-
-header(Body) ->
- header("","",Body).
-header(Title,Body) ->
- header(Title,"",Body).
-header(Title,JavaScript,Body) ->
- [only_http_header(),
- html_header(Title,JavaScript,Body)].
-
-html_header(Title,JavaScript,Body) ->
- [start_html(),
- only_html_header(Title,JavaScript),
- Body,
- stop_html()].
-
-body(Text) ->
- [start_html_body(),
- Text,
- stop_html_body()].
-
-frameset(Args,Frames) ->
- ["<FRAMESET ",Args,">\n", Frames, "\n</FRAMESET>\n"].
-frame(Args) ->
- ["<FRAME ",Args, ">\n"].
-
-start_visible_table() ->
- start_table("BORDER=\"4\" CELLPADDING=\"4\"").
-start_visible_table(ColTitles) ->
- [start_visible_table(),
- tr([th(ColTitle) || ColTitle <- ColTitles])].
-
-start_table(Args) ->
- ["<TABLE ", Args, ">\n"].
-stop_table() ->
- "</TABLE>\n".
-
-table(Args,Text) ->
- [start_table(Args), Text, stop_table()].
-tr(Text) ->
- ["<TR>\n", Text, "\n</TR>\n"].
-tr(Args,Text) ->
- ["<TR ", Args, ">\n", Text, "\n</TR>\n"].
-th(Text) ->
- ["<TH>", Text, "</TH>"].
-th(Args,Text) ->
- ["<TH ", Args, ">\n", Text, "\n</TH>\n"].
-td(Text) ->
- ["<TD>", Text, "</TD>"].
-td(Args,Text) ->
- ["<TD ", Args, ">", Text, "</TD>"].
-
-b(Text) ->
- ["<B>",Text,"</B>"].
-em(Text) ->
- ["<EM>",Text,"</EM>\n"].
-start_pre() ->
- "<PRE>".
-stop_pre() ->
- "</PRE>".
-pre(Text) ->
- [start_pre(),Text,stop_pre()].
-href(Link,Text) ->
- ["<A HREF=\"",Link,"\">",Text,"</A>"].
-href(Args,Link,Text) ->
- ["<A HREF=\"",Link,"\" ",Args,">",Text,"</A>"].
-img("") ->
- "";
-img(Picture) ->
- ["<IMG SRC=\"", Picture, "\" BORDER=0>"].
-form(Args,Text) ->
- ["<FORM ",Args,">\n",Text,"\n</FORM>\n"].
-input(Args) ->
- ["<INPUT ", Args, ">\n"].
-h1(Text) ->
- ["<H1>",Text,"</H1>\n"].
-font(Args,Text) ->
- ["<FONT ",Args,">\n",Text,"\n</FONT>\n"].
-p(Text) ->
- ["<P>",Text,"</P>\n"].
-p(Args, Text) ->
- ["<P ", Args, ">",Text,"</P>\n"].
-br() ->
- "<BR>\n".
-
-
-%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
-href_proc_port(Text) ->
- href_proc_port(Text,[]).
-href_proc_port([$#,$R,$e,$f,$<|T],Acc) ->
- %% No links to refs
- href_proc_port(T,[$;,$t,$l,$&,$f,$e,$R,$#|Acc]);
-href_proc_port([$#,$F,$u,$n,$<|T],Acc) ->
- %% No links to funs
- href_proc_port(T,[$;,$t,$l,$&,$n,$u,$F,$#|Acc]);
-href_proc_port([$#,$P,$o,$r,$t,$<|T],Acc) ->
- {[$#|Port]=HashPort,Rest} = to_gt(T,[$;,$t,$l,$&,$t,$r,$o,$P,$#]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./port?port=",Port],HashPort)|Acc]);
-href_proc_port([$<,$<|T],Acc) ->
- %% No links to binaries
- href_proc_port(T,[$;,$t,$l,$&,$;,$t,$l,$&|Acc]);
-href_proc_port([$<,C|T],Acc) when $0 =< C, C =< $9 ->
- %% Pid
- {Pid,Rest} = to_gt(T,[C,$;,$t,$l,$&]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./proc_details?pid=",Pid],Pid)|Acc]);
-href_proc_port([$",$#,$C,$D,$V,$B,$i,$n,$<|T],Acc) ->
- %% Binary written by crashdump_viewer:parse_heap_term(...)
- {SizeAndPos,[$"|Rest]} = split($>,T),
- {Size,Pos} = split($,,SizeAndPos),
- href_proc_port(Rest,[href("TARGET=\"expanded\"",
- ["./expand_binary?pos=",Pos],
- ["&lt;&lt; ",Size," bytes &gt;&gt;"]) | Acc]);
-href_proc_port([$",$#,$C,$D,$V,$P,$o,$r,$t,$<|T],Acc) ->
- %% Port written by crashdump_viewer:parse_term(...)
- {[$#|Port]=HashPort,[$"|Rest]} = to_gt(T,[$;,$t,$l,$&,$t,$r,$o,$P,$#]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./port?port=",Port],HashPort)|Acc]);
-href_proc_port([$",$#,$C,$D,$V,$P,$i,$d,$<|T],Acc) ->
- %% Pid written by crashdump_viewer:parse_term(...)
- {Pid,[$"|Rest]} = to_gt(T,[$;,$t,$l,$&]),
- href_proc_port(Rest,[href("TARGET=\"main\"",
- ["./proc_details?pid=",Pid],Pid)|Acc]);
-href_proc_port([$',$#,$C,$D,$V,$I,$n,$c,$o,$m,$p,$l,$e,$t,$e,$H,$e,$a,$p,$'|T],
- Acc)->
- %% The heap is incomplete! Written by crashdump_viewer:deref_pts(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">...(Incomplete Heap)</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$',$#,$C,$D,$V,$T,$r,$u,$n,$c,$a,$t,$e,$d,$B,$i,$n,$a,$r,$y,$'
- |T], Acc)->
- %% A binary which is truncated! Written by
- %% crashdump_viewer:parse_heap_term(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Truncated Binary)&gt;&gt;"
- "</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$',$#,$C,$D,$V,$N,$o,$n,$e,$x,$i,$s,$t,$i,$n,$g,$B,$i,$n,$a,$r,
- $y,$'|T], Acc)->
- %% A binary which could not be found in the dump! Written by
- %% crashdump_viewer:parse_heap_term(...)
- IH = lists:reverse(
- lists:flatten(
- "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Nonexisting Binary)&gt;&gt;"
- "</FONT>")),
- href_proc_port(T,IH++Acc);
-href_proc_port([$<|T],Acc) ->
- href_proc_port(T,[$;,$t,$l,$&|Acc]);
-href_proc_port([$>|T],Acc) ->
- href_proc_port(T,[$;,$t,$g,$&|Acc]);
-href_proc_port([H|T],Acc) ->
- href_proc_port(T,[H|Acc]);
-href_proc_port([],Acc) ->
- lists:reverse(Acc).
-
-to_gt(Str,Acc) ->
- {Match,Rest} = to_gt_noreverse(Str,Acc),
- {lists:reverse(Match),Rest}.
-to_gt_noreverse([$>|T],Acc) ->
- {[$;,$t,$g,$&|Acc],T};
-to_gt_noreverse([H|T],Acc) ->
- to_gt_noreverse(T,[H|Acc]);
-to_gt_noreverse([],Acc) ->
- {Acc,[]}.
-
-split(Char,Str) ->
- split(Char,Str,[]).
-split(Char,[Char|Str],Acc) -> % match Char
- {lists:reverse(Acc),Str};
-split(Char,[H|T],Acc) ->
- split(Char,T,[H|Acc]).
-
-
-warn([]) ->
- [];
-warn(Warning) ->
- font("COLOR=\"#FF0000\"",p([Warning,br(),br()])).
-
-heading(Heading,HelpMarker) ->
- [font("SIZE=+2",b(Heading)),?space,?space,help(HelpMarker)].
-
-help(HelpMarker) ->
- [href("TARGET=doc",
- ["/crashdump_doc/crashdump_help.html#",HelpMarker],
- "Help"),
- br(),br()].
-
-%%%-----------------------------------------------------------------
-%%% This function pretty formats a string which contains erlang
-%%% terms (e.g. the message queue).
-%%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
-pretty_format(In) ->
- case catch scan(In,[],initial,[]) of
- {'EXIT',_Reason} ->
- %% Probably a truncated file, so the erlang term is not complete
- [font("COLOR=\"#FF0000\"","(This term might be truncated)"),
- href_proc_port(lists:flatten(In))];
- {[R],_,Insrt} ->
- InsrtString = lists:flatten(io_lib:format("~p",[R])),
- lists:flatten(replace_insrt(lists:reverse(InsrtString),Insrt,[]))
- end.
-
-%% Finish term
-scan(In,Acc,list,Insrt) when hd(In)==$] ->
- {lists:reverse(Acc),tl(In),Insrt};
-scan(In,Acc,tuple,Insrt) when hd(In)==$} ->
- {list_to_tuple(lists:reverse(Acc)),tl(In),Insrt};
-scan(In,Acc,atom,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_atom(lists:reverse(Acc)),In,Insrt};
-scan(In,Acc,float,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_float(lists:reverse(Acc)),In,Insrt};
-scan(In,Acc,integer,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {list_to_integer(lists:reverse(Acc)),In,Insrt};
-scan([$"|In],Acc,string,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- {lists:reverse(Acc),In,Insrt};
-scan([$>|In],Acc,special,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- %% pid, ref, port, fun
- {lists:reverse([$;,$t,$g,$&|Acc]),In,Insrt};
-scan([$}|In],Acc,special,Insrt) when In==[];hd(In)==$,;hd(In)==$];hd(In)==$} ->
- %% bignum integer, e.g. #integer(2) = {2452,4324}
- {lists:reverse([$}|Acc]),In,Insrt};
-scan([$,|In],Acc,Cur,Insrt) when Cur/=string,Cur/=special ->
- scan(In,Acc,Cur,Insrt);
-
-%% In the middle of an atom
-scan([$'|In],Acc,Cur,Insrt) when Cur==atom ->
- %% all $' are removed. They are added again by list_to_atom,
- %% so if we don't remove them we will get two of them.
- scan(In,Acc,Cur,Insrt);
-
-%% A $. in the middle of an integer - turn to float
-scan([C|T],Acc,integer,Insrt) when C==$. ->
- scan(T,[C|Acc],float,Insrt);
-
-%% In the middle of an atom, integer, float or string
-scan([$<|T],Acc,Cur,Insrt) when Cur==atom;Cur==string;Cur==special ->
- scan(T,[$;,$t,$l,$&|Acc],Cur,Insrt);
-scan([$>|T],Acc,Cur,Insrt) when Cur==atom;Cur==string ->
- scan(T,[$;,$t,$g,$&|Acc],Cur,Insrt);
-scan([C|T],Acc,Cur,Insrt) when Cur==atom;Cur==integer;Cur==float;Cur==string;Cur==special ->
- scan(T,[C|Acc],Cur,Insrt);
-
-%% Start list
-scan([$[|T],Acc,Cur,Insrt0) ->
- {L,Rest,Insrt} = scan(T,[],list,Insrt0),
- scan(Rest,[L|Acc],Cur,Insrt);
-
-%% Star tuple
-scan([${|T],Acc,Cur,Insrt0) ->
- {Tuple,Rest,Insrt} = scan(T,[],tuple,Insrt0),
- scan(Rest,[Tuple|Acc],Cur,Insrt);
-
-%% Star string
-scan([$"|T],Acc,Cur,Insrt0) ->
- {String,Rest,Insrt} = scan(T,[],string,Insrt0),
- scan(Rest,[String|Acc],Cur,Insrt);
-
-%% Start atom
-scan([$'|T],Acc,Cur,Insrt0) ->
- %% all $' are removed. They are added again by list_to_atom,
- %% so if we don't remove them we will get two of them.
- {Atom,Rest,Insrt} = scan(T,[],atom,Insrt0),
- scan(Rest,[Atom|Acc],Cur,Insrt);
-scan([C|T],Acc,Cur,Insrt0) when C>=$A,C=<$Z;C>=$a,C=<$z;C==$'->
- {Atom,Rest,Insrt} = scan(T,[C],atom,Insrt0),
- scan(Rest,[Atom|Acc],Cur,Insrt);
-
-%% Start integer or float
-scan([C|T],Acc,Cur,Insrt0) when C>=$0,C=<$9;C==$- ->
- {Num,Rest,Insrt} = scan(T,[C],integer,Insrt0), % can later change to float
- scan(Rest,[Num|Acc],Cur,Insrt);
-
-%% Start Pid/Port/Ref/Fun/Binary
-scan([$<|T],Acc,Cur,Insrt0) ->
- {Special,Rest,Insrt} = scan(T,[$;,$t,$l,$&],special,Insrt0),
- scan(Rest,['$insrt'|Acc],Cur,[Special|Insrt]);
-scan([$#|T],Acc,Cur,Insrt0) ->
- {Special,Rest,Insrt} = scan(T,[$#],special,Insrt0),
- scan(Rest,['$insrt'|Acc],Cur,[Special|Insrt]);
-
-
-%% done
-scan([],Acc,initial,Insrt) ->
- {Acc,[],Insrt}.
-
-
-replace_insrt("'trsni$'"++Rest,[H|T],Acc) -> % the list is reversed here!
- Special =
- case H of
- "&lt;&lt;" ++ _Binary ->
- H;
- "&lt;" ++ _Pid ->
- href("TARGET=\"main\"",["./proc_details?pid=",H],H);
- "#Port&lt;" ++ Port ->
- href("TARGET=\"main\"",["./port?port=","Port&lt;"++Port],H);
- "#" ++ _other ->
- H
- end,
- replace_insrt(Rest,T,[Special|Acc]);
-replace_insrt([H|T],Insrt,Acc) ->
- replace_insrt(T,Insrt,[H|Acc]);
-replace_insrt([],[],Acc) ->
- Acc.
-
-%%%-----------------------------------------------------------------
-%%% Create a page with one table by delivering chunk by chunk to
-%%% inets. crashdump_viewer first calls chunk_page/5 once, then
-%%% chunk/3 multiple times until all data is delivered.
-chunk_page(processes,SessionId,TW,{Sorted,SharedHeap,DumpVsn},FirstChunk) ->
- Columns = procs_summary_table_head(Sorted,SharedHeap,DumpVsn),
- chunk_page(SessionId, "Process Information", TW, FirstChunk,
- "processes", Columns, fun procs_summary_table/1);
-chunk_page(ports,SessionId,TW,_,FirstChunk) ->
- chunk_page(SessionId, "Port Information", TW, FirstChunk,
- "ports", port_table_head(), fun ports_table/1);
-chunk_page(ets_tables,SessionId,TW,Heading,FirstChunk) ->
- Columns = ["Owner",
- "Slot",
- "Id",
- "Name",
- "Type",
- "Buckets",
- "Objects",
- "Memory (bytes)"],
- chunk_page(SessionId, Heading, TW, FirstChunk,
- "ets_tables", Columns, fun ets_tables_table/1);
-chunk_page(timers,SessionId,TW,Heading,FirstChunk) ->
- chunk_page(SessionId, Heading, TW, FirstChunk, "timers",
- ["Owner","Message","Time left"], fun timers_table/1);
-chunk_page(loaded_mods,SessionId,TW,{CC,OC},FirstChunk) ->
- TotalsInfo = p([b("Current code: "),CC," bytes",br(),
- b("Old code: "),OC," bytes"]),
- Columns = ["Module","Current size (bytes)","Old size (bytes)"],
- chunk_page(SessionId, "Loaded Modules Information", TW, FirstChunk,
- "loaded_modules", TotalsInfo,Columns, fun loaded_mods_table/1);
-chunk_page(funs,SessionId, TW, _, FirstChunk) ->
- Columns = ["Module",
- "Uniq",
- "Index",
- "Address",
- "Native_address",
- "Refc"],
- chunk_page(SessionId, "Fun Information", TW, FirstChunk,
- "funs", Columns, fun funs_table/1).
-
-chunk_page(SessionId,Heading,TW,FirstChunk,Type,TableColumns,TableFun) ->
- chunk_page(SessionId,Heading,TW,FirstChunk,Type,[],TableColumns,TableFun).
-chunk_page(SessionId,Heading,TW,done,Type,_TotalsInfo,_TableColumns,_TableFun) ->
- no_info_found(SessionId,Heading,TW,Type);
-chunk_page(SessionId,Heading,TW,FirstChunk,Type,TotalsInfo,TableColumns,TableFun) ->
- deliver_first(SessionId,[start_html_page(Heading),
- heading(Heading,Type),
- warn(TW),
- TotalsInfo,
- start_visible_table(TableColumns)]),
- chunk(SessionId,FirstChunk,TableFun),
- TableFun.
-
-no_info_found(SessionId, Heading, TW, Type) ->
- Info = ["No ", Type, " were found\n"],
- deliver_first(SessionId,[start_html_page(Heading),
- h1(Heading),
- warn(TW),
- Info,
- stop_html_page()]).
-
-chunk(SessionId, done, _TableFun) ->
- deliver(SessionId,[stop_table(),stop_html_page()]);
-chunk(SessionId, Items, TableFun) ->
- deliver(SessionId, [lists:map(TableFun, Items),
- stop_table(), %! Will produce an empty table at the end
- start_visible_table()]). % of the page :(
-
-%%%-----------------------------------------------------------------
-%%% Deliver part of a page to inets
-%%% The first part, which includes the HTTP header, must always be
-%%% delivered as a string (i.e. no binaries). The rest of the page is
-%%% better delivered as binaries in order to avoid data copying.
-deliver_first(SessionId,String) ->
- mod_esi:deliver(SessionId,String).
-deliver(SessionId,IoList) ->
- mod_esi:deliver(SessionId,[list_to_binary(IoList)]).
-
-
-%%%-----------------------------------------------------------------
-%%% Page specific stuff for chunk pages
-procs_summary_table_head(Sorted,SharedHeap,DumpVsn) ->
- MemHeading =
- if DumpVsn>=?r16b01_dump_vsn ->
- "Memory (bytes)";
- true ->
- if SharedHeap ->
- "Stack";
- true ->
- "Stack+heap"
- end
- end,
- [procs_summary_table_head1("pid","Pid",Sorted),
- procs_summary_table_head1("name_func","Name/Spawned as",Sorted),
- procs_summary_table_head1("state","State",Sorted),
- procs_summary_table_head1("reds","Reductions",Sorted),
- procs_summary_table_head1("mem",MemHeading,Sorted),
- procs_summary_table_head1("msg_q_len","MsgQ Length",Sorted)].
-
-procs_summary_table_head1(_,Text,no_sort) ->
- Text;
-procs_summary_table_head1(Sorted,Text,Sorted) ->
- %% Mark the sorted column (bigger and italic)
- font("SIZE=\"+1\"",em(href("./sort_procs?sort="++Sorted,Text)));
-procs_summary_table_head1(SortOn,Text,_Sorted) ->
- href("./sort_procs?sort="++SortOn,Text).
-
-procs_summary_table(Proc) ->
- #proc{pid=Pid,name=Name,state=State,
- reds=Reds,stack_heap=Stack,memory=Memory,msg_q_len=MsgQLen}=Proc,
- Mem =
- case Memory of
- undefined -> % assuming pre-R16B01
- case Stack of
- -1 -> "unknown";
- _ -> integer_to_list(Stack)
- end;
- _ ->
- integer_to_list(Memory)
- end,
- tr(
- [td(href(["./proc_details?pid=",Pid],Pid)),
- td(Name),
- td(State),
- td("ALIGN=right",integer_to_list(Reds)),
- td("ALIGN=right",Mem),
- td("ALIGN=right",integer_to_list(MsgQLen))]).
-
-port_table_head() ->
- ["Id","Slot","Connected","Links","Name","Monitors","Controls"].
-
-ports_table(Port) ->
- #port{id=Id,slot=Slot,connected=Connected,links=Links,name=Name,
- monitors=Monitors,controls=Controls}=Port,
- tr(
- [td(Id),
- td("ALIGN=right",Slot),
- td(href_proc_port(Connected)),
- td(href_proc_port(Links)),
- td(Name),
- td(href_proc_port(Monitors)),
- td(Controls)]).
-
-ets_tables_table(EtsTable) ->
- #ets_table{pid=Pid,slot=Slot,id=Id,name=Name,type=Type,
- buckets=Buckets,size=Size,memory=Memory} = EtsTable,
- tr(
- [td(href_proc_port(Pid)),
- td(Slot),
- td(Id),
- td(Name),
- td(Type),
- td("ALIGN=right",Buckets),
- td("ALIGN=right",Size),
- td("ALIGN=right",Memory)]).
-
-timers_table(Timer) ->
- #timer{pid=Pid,msg=Msg,time=Time}=Timer,
- tr(
- [td(href_proc_port(Pid)),
- td(Msg),
- td("ALIGN=right",Time)]).
-
-loaded_mods_table(#loaded_mod{mod=Mod,current_size=CS,old_size=OS}) ->
- tr([td(href(["loaded_mod_details?mod=",http_uri:encode(Mod)],Mod)),
- td("ALIGN=right",CS),
- td("ALIGN=right",OS)]).
-
-funs_table(Fu) ->
- #fu{module=Module,uniq=Uniq,index=Index,address=Address,
- native_address=NativeAddress,refc=Refc}=Fu,
- tr(
- [td(Module),
- td("ALIGN=right",Uniq),
- td("ALIGN=right",Index),
- td(Address),
- td(NativeAddress),
- td("ALIGN=right",Refc)]).
diff --git a/lib/observer/src/etop_tr.erl b/lib/observer/src/etop_tr.erl
index dd326fe639..e6c69e4e1e 100644
--- a/lib/observer/src/etop_tr.erl
+++ b/lib/observer/src/etop_tr.erl
@@ -59,7 +59,7 @@ reader(Config) ->
Port = getopt(port, Config),
{ok, Sock} = gen_tcp:connect(Host, Port, [{active, false}]),
- spawn_link(fun() -> reader_init(Sock,getopt(store,Config),nopid) end).
+ spawn_link(fun() -> reader_init(Sock,getopt(store,Config),[]) end).
%%%%%%%%%%%%%% Socket reader %%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -73,24 +73,30 @@ reader(Sock, Store, Last) ->
New = handle_data(Last, Data, Store),
reader(Sock, Store, New).
-handle_data(_, {_, Pid, in, _, Time}, _) ->
- {Pid,Time};
-handle_data({Pid,Time1}, {_, Pid, out, _, Time2}, Store) ->
- Elapsed = elapsed(Time1, Time2),
- case ets:member(Store,Pid) of
- true -> ets:update_counter(Store, Pid, Elapsed);
- false -> ets:insert(Store,{Pid,Elapsed})
- end,
- nopid;
+handle_data(Last, {_, Pid, in, _, Time}, _) ->
+ [{Pid,Time}|Last];
+handle_data([], {_, _, out, _, _}, _Store) ->
+ %% ignore - there was probably just a 'drop'
+ [];
+handle_data(Last, {_, Pid, out, _, Time2} = G, Store) ->
+ case lists:keytake(Pid, 1, Last) of
+ {_, {_, Time1}, New} ->
+ Elapsed = elapsed(Time1, Time2),
+ case ets:member(Store,Pid) of
+ true -> ets:update_counter(Store, Pid, Elapsed);
+ false -> ets:insert(Store,{Pid,Elapsed})
+ end,
+ New;
+ false ->
+ io:format("Erlang top got garbage ~p~n", [G]),
+ Last
+ end;
handle_data(_W, {drop, D}, _) -> %% Error case we are missing data here!
io:format("Erlang top dropped data ~p~n", [D]),
- nopid;
-handle_data(nopid, {_, _, out, _, _}, _Store) ->
- %% ignore - there was probably just a 'drop'
- nopid;
-handle_data(_, G, _) ->
+ [];
+handle_data(Last, G, _) ->
io:format("Erlang top got garbage ~p~n", [G]),
- nopid.
+ Last.
elapsed({Me1, S1, Mi1}, {Me2, S2, Mi2}) ->
Me = (Me2 - Me1) * 1000000,
diff --git a/lib/observer/src/observer.app.src b/lib/observer/src/observer.app.src
index 6d5259624c..f14f0ee849 100644
--- a/lib/observer/src/observer.app.src
+++ b/lib/observer/src/observer.app.src
@@ -20,12 +20,32 @@
[{description, "OBSERVER version 1"},
{vsn, "%VSN%"},
{modules, [crashdump_viewer,
- crashdump_viewer_html,
+ cdv_atom_cb,
+ cdv_bin_cb,
+ cdv_detail_wx,
+ cdv_dist_cb,
+ cdv_ets_cb,
+ cdv_fun_cb,
+ cdv_gen_cb,
+ cdv_html_wx,
+ cdv_info_wx,
+ cdv_int_tab_cb,
+ cdv_mem_cb,
+ cdv_mod_cb,
+ cdv_multi_wx,
+ cdv_port_cb,
+ cdv_proc_cb,
+ cdv_table_wx,
+ cdv_term_cb,
+ cdv_timer_cb,
+ cdv_virtual_list_wx,
+ cdv_wx,
etop,
etop_tr,
etop_txt,
observer,
observer_app_wx,
+ observer_html_lib,
observer_lib,
observer_perf_wx,
observer_pro_wx,
diff --git a/lib/observer/src/observer_app_wx.erl b/lib/observer/src/observer_app_wx.erl
index 72bafcc5e0..a8ace10275 100644
--- a/lib/observer/src/observer_app_wx.erl
+++ b/lib/observer/src/observer_app_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -81,7 +81,7 @@ init([Notebook, Parent]) ->
]),
Main = wxBoxSizer:new(?wxHORIZONTAL),
Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
- {style, ?wxSP_LIVE_UPDATE},
+ {style, ?SASH_STYLE},
{id, 2}
]),
Apps = wxListBox:new(Splitter, 3, []),
@@ -178,11 +178,16 @@ handle_event(#wx{id=Id, event=_Sz=#wxSize{size=Size}},
{noreply, State};
handle_event(#wx{event=#wxMouse{type=Type, x=X0, y=Y0}},
- S0=#state{app=#app{ptree=Tree}, app_w=AppWin}) ->
- {X,Y} = wxScrolledWindow:calcUnscrolledPosition(AppWin, X0, Y0),
- Hit = locate_node(X,Y, [Tree]),
- State = handle_mouse_click(Hit, Type, S0),
- {noreply, State};
+ S0=#state{app=App, app_w=AppWin}) ->
+ case App of
+ #app{ptree=Tree} ->
+ {X,Y} = wxScrolledWindow:calcUnscrolledPosition(AppWin, X0, Y0),
+ Hit = locate_node(X,Y, [Tree]),
+ State = handle_mouse_click(Hit, Type, S0),
+ {noreply, State};
+ _ ->
+ {noreply, S0}
+ end;
handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
State = #state{sel=undefined}) ->
@@ -190,8 +195,8 @@ handle_event(#wx{event=#wxCommand{type=command_menu_selected}},
{noreply, State};
handle_event(#wx{id=?ID_PROC_INFO, event=#wxCommand{type=command_menu_selected}},
- State = #state{panel=Panel, sel={#box{s1=#str{pid=Pid}},_}}) ->
- observer_procinfo:start(Pid, Panel, self()),
+ State = #state{sel={#box{s1=#str{pid=Pid}},_}}) ->
+ observer ! {open_link, Pid},
{noreply, State};
handle_event(#wx{id=?ID_PROC_MSG, event=#wxCommand{type=command_menu_selected}},
@@ -337,8 +342,8 @@ code_change(_, _, State) ->
handle_mouse_click(Node = {#box{s1=#str{pid=Pid}},_}, Type,
State=#state{app_w=AppWin,panel=Panel}) ->
case Type of
- left_dclick -> observer_procinfo:start(Pid, Panel, self());
- right_down -> popup_menu(Panel);
+ left_dclick -> observer ! {open_link, Pid};
+ right_down -> popup_menu(Panel);
_ -> ok
end,
observer_wx:set_status(io_lib:format("Pid: ~p", [Pid])),
diff --git a/lib/observer/src/observer_defs.hrl b/lib/observer/src/observer_defs.hrl
index 586e7bbff9..3adc358b95 100644
--- a/lib/observer/src/observer_defs.hrl
+++ b/lib/observer/src/observer_defs.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -35,13 +35,16 @@
check = false
}).
--record(attrs, {even, odd, deleted, changed, searched}).
+-record(attrs, {even, odd, searched, deleted, changed_odd, changed_even, new_odd, new_even}).
-define(EVEN(Row), ((Row rem 2) =:= 0)).
-define(BG_EVEN, {230,230,250}).
-define(BG_ODD, {255,255,255}).
-define(BG_DELETED, {100,100,100}).
--define(FG_DELETED, {240,30,30}).
+-define(FG_DELETED, {230,230,230}).
-define(BG_SEARCHED,{235,215,90}).
--define(BG_CHANGED, {230,230,250}).
+-define(BG_CHANGED, {184,207,184}).
+-define(BG_NEW, {123,168,123}).
-define(LCTRL_WDECR, 4). %% Remove some pixels in column width to avoid creating unnecessary scrollbar
+
+-define(SASH_STYLE, ?wxSP_LIVE_UPDATE bor ?wxSP_NOBORDER bor ?wxSP_3DSASH).
diff --git a/lib/observer/src/observer_html_lib.erl b/lib/observer/src/observer_html_lib.erl
new file mode 100644
index 0000000000..9f77891426
--- /dev/null
+++ b/lib/observer/src/observer_html_lib.erl
@@ -0,0 +1,388 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(observer_html_lib).
+
+%%
+%% This module implements the HTML generation for the crashdump
+%% viewer. No logic or states are kept by this module.
+%%
+
+-export([plain_page/1,
+ expandable_term/3,
+ warning/1]).
+
+-include("crashdump_viewer.hrl").
+-include("observer_defs.hrl").
+
+%%%-----------------------------------------------------------------
+%%% Display the given information as is, no heading
+%%% Empty body if no info exists.
+warning(Info) ->
+ header(body(warning_body(Info))).
+
+warning_body(Info) ->
+ [warn(Info)].
+
+%%%-----------------------------------------------------------------
+%%% Display the given information as is, no heading
+%%% Empty body if no info exists.
+plain_page(Info) ->
+ header(body(plain_body(Info))).
+
+plain_body(Info) ->
+ [pre(href_proc_port(lists:flatten(Info)))].
+
+%%%-----------------------------------------------------------------
+%%% Expanded memory
+expandable_term(Heading,Expanded,Tab) ->
+ header(Heading,body(expandable_term_body(Heading,Expanded,Tab))).
+
+expandable_term_body(Heading,[],_Tab) ->
+ [case Heading of
+ "MsgQueue" -> "No messages were found";
+ "Message Queue" -> "No messages were found";
+ "StackDump" -> "No stack dump was found";
+ "Dictionary" -> "No dictionary was found";
+ "ProcState" -> "Information could not be retrieved,"
+ " system messages may not be handled by this process."
+ end];
+expandable_term_body(Heading,Expanded,Tab) ->
+ Attr = "BORDER=0 CELLPADDING=0 CELLSPACING=1 WIDTH=100%",
+ [case Heading of
+ "MsgQueue" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=70%","Message"),
+ th("WIDTH=30%","SeqTraceToken")]) |
+ element(1, lists:mapfoldl(fun(Msg, Even) ->
+ {msgq_table(Tab, Msg, Even),
+ not Even}
+ end,
+ true, Expanded))]);
+ "Message Queue" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=10%","Id"),
+ th("WIDTH=90%","Message")]) |
+ element(1, lists:mapfoldl(fun(Msg, {Even,N}) ->
+ {msgq_table(Tab, Msg, N, Even),
+ {not Even, N+1}}
+ end,
+ {true,1}, Expanded))]);
+ "StackDump" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=20%","Label"),
+ th("WIDTH=80%","Term")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {stackdump_table(Tab, Entry, Even),
+ not Even}
+ end, true, Expanded))]);
+ "ProcState" ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=20%","Label"),
+ th("WIDTH=80%","Information")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {proc_state(Tab, Entry,Even),
+ not Even}
+ end, true, Expanded))]);
+ _ ->
+ table(Attr,
+ [tr(
+ [th("WIDTH=30%","Key"),
+ th("WIDTH=70%","Value")]) |
+ element(1, lists:mapfoldl(fun(Entry, Even) ->
+ {dict_table(Tab, Entry,Even),
+ not Even}
+ end, true, Expanded))])
+ end].
+
+msgq_table(Tab,{Msg0,Token0}, Even) ->
+ Token = case Token0 of
+ [] -> "";
+ _ -> io_lib:fwrite("~w",[Token0])
+ end,
+ Msg = all_or_expand(Tab,Msg0),
+ tr(color(Even),[td(pre(Msg)), td(Token)]).
+
+msgq_table(Tab,Msg0, Id, Even) ->
+ Msg = all_or_expand(Tab,Msg0),
+ tr(color(Even),[td(integer_to_list(Id)), td(pre(Msg))]).
+
+stackdump_table(Tab,{Label0,Term0},Even) ->
+ Label = io_lib:format("~w",[Label0]),
+ Term = all_or_expand(Tab,Term0),
+ tr(color(Even), [td("VALIGN=center",pre(Label)), td(pre(Term))]).
+
+dict_table(Tab,{Key0,Value0}, Even) ->
+ Key = all_or_expand(Tab,Key0),
+ Value = all_or_expand(Tab,Value0),
+ tr(color(Even), [td("VALIGN=center",pre(Key)), td(pre(Value))]).
+
+proc_state(Tab,{Key0,Value0}, Even) ->
+ Key = lists:flatten(io_lib:format("~s",[Key0])),
+ Value = all_or_expand(Tab,Value0),
+ tr(color(Even), [td("VALIGN=center",Key), td(pre(Value))]).
+
+all_or_expand(Tab,Term) ->
+ Preview = io_lib:format("~P",[Term,8]),
+ Check = io_lib:format("~P",[Term,100]),
+ Exp = Preview=/=Check,
+ all_or_expand(Tab,Term,Preview,Exp).
+all_or_expand(_Tab,_Term,Str,false) ->
+ href_proc_port(lists:flatten(Str));
+all_or_expand(Tab,Term,Preview,true)
+ when not is_binary(Term) ->
+ Key = {Key1,Key2,Key3} = now(),
+ ets:insert(Tab,{Key,Term}),
+ [href_proc_port(lists:flatten(Preview), false), $\n,
+ href("TARGET=\"expanded\"",
+ ["#Term?key1="++integer_to_list(Key1)++
+ "&key2="++integer_to_list(Key2)++
+ "&key3="++integer_to_list(Key3)],
+ "Click to expand above term")];
+all_or_expand(Tab,Bin,PreviewStr,true) when is_binary(Bin) ->
+ <<Preview:80, _/binary>> = Bin,
+ Size = byte_size(Bin),
+ Hash = erlang:phash2(Bin),
+ Key = {Preview, Size, Hash},
+ ets:insert(Tab,{Key,Bin}),
+ [href_proc_port(lists:flatten(PreviewStr), false), $\n,
+ href("TARGET=\"expanded\"",
+ ["#OBSBinary?key1="++integer_to_list(Preview)++
+ "&key2="++integer_to_list(Size)++
+ "&key3="++integer_to_list(Hash)],
+ "Click to expand above term")].
+
+
+
+color(true) -> io_lib:format("BGCOLOR=\"#~2.16.0B~2.16.0B~2.16.0B\"", tuple_to_list(?BG_EVEN));
+color(false) -> io_lib:format("BGCOLOR=\"#~2.16.0B~2.16.0B~2.16.0B\"", tuple_to_list(?BG_ODD)).
+
+%%%-----------------------------------------------------------------
+%%% Internal library
+start_html() ->
+ "<HTML>\n".
+stop_html() ->
+ "</HTML>".
+start_html_body() ->
+ "<BODY BGCOLOR=\"#FFFFFF\">\n".
+stop_html_body() ->
+ "</BODY>\n".
+
+header(Body) ->
+ header("","",Body).
+header(Title,Body) ->
+ header(Title,"",Body).
+header(Title,JavaScript,Body) ->
+ [%only_http_header(),
+ html_header(Title,JavaScript,Body)].
+
+html_header(Title,JavaScript,Body) ->
+ [start_html(),
+ only_html_header(Title,JavaScript),
+ Body,
+ stop_html()].
+
+only_html_header(Title,JavaScript) ->
+ ["<HEAD>\n",
+ "<TITLE>", Title, "</TITLE>\n",
+ JavaScript,
+ "</HEAD>\n"].
+
+body(Text) ->
+ [start_html_body(),
+ Text,
+ stop_html_body()].
+
+start_table(Args) ->
+ ["<TABLE ", Args, ">\n"].
+stop_table() ->
+ "</TABLE>\n".
+
+table(Args,Text) ->
+ [start_table(Args), Text, stop_table()].
+tr(Text) ->
+ ["<TR>\n", Text, "\n</TR>\n"].
+tr(Args,Text) ->
+ ["<TR ", Args, ">\n", Text, "\n</TR>\n"].
+th(Args,Text) ->
+ ["<TH ", Args, ">\n", Text, "\n</TH>\n"].
+td(Text) ->
+ ["<TD>", Text, "</TD>"].
+td(Args,Text) ->
+ ["<TD ", Args, ">", Text, "</TD>"].
+
+start_pre() ->
+ "<PRE>".
+stop_pre() ->
+ "</PRE>".
+pre(Text) ->
+ [start_pre(),Text,stop_pre()].
+href(Link,Text) ->
+ ["<A HREF=\"",Link,"\">",Text,"</A>"].
+href(Args,Link,Text) ->
+ ["<A HREF=\"",Link,"\" ",Args,">",Text,"</A>"].
+font(Args,Text) ->
+ ["<FONT ",Args,">\n",Text,"\n</FONT>\n"].
+p(Text) ->
+ ["<P>",Text,"</P>\n"].
+br() ->
+ "<BR>\n".
+
+
+%% In all the following, "<" is changed to "&lt;" and ">" is changed to "&gt;"
+href_proc_port(Text) ->
+ href_proc_port(Text,true).
+href_proc_port(Text,LinkToBin) ->
+ href_proc_port(Text,[],LinkToBin).
+href_proc_port("#Ref<"++T,Acc,LTB) ->
+ %% No links to refs
+ href_proc_port(T,["#Ref&lt;"|Acc],LTB);
+href_proc_port("#Fun<"++T,Acc,LTB) ->
+ %% No links to funs
+ href_proc_port(T,["#Fun&lt;"|Acc],LTB);
+href_proc_port("#Port<"++T,Acc,LTB) ->
+ {Port0,Rest} = split($>,T),
+ Port = "#Port&lt;"++Port0 ++ "&gt;",
+ href_proc_port(Rest,[href(Port,Port)|Acc],LTB);
+href_proc_port("<<"++T,Acc,LTB) ->
+ %% No links to binaries
+ href_proc_port(T,["&lt;&lt;"|Acc],LTB);
+href_proc_port("<"++([C|_]=T),Acc,LTB) when $0 =< C, C =< $9 ->
+ %% Pid
+ {Pid0,Rest} = split($>,T),
+ Pid = "&lt;" ++ Pid0 ++ "&gt",
+ href_proc_port(Rest,[href(Pid,Pid)|Acc],LTB);
+href_proc_port("['#CDVBin'"++T,Acc,LTB) ->
+ %% Binary written by crashdump_viewer:parse_heap_term(...)
+ href_proc_bin(cdv, T, Acc, LTB);
+href_proc_port("['#OBSBin'"++T,Acc,LTB) ->
+ %% Binary written by crashdump_viewer:parse_heap_term(...)
+ href_proc_bin(obs, T, Acc, LTB);
+href_proc_port("['#CDVPort'"++T,Acc,LTB) ->
+ %% Port written by crashdump_viewer:parse_term(...)
+ {Port0,Rest} = split($],T),
+ PortStr=
+ case string:tokens(Port0,",.|") of
+ [X,Y] ->
+ Port = "#Port&lt;"++X++"."++Y++"&gt;",
+ href(Port,Port);
+ Ns ->
+ "#Port&lt;" ++ string:join(Ns,".") ++"...&gt;"
+ end,
+ href_proc_port(Rest,[PortStr|Acc],LTB);
+href_proc_port("['#CDVPid'"++T,Acc,LTB) ->
+ %% Pid written by crashdump_viewer:parse_term(...)
+ {Pid0,Rest} = split($],T),
+ PidStr =
+ case string:tokens(Pid0,",.|") of
+ [X,Y,Z] ->
+ Pid = "&lt;"++X++"."++Y++"."++Z++"&gt;",
+ href(Pid,Pid);
+ Ns ->
+ "&lt;" ++ string:join(Ns,".") ++ "...&gt;"
+ end,
+ href_proc_port(Rest,[PidStr|Acc],LTB);
+href_proc_port("'#CDVIncompleteHeap'"++T,Acc,LTB)->
+ %% The heap is incomplete! Written by crashdump_viewer:deref_pts(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">...(Incomplete Heap)</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("'#CDVTruncatedBinary'"++T,Acc,LTB)->
+ %% A binary which is truncated! Written by
+ %% crashdump_viewer:parse_heap_term(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Truncated Binary)&gt;&gt;"
+ "</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("'#CDVNonexistingBinary'"++T,Acc,LTB)->
+ %% A binary which could not be found in the dump! Written by
+ %% crashdump_viewer:parse_heap_term(...)
+ IH = lists:reverse(
+ lists:flatten(
+ "<FONT COLOR=\"#FF0000\">&lt;&lt;...(Nonexisting Binary)&gt;&gt;"
+ "</FONT>")),
+ href_proc_port(T,IH++Acc,LTB);
+href_proc_port("<"++T,Acc,LTB) ->
+ href_proc_port(T,["&lt;"|Acc],LTB);
+href_proc_port(">"++T,Acc,LTB) ->
+ href_proc_port(T,["&gt;"|Acc],LTB);
+href_proc_port([H|T],Acc,LTB) ->
+ href_proc_port(T,[H|Acc],LTB);
+href_proc_port([],Acc,_) ->
+ lists:reverse(Acc).
+
+href_proc_bin(From, T, Acc, LTB) ->
+ {OffsetSizePos,Rest} = split($],T),
+ BinStr =
+ case string:tokens(OffsetSizePos,",.| \n") of
+ [Offset,Size,Pos] when From =:= cdv ->
+ Id = {list_to_integer(Offset),10,list_to_integer(Pos)},
+ {ok,PreviewBin} = crashdump_viewer:expand_binary(Id),
+ PreviewStr = ["&lt;&lt;",
+ [integer_to_list(X)++"," || <<X:8>> <= PreviewBin],
+ "...(",
+ observer_lib:to_str({bytes,Size}),
+ ")&gt;&gt;"],
+ if LTB ->
+ href("TARGET=\"expanded\"",
+ ["#Binary?offset="++Offset++
+ "&size="++Size++
+ "&pos="++Pos],
+ PreviewStr);
+ true ->
+ PreviewStr
+ end;
+ [Preview,Size,Md5] when From =:= obs ->
+ PreviewBin = <<(list_to_integer(Preview)):80>>,
+ PreviewStr = ["&lt;&lt;",
+ [integer_to_list(X)++"," || <<X:8>> <= PreviewBin],
+ "...(",
+ observer_lib:to_str({bytes,list_to_integer(Size)}),
+ ")&gt;&gt;"],
+ if LTB ->
+ href("TARGET=\"expanded\"",
+ ["#OBSBinary?key1="++Preview++
+ "&key2="++Size++
+ "&key3="++Md5],
+ PreviewStr);
+ true ->
+ PreviewStr
+ end;
+ _ ->
+ "&lt;&lt; ... &gt;&gt;"
+ end,
+ href_proc_port(Rest,[BinStr|Acc],LTB).
+
+split(Char,Str) ->
+ split(Char,Str,[]).
+split(Char,[Char|Str],Acc) -> % match Char
+ {lists:reverse(Acc),Str};
+split(Char,[H|T],Acc) ->
+ split(Char,T,[H|Acc]).
+
+
+warn([]) ->
+ [];
+warn(Warning) ->
+ font("COLOR=\"#FF0000\"",p([Warning,br(),br()])).
diff --git a/lib/observer/src/observer_lib.erl b/lib/observer/src/observer_lib.erl
index f7712cf3da..e0f7bf482b 100644
--- a/lib/observer/src/observer_lib.erl
+++ b/lib/observer/src/observer_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -19,17 +19,26 @@
-module(observer_lib).
-export([get_wx_parent/1,
- display_info_dialog/1, user_term/3, user_term_multiline/3,
+ display_info_dialog/1, display_yes_no_dialog/1,
+ display_progress_dialog/2, destroy_progress_dialog/0,
+ wait_for_progress/0, report_progress/1,
+ user_term/3, user_term_multiline/3,
interval_dialog/4, start_timer/1, stop_timer/1,
display_info/2, fill_info/2, update_info/2, to_str/1,
create_menus/3, create_menu_item/3,
create_attrs/0,
- set_listctrl_col_size/2
+ set_listctrl_col_size/2,
+ create_status_bar/1,
+ html_window/1, html_window/2
]).
-include_lib("wx/include/wx.hrl").
-include("observer_defs.hrl").
+-define(SINGLE_LINE_STYLE, ?wxBORDER_NONE bor ?wxTE_READONLY bor ?wxTE_RICH2).
+-define(MULTI_LINE_STYLE, ?SINGLE_LINE_STYLE bor ?wxTE_MULTILINE).
+
+
get_wx_parent(Window) ->
Parent = wxWindow:getParent(Window),
case wx:is_null(Parent) of
@@ -96,11 +105,19 @@ setup_timer(Bool, {Timer, Old}) ->
setup_timer(Bool, {false, Old}).
display_info_dialog(Str) ->
- Dlg = wxMessageDialog:new(wx:null(), Str),
+ display_info_dialog("",Str).
+display_info_dialog(Title,Str) ->
+ Dlg = wxMessageDialog:new(wx:null(), Str, [{caption,Title}]),
wxMessageDialog:showModal(Dlg),
wxMessageDialog:destroy(Dlg),
ok.
+display_yes_no_dialog(Str) ->
+ Dlg = wxMessageDialog:new(wx:null(), Str, [{style,?wxYES_NO}]),
+ R = wxMessageDialog:showModal(Dlg),
+ wxMessageDialog:destroy(Dlg),
+ R.
+
%% display_info(Parent, [{Title, [{Label, Info}]}]) -> {Panel, Sizer, InfoFieldsToUpdate}
display_info(Frame, Info) ->
Panel = wxPanel:new(Frame),
@@ -108,24 +125,50 @@ display_info(Frame, Info) ->
Sizer = wxBoxSizer:new(?wxVERTICAL),
wxSizer:addSpacer(Sizer, 5),
Add = fun(BoxInfo) ->
- {Box, InfoFs} = create_box(Panel, BoxInfo),
- wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
- {border, 5}]),
- wxSizer:addSpacer(Sizer, 5),
- InfoFs
+ case create_box(Panel, BoxInfo) of
+ {Box, InfoFs} ->
+ wxSizer:add(Sizer, Box, [{flag, ?wxEXPAND bor ?wxALL},
+ {border, 5}]),
+ wxSizer:addSpacer(Sizer, 5),
+ InfoFs;
+ undefined ->
+ []
+ end
end,
InfoFs = [Add(I) || I <- Info],
wxWindow:setSizerAndFit(Panel, Sizer),
{Panel, Sizer, InfoFs}.
+fill_info([{dynamic, Key}|Rest], Data)
+ when is_atom(Key); is_function(Key) ->
+ %% Special case used by crashdump_viewer when the value decides
+ %% which header to use
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ {Str,Value} -> [{Str, Value} | fill_info(Rest, Data)]
+ end;
fill_info([{Str, Key}|Rest], Data) when is_atom(Key); is_function(Key) ->
- [{Str, get_value(Key, Data)} | fill_info(Rest, Data)];
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str, Value} | fill_info(Rest, Data)]
+ end;
+fill_info([{Str,Attrib,Key}|Rest], Data) when is_atom(Key); is_function(Key) ->
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str,Attrib,Value} | fill_info(Rest, Data)]
+ end;
fill_info([{Str, {Format, Key}}|Rest], Data)
when is_atom(Key); is_function(Key), is_atom(Format) ->
case get_value(Key, Data) of
- undefined -> [{Str, undefined} | fill_info(Rest, Data)];
+ undefined -> [undefined | fill_info(Rest, Data)];
Value -> [{Str, {Format, Value}} | fill_info(Rest, Data)]
end;
+fill_info([{Str, Attrib, {Format, Key}}|Rest], Data)
+ when is_atom(Key); is_function(Key), is_atom(Format) ->
+ case get_value(Key, Data) of
+ undefined -> [undefined | fill_info(Rest, Data)];
+ Value -> [{Str, Attrib, {Format, Value}} | fill_info(Rest, Data)]
+ end;
fill_info([{Str,SubStructure}|Rest], Data) when is_list(SubStructure) ->
[{Str, fill_info(SubStructure, Data)}|fill_info(Rest,Data)];
fill_info([{Str,Attrib,SubStructure}|Rest], Data) ->
@@ -146,23 +189,49 @@ update_info([Fields|Fs], [{_Header, _Attrib, SubStructure}| Rest]) ->
update_info([], []) ->
ok.
+update_info2([undefined|Fs], [_|Rest]) ->
+ update_info2(Fs, Rest);
+update_info2([Scroll = {_, _, _}|Fs], [{_, NewInfo}|Rest]) ->
+ update_scroll_boxes(Scroll, NewInfo),
+ update_info2(Fs, Rest);
+update_info2([Field|Fs], [{_Str, {click, Value}}|Rest]) ->
+ wxTextCtrl:setValue(Field, to_str(Value)),
+ update_info2(Fs, Rest);
update_info2([Field|Fs], [{_Str, Value}|Rest]) ->
- wxStaticText:setLabel(Field, to_str(Value)),
+ wxTextCtrl:setValue(Field, to_str(Value)),
+ update_info2(Fs, Rest);
+update_info2([Field|Fs], [undefined|Rest]) ->
+ wxTextCtrl:setValue(Field, ""),
update_info2(Fs, Rest);
update_info2([], []) -> ok.
+update_scroll_boxes({_, _, 0}, {_, []}) -> ok;
+update_scroll_boxes({Win, Sizer, _}, {Type, List}) ->
+ [wxSizerItem:deleteWindows(Child) || Child <- wxSizer:getChildren(Sizer)],
+ BC = wxWindow:getBackgroundColour(Win),
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ add_entries(Type, List, Win, Sizer, BC, Cursor),
+ wxCursor:destroy(Cursor),
+ wxSizer:recalcSizes(Sizer),
+ wxWindow:refresh(Win),
+ ok.
to_str(Value) when is_atom(Value) ->
atom_to_list(Value);
+to_str({Unit, X}) when (Unit==bytes orelse Unit==time_ms) andalso is_list(X) ->
+ try list_to_integer(X) of
+ B -> to_str({Unit,B})
+ catch error:badarg -> X
+ end;
to_str({bytes, B}) ->
KB = B div 1024,
MB = KB div 1024,
GB = MB div 1024,
if
- GB > 10 -> integer_to_list(GB) ++ " gB";
- MB > 10 -> integer_to_list(MB) ++ " mB";
+ GB > 10 -> integer_to_list(GB) ++ " GB";
+ MB > 10 -> integer_to_list(MB) ++ " MB";
KB > 0 -> integer_to_list(KB) ++ " kB";
- true -> integer_to_list(B) ++ " B "
+ true -> integer_to_list(B) ++ " B"
end;
to_str({time_ms, MS}) ->
S = MS div 1000,
@@ -207,27 +276,23 @@ create_menus(Menus, MenuBar, Type) ->
create_menu(Tag, Ms, Index, MenuBar, Type)
end,
[{First, _}|_] = Menus,
- OnMac = os:type() =:= {unix, darwin},
Index = if Type =:= default -> 0;
First =:= "File" -> 0;
- OnMac -> 0;
true -> 1
end,
wx:foldl(Add, Index, Menus),
ok.
create_menu("File", MenuItems, Index, MenuBar, Type) ->
- OnMac = os:type() =:= {unix, darwin},
- if OnMac, Type =:= default ->
- Index;
- not OnMac, Type =:= plugin ->
+ if
+ Type =:= plugin ->
MenuId = wxMenuBar:findMenu(MenuBar, "File"),
Menu = wxMenuBar:getMenu(MenuBar, MenuId),
lists:foldl(fun(Record, N) ->
create_menu_item(Record, Menu, N)
end, 0, MenuItems),
Index + 1;
- true ->
+ true ->
Menu = wxMenu:new(),
lists:foldl(fun(Record, N) ->
create_menu_item(Record, Menu, N)
@@ -279,36 +344,188 @@ create_attrs() ->
#attrs{even = wxListItemAttr:new(Text, ?BG_EVEN, Font),
odd = wxListItemAttr:new(Text, ?BG_ODD, Font),
deleted = wxListItemAttr:new(?FG_DELETED, ?BG_DELETED, Font),
- changed = wxListItemAttr:new(Text, ?BG_CHANGED, Font),
+ changed_even = wxListItemAttr:new(Text, mix(?BG_CHANGED,?BG_EVEN), Font),
+ changed_odd = wxListItemAttr:new(Text, mix(?BG_CHANGED,?BG_ODD), Font),
+ new_even = wxListItemAttr:new(Text, mix(?BG_NEW,?BG_EVEN), Font),
+ new_odd = wxListItemAttr:new(Text, mix(?BG_NEW, ?BG_ODD), Font),
searched = wxListItemAttr:new(Text, ?BG_SEARCHED, Font)
}.
+mix(RGB,_) -> RGB.
+
+%% mix({R,G,B},{MR,MG,MB}) ->
+%% {trunc(R*MR/255), trunc(G*MG/255), trunc(B*MB/255)}.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
get_box_info({Title, List}) when is_list(List) -> {Title, ?wxALIGN_LEFT, List};
get_box_info({Title, left, List}) -> {Title, ?wxALIGN_LEFT, List};
get_box_info({Title, right, List}) -> {Title, ?wxALIGN_RIGHT, List}.
+add_box(Panel, OuterBox, Cursor, Title, Proportion, {Format, List}) ->
+ Box = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, Title}]),
+ Scroll = wxScrolledWindow:new(Panel),
+ wxScrolledWindow:enableScrolling(Scroll,true,true),
+ wxScrolledWindow:setScrollbars(Scroll,1,1,0,0),
+ ScrollSizer = wxBoxSizer:new(?wxVERTICAL),
+ wxScrolledWindow:setSizer(Scroll, ScrollSizer),
+ BC = wxWindow:getBackgroundColour(Panel),
+ wxWindow:setBackgroundColour(Scroll,BC),
+ add_entries(Format, List, Scroll, ScrollSizer, BC, Cursor),
+ wxSizer:add(Box,Scroll,[{proportion,1},{flag,?wxEXPAND}]),
+ wxSizer:add(OuterBox,Box,[{proportion,Proportion},{flag,?wxEXPAND}]),
+ {Scroll,ScrollSizer,length(List)}.
+
+add_entries(click, List, Scroll, ScrollSizer, BC, Cursor) ->
+ Add = fun(Link) ->
+ TC = link_entry(Scroll, Link, Cursor),
+ wxWindow:setBackgroundColour(TC,BC),
+ wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
+ end,
+ [Add(Link) || Link <- List];
+add_entries(plain, List, Scroll, ScrollSizer, _, _) ->
+ Add = fun(String) ->
+ TC = wxTextCtrl:new(Scroll, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,String}]),
+ wxSizer:add(ScrollSizer,TC,[{flag,?wxEXPAND}])
+ end,
+ [Add(String) || String <- List].
+
+
+create_box(_Panel, {scroll_boxes,[]}) ->
+ undefined;
+create_box(Panel, {scroll_boxes,Data}) ->
+ OuterBox = wxBoxSizer:new(?wxHORIZONTAL),
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ AddBox = fun({Title,Proportion,Format = {_,_}}) ->
+ add_box(Panel, OuterBox, Cursor, Title, Proportion, Format);
+ ({Title, Format = {_,_}}) ->
+ add_box(Panel, OuterBox, Cursor, Title, 1, Format);
+ (undefined) ->
+ undefined
+ end,
+ Boxes = [AddBox(Entry) || Entry <- Data],
+ wxCursor:destroy(Cursor),
+
+ MaxL = lists:foldl(fun({_,_,L},Max) when L>Max -> L;
+ (_,Max) -> Max
+ end,
+ 0,
+ Boxes),
+
+ Dummy = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, ?SINGLE_LINE_STYLE}]),
+ {_,H} = wxWindow:getSize(Dummy),
+ wxTextCtrl:destroy(Dummy),
+
+ MaxH = if MaxL > 8 -> 8*H;
+ true -> MaxL*H
+ end,
+ [wxWindow:setMinSize(B,{0,MaxH}) || {B,_,_} <- Boxes],
+ wxSizer:layout(OuterBox),
+ {OuterBox, Boxes};
+
create_box(Panel, Data) ->
{Title, Align, Info} = get_box_info(Data),
- Box = wxStaticBoxSizer:new(?wxHORIZONTAL, Panel, [{label, Title}]),
- Left = wxBoxSizer:new(?wxVERTICAL),
- Right = wxBoxSizer:new(?wxVERTICAL),
- Expand = [{flag, ?wxEXPAND}],
- ExpAlign = [{flag, Align}],
- AddRow = fun({Desc, Value}) ->
- wxSizer:add(Left, wxStaticText:new(Panel, ?wxID_ANY, Desc ++ ":"), Expand),
- Field = wxStaticText:new(Panel, ?wxID_ANY, to_str(Value)),
- wxSizer:add(Right, Field, ExpAlign),
- Field
+ Box = wxStaticBoxSizer:new(?wxVERTICAL, Panel, [{label, Title}]),
+ LeftSize = get_max_size(Panel,Info),
+ LeftProportion = [{proportion,0}],
+ RightProportion = [{proportion,1}, {flag, Align bor ?wxEXPAND}],
+ AddRow = fun({Desc0, Value0}) ->
+ Desc = Desc0++":",
+ Line = wxBoxSizer:new(?wxHORIZONTAL),
+ wxSizer:add(Line,
+ wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {size,LeftSize},
+ {value,Desc}]),
+ LeftProportion),
+ Field =
+ case Value0 of
+ {click,"unknown"} ->
+ wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,"unknown"}]);
+ {click,Value} ->
+ link_entry(Panel,Value);
+ _ ->
+ Value = to_str(Value0),
+ TCtrl = wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,?SINGLE_LINE_STYLE},
+ {value,Value}]),
+ length(Value) > 50 andalso
+ wxWindow:setToolTip(TCtrl,wxToolTip:new(Value)),
+ TCtrl
+ end,
+ wxSizer:add(Line, 10, 0), % space of size 10 horisontally
+ wxSizer:add(Line, Field, RightProportion),
+
+ {_,H,_,_} = wxTextCtrl:getTextExtent(Field,"Wj"),
+ wxTextCtrl:setMinSize(Field,{0,H}),
+
+ wxSizer:add(Box, Line, [{proportion,0},{flag,?wxEXPAND}]),
+ Field;
+ (undefined) ->
+ undefined
end,
InfoFields = [AddRow(Entry) || Entry <- Info],
- wxSizer:add(Box, Left),
- wxSizer:addSpacer(Box, 10),
- wxSizer:add(Box, Right),
- wxSizer:addSpacer(Box, 30),
{Box, InfoFields}.
+link_entry(Panel, Link) ->
+ Cursor = wxCursor:new(?wxCURSOR_HAND),
+ TC = link_entry2(Panel, to_link(Link), Cursor),
+ wxCursor:destroy(Cursor),
+ TC.
+link_entry(Panel, Link, Cursor) ->
+ link_entry2(Panel, to_link(Link), Cursor).
+
+link_entry2(Panel,{Target,Str},Cursor) ->
+ TC = wxTextCtrl:new(Panel, ?wxID_ANY, [{style, ?SINGLE_LINE_STYLE}]),
+ wxTextCtrl:setForegroundColour(TC,?wxBLUE),
+ wxTextCtrl:appendText(TC, Str),
+ wxWindow:setCursor(TC, Cursor),
+ wxTextCtrl:connect(TC, left_down, [{userData,Target}]),
+ wxTextCtrl:connect(TC, enter_window),
+ wxTextCtrl:connect(TC, leave_window),
+ ToolTip = wxToolTip:new("Click to see properties for " ++ Str),
+ wxWindow:setToolTip(TC, ToolTip),
+ TC.
+
+to_link(Tuple = {_Target, _Str}) ->
+ Tuple;
+to_link(Target0) ->
+ Target=to_str(Target0),
+ {Target, Target}.
+
+html_window(Panel) ->
+ Win = wxHtmlWindow:new(Panel, [{style, ?wxHW_SCROLLBAR_AUTO}]),
+ %% wxHtmlWindow:setFonts(Win, "", FixedName),
+ wxHtmlWindow:connect(Win,command_html_link_clicked),
+ Win.
+
+html_window(Panel, Html) ->
+ Win = html_window(Panel),
+ wxHtmlWindow:setPage(Win, Html),
+ Win.
+
+get_max_size(Panel,Info) ->
+ Txt = wxTextCtrl:new(Panel, ?wxID_ANY, []),
+ Size = get_max_size(Txt,Info,0,0),
+ wxTextCtrl:destroy(Txt),
+ Size.
+
+get_max_size(Txt,[{Desc,_}|Info],MaxX,MaxY) ->
+ {X,Y,_,_} = wxTextCtrl:getTextExtent(Txt,Desc++":"),
+ if X>MaxX ->
+ get_max_size(Txt,Info,X,Y);
+ true ->
+ get_max_size(Txt,Info,MaxX,MaxY)
+ end;
+get_max_size(Txt,[undefined|Info],MaxX,MaxY) ->
+ get_max_size(Txt,Info,MaxX,MaxY);
+get_max_size(_,[],X,_Y) ->
+ {X+2,-1}.
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set_listctrl_col_size(LCtrl, Total) ->
wx:batch(fun() -> calc_last(LCtrl, Total) end).
@@ -326,10 +543,7 @@ calc_last(LCtrl, _Total) ->
scroll_size(LCtrl) ->
case os:type() of
{win32, nt} -> 0;
- {unix, darwin} ->
- %% I can't figure out is there is a visible scrollbar
- %% Always make room for it
- wxSystemSettings:getMetric(?wxSYS_VSCROLL_X);
+ {unix, darwin} -> 0; %% Always 0 in wxWidgets-3.0
_ ->
case wxWindow:hasScrollbar(LCtrl, ?wxVERTICAL) of
true -> wxSystemSettings:getMetric(?wxSYS_VSCROLL_X);
@@ -430,3 +644,102 @@ ensure_last_is_dot(String) ->
false ->
String ++ "."
end.
+
+%%%-----------------------------------------------------------------
+%%% Status bar for warnings
+create_status_bar(Panel) ->
+ StatusStyle = ?wxTE_MULTILINE bor ?wxTE_READONLY bor ?wxTE_RICH2,
+ Red = wxTextAttr:new(?wxRED),
+
+ %% wxTextCtrl:setSize/3 does not work, so we must create a dummy
+ %% text ctrl first to get the size of the text, then set it when
+ %% creating the real text ctrl.
+ Dummy = wxTextCtrl:new(Panel, ?wxID_ANY,[{style,StatusStyle}]),
+ {X,Y,_,_} = wxTextCtrl:getTextExtent(Dummy,"WARNING"),
+ wxTextCtrl:destroy(Dummy),
+ StatusBar = wxTextCtrl:new(Panel, ?wxID_ANY,
+ [{style,StatusStyle},
+ {size,{X,Y+2}}]), % Y+2 to avoid scrollbar
+ wxTextCtrl:setDefaultStyle(StatusBar,Red),
+ wxTextAttr:destroy(Red),
+ StatusBar.
+
+%%%-----------------------------------------------------------------
+%%% Progress dialog
+-define(progress_handler,cdv_progress_handler).
+display_progress_dialog(Title,Str) ->
+ Caller = self(),
+ Env = wx:get_env(),
+ spawn_link(fun() ->
+ progress_handler(Caller,Env,Title,Str)
+ end),
+ ok.
+
+wait_for_progress() ->
+ receive
+ continue ->
+ ok;
+ Error ->
+ Error
+ end.
+
+destroy_progress_dialog() ->
+ report_progress(finish).
+
+report_progress(Progress) ->
+ case whereis(?progress_handler) of
+ Pid when is_pid(Pid) ->
+ Pid ! {progress,Progress},
+ ok;
+ _ ->
+ ok
+ end.
+
+progress_handler(Caller,Env,Title,Str) ->
+ register(?progress_handler,self()),
+ wx:set_env(Env),
+ PD = progress_dialog(Env,Title,Str),
+ progress_loop(Title,PD,Caller).
+progress_loop(Title,PD,Caller) ->
+ receive
+ {progress,{ok,done}} -> % to make wait_for_progress/0 return
+ Caller ! continue,
+ progress_loop(Title,PD,Caller);
+ {progress,{ok,Percent}} when is_integer(Percent) ->
+ update_progress(PD,Percent),
+ progress_loop(Title,PD,Caller);
+ {progress,{ok,Msg}} ->
+ update_progress_text(PD,Msg),
+ progress_loop(Title,PD,Caller);
+ {progress,{error, Reason}} ->
+ finish_progress(PD),
+ FailMsg =
+ if is_list(Reason) -> Reason;
+ true -> file:format_error(Reason)
+ end,
+ display_info_dialog("Crashdump Viewer Error",FailMsg),
+ Caller ! error,
+ unregister(?progress_handler),
+ unlink(Caller);
+ {progress,finish} ->
+ finish_progress(PD),
+ unregister(?progress_handler),
+ unlink(Caller)
+ end.
+
+progress_dialog(_Env,Title,Str) ->
+ PD = wxProgressDialog:new(Title,Str,
+ [{maximum,101},
+ {style,
+ ?wxPD_APP_MODAL bor
+ ?wxPD_SMOOTH bor
+ ?wxPD_AUTO_HIDE}]),
+ wxProgressDialog:setMinSize(PD,{200,-1}),
+ PD.
+
+update_progress(PD,Value) ->
+ wxProgressDialog:update(PD,Value).
+update_progress_text(PD,Text) ->
+ wxProgressDialog:update(PD,0,[{newmsg,Text}]).
+finish_progress(PD) ->
+ wxProgressDialog:destroy(PD).
diff --git a/lib/observer/src/observer_perf_wx.erl b/lib/observer/src/observer_perf_wx.erl
index 54c98f3ba3..8173349ed7 100644
--- a/lib/observer/src/observer_perf_wx.erl
+++ b/lib/observer/src/observer_perf_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2012. All Rights Reserved.
+%% Copyright Ericsson AB 2012-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -283,7 +283,12 @@ mem_types() ->
lmax([]) -> 0;
lmax(List) ->
- lists:max([lists:max(tuple_to_list(T)) || T <- List]).
+ Max = [lists:max(tuple_to_list(T)) || T <- List,
+ tuple_size(T) > 0],
+ case Max of
+ [] -> 0;
+ _ -> lists:max(Max)
+ end.
calc_delta([{Id, WN, TN}|Ss], [{Id, WP, TP}|Ps]) ->
[100*(WN-WP) div (TN-TP)|calc_delta(Ss, Ps)];
@@ -301,25 +306,23 @@ draw(Offset, Id, DC, Panel, Paint=#paint{pens=Pens, small=Small}, Data, Active)
{X0,Y0,WS,HS} = draw_borders(Id, NoGraphs, DC, Size, Max, Paint),
Last = 60*WS+X0-1,
Start = max(61-Len, 0)*WS+X0 - Offset*WS,
- case Hs of
- [] -> ignore;
- [_] -> ignore;
- _ ->
+ Samples = length(Hs),
+ case Active andalso Samples > 1 andalso NoGraphs > 0 of
+ true ->
Draw = fun(N) ->
Lines = make_lines(Hs, Start, N, {X0,Max*HS,Last}, Y0, WS, HS),
setPen(DC, element(1+ ((N-1) rem tuple_size(Pens)), Pens)),
strokeLines(DC, Lines),
N+1
end,
- [Draw(I) || I <- lists:seq(NoGraphs, 1, -1)]
- end,
- case Active of
+ [Draw(I) || I <- lists:seq(NoGraphs, 1, -1)];
false ->
- NotActive = "Service not available",
+ Info = case Active andalso Samples =< 1 of
+ true -> "Waiting on data";
+ false -> "Information not available"
+ end,
setFont(DC, Small, {0,0,0}),
- drawText(DC, NotActive, X0 + 100, element(2,Size) div 2);
- true ->
- ignore
+ drawText(DC, Info, X0 + 100, element(2,Size) div 2)
end,
ok.
diff --git a/lib/observer/src/observer_pro_wx.erl b/lib/observer/src/observer_pro_wx.erl
index 9aaf648ea2..0be8c18893 100644
--- a/lib/observer/src/observer_pro_wx.erl
+++ b/lib/observer/src/observer_pro_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -66,6 +66,7 @@
-record(holder, {parent,
info,
+ etop,
sort=#sort{},
accum=[],
attrs,
@@ -191,20 +192,16 @@ dump_to_file(Parent, FileName, Holder) ->
start_procinfo(undefined, _Frame, Opened) ->
Opened;
start_procinfo(Pid, Frame, Opened) ->
- %% This code doesn't work until we collect which windows have been
- %% closed maybe it should moved to observer_wx.erl
- %% and add a global menu which remembers windows.
- %% case lists:keyfind(Pid, 1, Opened) of
- %% false ->
- case observer_procinfo:start(Pid, Frame, self()) of
- {error, _} -> Opened;
- PI -> [{Pid, PI} | Opened]
+ case lists:keyfind(Pid, 1, Opened) of
+ false ->
+ case observer_procinfo:start(Pid, Frame, self()) of
+ {error, _} -> Opened;
+ PI -> [{Pid, PI} | Opened]
+ end;
+ {_, PI} ->
+ wxFrame:raise(PI),
+ Opened
end.
- %%;
- %% {_, PI} ->
- %% wxFrame:raise(PI),
- %% Opened
- %% end.
call(Holder, What) ->
Ref = erlang:monitor(process, Holder),
@@ -235,9 +232,14 @@ handle_info(refresh_interval, #state{holder=Holder}=State) ->
handle_info({procinfo_menu_closed, Pid},
#state{procinfo_menu_pids=Opened}=State) ->
- NewPids = lists:delete(Pid, Opened),
+ NewPids = lists:keydelete(Pid, 1, Opened),
{noreply, State#state{procinfo_menu_pids=NewPids}};
+handle_info({procinfo_open, Pid},
+ #state{panel=Panel, procinfo_menu_pids=Opened}=State) ->
+ Opened2 = start_procinfo(Pid, Panel, Opened),
+ {noreply, State#state{procinfo_menu_pids=Opened2}};
+
handle_info({active, Node},
#state{holder=Holder, timer=Timer, parent=Parent}=State) ->
create_pro_menu(Parent, Holder),
@@ -378,8 +380,7 @@ handle_event(#wx{event=#wxList{type=command_list_col_click, col=Col}},
handle_event(#wx{event=#wxList{type=command_list_item_activated}},
#state{panel=Panel, procinfo_menu_pids=Opened,
- sel={_, [Pid|_]}}=State)
- when Pid =/= undefined ->
+ sel={_, [Pid|_]}}=State) ->
Opened2 = start_procinfo(Pid, Panel, Opened),
{noreply, State#state{procinfo_menu_pids=Opened2}};
@@ -435,13 +436,14 @@ set_focus([Old|_], [New|_], Grid) ->
init_table_holder(Parent, Attrs) ->
Backend = spawn_link(node(), observer_backend,etop_collect,[self()]),
table_holder(#holder{parent=Parent,
- info=#etop_info{procinfo=[]},
+ etop=#etop_info{},
+ info=array:new(),
node=node(),
backend_pid=Backend,
attrs=Attrs
}).
-table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
+table_holder(#holder{info=Info, attrs=Attrs,
node=Node, backend_pid=Backend}=S0) ->
receive
{get_row, From, Row, Col} ->
@@ -488,7 +490,8 @@ table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
From ! {self(), S0#holder.accum == true},
table_holder(S0);
{dump, Fd} ->
- etop_txt:do_update(Fd, S0#holder.info, #opts{node=Node}),
+ EtopInfo = (S0#holder.etop)#etop_info{procinfo=array:to_list(Info)},
+ etop_txt:do_update(Fd, EtopInfo, #opts{node=Node}),
file:close(Fd),
table_holder(S0);
stop ->
@@ -498,23 +501,23 @@ table_holder(#holder{info=#etop_info{procinfo=Info}, attrs=Attrs,
table_holder(S0)
end.
-change_sort(Col, S0=#holder{parent=Parent, info=EI=#etop_info{procinfo=Data}, sort=Sort0}) ->
+change_sort(Col, S0=#holder{parent=Parent, info=Data, sort=Sort0}) ->
{Sort, ProcInfo}=sort(Col, Sort0, Data),
- Parent ! {holder_updated, length(Data)},
- S0#holder{info=EI#etop_info{procinfo=ProcInfo}, sort=Sort}.
+ Parent ! {holder_updated, array:size(Data)},
+ S0#holder{info=ProcInfo, sort=Sort}.
change_accum(true, S0) ->
S0#holder{accum=true};
-change_accum(false, S0=#holder{info=#etop_info{procinfo=Info}}) ->
+change_accum(false, S0=#holder{info=Info}) ->
self() ! refresh,
- S0#holder{accum=lists:sort(Info)}.
+ S0#holder{accum=lists:sort(array:to_list(Info))}.
handle_update(EI=#etop_info{procinfo=ProcInfo0},
S0=#holder{parent=Parent, sort=Sort=#sort{sort_key=KeyField}}) ->
{ProcInfo1, S1} = accum(ProcInfo0, S0),
{_SO, ProcInfo} = sort(KeyField, Sort#sort{sort_key=undefined}, ProcInfo1),
- Parent ! {holder_updated, length(ProcInfo)},
- S1#holder{info=EI#etop_info{procinfo=ProcInfo}}.
+ Parent ! {holder_updated, array:size(ProcInfo)},
+ S1#holder{info=ProcInfo, etop=EI#etop_info{procinfo=[]}}.
accum(ProcInfo, State=#holder{accum=true}) ->
{ProcInfo, State};
@@ -532,12 +535,18 @@ accum2([PI|PIs], Old, Acc) ->
accum2(PIs, Old, [PI|Acc]);
accum2([], _, Acc) -> Acc.
+sort(Col, Opt, Table)
+ when not is_list(Table) ->
+ sort(Col,Opt,array:to_list(Table));
sort(Col, Opt=#sort{sort_key=Col, sort_incr=Bool}, Table) ->
- {Opt#sort{sort_incr=not Bool}, lists:reverse(Table)};
+ {Opt#sort{sort_incr=not Bool},
+ array:from_list(lists:reverse(Table))};
sort(Col, S=#sort{sort_incr=true}, Table) ->
- {S#sort{sort_key=Col}, lists:keysort(col_to_element(Col), Table)};
+ {S#sort{sort_key=Col},
+ array:from_list(lists:keysort(col_to_element(Col), Table))};
sort(Col, S=#sort{sort_incr=false}, Table) ->
- {S#sort{sort_key=Col}, lists:reverse(lists:keysort(col_to_element(Col), Table))}.
+ {S#sort{sort_key=Col},
+ array:from_list(lists:reverse(lists:keysort(col_to_element(Col), Table)))}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -552,40 +561,50 @@ col_to_element(?COL_FUN) -> #etop_proc_info.cf;
col_to_element(?COL_MSG) -> #etop_proc_info.mq.
get_pids(From, Indices, ProcInfo) ->
- Processes = [(lists:nth(I+1, ProcInfo))#etop_proc_info.pid || I <- Indices],
+ Processes = [(array:get(I, ProcInfo))#etop_proc_info.pid || I <- Indices],
From ! {self(), Processes}.
get_name_or_pid(From, Indices, ProcInfo) ->
Get = fun(#etop_proc_info{name=Name}) when is_atom(Name) -> Name;
(#etop_proc_info{pid=Pid}) -> Pid
end,
- Processes = [Get(lists:nth(I+1, ProcInfo)) || I <- Indices],
+ Processes = [Get(array:get(I, ProcInfo)) || I <- Indices],
From ! {self(), Processes}.
-
get_row(From, Row, pid, Info) ->
Pid = case Row =:= -1 of
true -> {error, undefined};
- false -> {ok, get_procinfo_data(?COL_PID, lists:nth(Row+1, Info))}
+ false -> {ok, get_procinfo_data(?COL_PID, array:get(Row, Info))}
end,
From ! {self(), Pid};
get_row(From, Row, Col, Info) ->
- Data = case Row+1 > length(Info) of
+ Data = case Row > array:size(Info) of
true ->
"";
false ->
- ProcInfo = lists:nth(Row+1, Info),
+ ProcInfo = array:get(Row, Info),
get_procinfo_data(Col, ProcInfo)
end,
From ! {self(), observer_lib:to_str(Data)}.
get_rows_from_pids(From, Pids0, Info) ->
- Res = lists:foldl(fun(Pid, Data = {Ids, Pids}) ->
- case index(Pid, Info, 0) of
- false -> Data;
- Index -> {[Index|Ids], [Pid|Pids]}
- end
- end, {[],[]}, Pids0),
+ Search = fun(Idx, #etop_proc_info{pid=Pid}, Acc0={Pick0, {Idxs, Pids}}) ->
+ case ordsets:is_element(Pid, Pick0) of
+ true ->
+ Acc = {[Idx|Idxs],[Pid|Pids]},
+ Pick = ordsets:del_element(Pid, Pick0),
+ case Pick =:= [] of
+ true -> throw(Acc);
+ false -> {Pick, Acc}
+ end;
+ false -> Acc0
+ end
+ end,
+ Res = try
+ {_, R} = array:foldl(Search, {ordsets:from_list(Pids0), {[],[]}}, Info),
+ R
+ catch R0 -> R0
+ end,
From ! {self(), Res}.
get_attr(From, Row, Attrs) ->
@@ -594,7 +613,3 @@ get_attr(From, Row, Attrs) ->
false -> Attrs#attrs.odd
end,
From ! {self(), Attribute}.
-
-index(Pid, [#etop_proc_info{pid=Pid}|_], Index) -> Index;
-index(Pid, [_|PI], Index) -> index(Pid, PI, Index+1);
-index(_, _, _) -> false.
diff --git a/lib/observer/src/observer_procinfo.erl b/lib/observer/src/observer_procinfo.erl
index 98d0403139..988e04993c 100644
--- a/lib/observer/src/observer_procinfo.erl
+++ b/lib/observer/src/observer_procinfo.erl
@@ -35,7 +35,9 @@
-record(state, {parent,
frame,
pid,
- pages=[]
+ pages=[],
+ expand_table,
+ expand_wins=[]
}).
-record(worker, {panel, callback}).
@@ -47,6 +49,7 @@ start(Process, ParentFrame, Parent) ->
init([Pid, ParentFrame, Parent]) ->
try
+ Table = ets:new(observer_expand,[set,public]),
Title=case observer_wx:try_rpc(node(Pid), erlang, process_info, [Pid, registered_name]) of
[] -> io_lib:format("~p",[Pid]);
{registered_name, Registered} -> io_lib:format("~p (~p)",[Registered, Pid]);
@@ -60,11 +63,11 @@ init([Pid, ParentFrame, Parent]) ->
Notebook = wxNotebook:new(Frame, ?ID_NOTEBOOK, [{style, ?wxBK_DEFAULT}]),
- ProcessPage = init_panel(Notebook, "Process Information", Pid, fun init_process_page/2),
- MessagePage = init_panel(Notebook, "Messages", Pid, fun init_message_page/2),
- DictPage = init_panel(Notebook, "Dictionary", Pid, fun init_dict_page/2),
- StackPage = init_panel(Notebook, "Stack Trace", Pid, fun init_stack_page/2),
- StatePage = init_panel(Notebook, "State", Pid, fun init_state_page/2),
+ ProcessPage = init_panel(Notebook, "Process Information", [Pid], fun init_process_page/2),
+ MessagePage = init_panel(Notebook, "Messages", [Pid,Table], fun init_message_page/3),
+ DictPage = init_panel(Notebook, "Dictionary", [Pid,Table], fun init_dict_page/3),
+ StackPage = init_panel(Notebook, "Stack Trace", [Pid], fun init_stack_page/2),
+ StatePage = init_panel(Notebook, "State", [Pid,Table], fun init_state_page/3),
wxFrame:connect(Frame, close_window),
wxMenu:connect(Frame, command_menu_selected),
@@ -73,7 +76,8 @@ init([Pid, ParentFrame, Parent]) ->
{Frame, #state{parent=Parent,
pid=Pid,
frame=Frame,
- pages=[ProcessPage,MessagePage,DictPage,StackPage,StatePage]
+ pages=[ProcessPage,MessagePage,DictPage,StackPage,StatePage],
+ expand_table=Table
}}
catch error:{badrpc, _} ->
observer_wx:return_to_localnode(ParentFrame, node(Pid)),
@@ -83,10 +87,10 @@ init([Pid, ParentFrame, Parent]) ->
{stop, normal}
end.
-init_panel(Notebook, Str, Pid, Fun) ->
+init_panel(Notebook, Str, FunArgs, Fun) ->
Panel = wxPanel:new(Notebook),
Sizer = wxBoxSizer:new(?wxHORIZONTAL),
- {Window,Callback} = Fun(Panel, Pid),
+ {Window,Callback} = apply(Fun,[Panel|FunArgs]),
wxSizer:add(Sizer, Window, [{flag, ?wxEXPAND bor ?wxALL}, {proportion, 1}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
true = wxNotebook:addPage(Notebook, Panel, Str),
@@ -99,13 +103,58 @@ handle_event(#wx{event=#wxClose{type=close_window}}, State) ->
handle_event(#wx{id=?wxID_CLOSE, event=#wxCommand{type=command_menu_selected}}, State) ->
{stop, normal, State};
-handle_event(#wx{id=?REFRESH}, #state{frame=Frame, pid=Pid, pages=Pages}=State) ->
+handle_event(#wx{id=?REFRESH}, #state{frame=Frame, pid=Pid, pages=Pages, expand_table=T}=State) ->
+ ets:delete_all_objects(T),
try [(W#worker.callback)() || W <- Pages]
catch process_undefined ->
wxFrame:setTitle(Frame, io_lib:format("*DEAD* ~p",[Pid]))
end,
{noreply, State};
+handle_event(#wx{event=#wxMouse{type=left_down}, userData=TargetPid}, State) ->
+ observer ! {open_link, TargetPid},
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=enter_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,{0,0,100,255}),
+ {noreply, State};
+
+handle_event(#wx{obj=Obj, event=#wxMouse{type=leave_window}}, State) ->
+ wxTextCtrl:setForegroundColour(Obj,?wxBLUE),
+ {noreply, State};
+
+handle_event(#wx{event=#wxHtmlLink{linkInfo=#wxHtmlLinkInfo{href=Href}}},
+ #state{frame=Frame,expand_table=T,expand_wins=Opened0}=State) ->
+ {Type, Rest} = case Href of
+ "#Term?"++Keys -> {cdv_term_cb, Keys};
+ "#OBSBinary?"++Keys -> {cdv_bin_cb, Keys};
+ _ -> {other, Href}
+ end,
+ case Type of
+ other ->
+ observer ! {open_link, Href},
+ {noreply, State};
+ Callback ->
+ [{"key1",Key1},{"key2",Key2},{"key3",Key3}] = httpd:parse_query(Rest),
+ Id = {observer, {T,{list_to_integer(Key1),
+ list_to_integer(Key2),
+ list_to_integer(Key3)}}},
+ Opened =
+ case lists:keyfind(Id,1,Opened0) of
+ false ->
+ Win = cdv_detail_wx:start_link(Id,Frame,Callback),
+ [{Id,Win}|Opened0];
+ {_,Win} ->
+ wxFrame:raise(Win),
+ Opened0
+ end,
+ {noreply,State#state{expand_wins=Opened}}
+ end;
+
+handle_event(#wx{event=#wxHtmlLink{linkInfo=#wxHtmlLinkInfo{href=Info}}}, State) ->
+ observer ! {open_link, Info},
+ {noreply, State};
+
handle_event(Event, _State) ->
error({unhandled_event, Event}).
@@ -116,10 +165,15 @@ handle_info(_Info, State) ->
handle_call(Call, From, _State) ->
error({unhandled_call, Call, From}).
+handle_cast({detail_win_closed,Id}, #state{expand_wins=Opened0}=State) ->
+ Opened = lists:keydelete(Id,1,Opened0),
+ {noreply,State#state{expand_wins=Opened}};
+
handle_cast(Cast, _State) ->
error({unhandled_cast, Cast}).
-terminate(_Reason, #state{parent=Parent,pid=Pid,frame=Frame}) ->
+terminate(_Reason, #state{parent=Parent,pid=Pid,frame=Frame,expand_table=T}) ->
+ T=/=undefined andalso ets:delete(T),
Parent ! {procinfo_menu_closed, Pid},
case Frame of
undefined -> ok;
@@ -139,58 +193,37 @@ init_process_page(Panel, Pid) ->
observer_lib:update_info(UpFields, Fields)
end}.
-init_text_page(Parent) ->
- Style = ?wxTE_MULTILINE bor ?wxTE_RICH2 bor ?wxTE_READONLY,
- Text = wxTextCtrl:new(Parent, ?wxID_ANY, [{style, Style}]),
- Font = observer_wx:get_attrib({font, fixed}),
- Attr = wxTextAttr:new(?wxBLACK, [{font, Font}]),
- true = wxTextCtrl:setDefaultStyle(Text, Attr),
- wxTextAttr:destroy(Attr),
- Text.
-
-init_message_page(Parent, Pid) ->
- Text = init_text_page(Parent),
- Format = fun(Message, Number) ->
- {io_lib:format("~-4.w ~p~n", [Number, Message]),
- Number+1}
- end,
+
+init_message_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
case observer_wx:try_rpc(node(Pid), erlang, process_info,
[Pid, messages])
of
- {messages,RawMessages} ->
- {Messages,_} = lists:mapfoldl(Format, 1, RawMessages),
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- case Messages =:= [] of
- true ->
- wxTextCtrl:writeText(Text, "No messages");
- false ->
- wxTextCtrl:writeText(Text, Messages)
- end;
+ {messages, Messages} ->
+ Html = observer_html_lib:expandable_term("Message Queue", Messages, Table),
+ wxHtmlWindow:setPage(Win, Html);
_ ->
throw(process_undefined)
end
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
-init_dict_page(Parent, Pid) ->
- Text = init_text_page(Parent),
+init_dict_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
case observer_wx:try_rpc(node(Pid), erlang, process_info, [Pid, dictionary])
of
- {dictionary,RawDict} ->
- Dict = [io_lib:format("~-20.w ~p~n", [K, V]) || {K, V} <- RawDict],
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- wxTextCtrl:writeText(Text, Dict);
+ {dictionary,Dict} ->
+ Html = observer_html_lib:expandable_term("Dictionary", Dict, Table),
+ wxHtmlWindow:setPage(Win, Html);
_ ->
throw(process_undefined)
end
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
init_stack_page(Parent, Pid) ->
LCtrl = wxListCtrl:new(Parent, [{style, ?wxLC_REPORT bor ?wxLC_HRULES}]),
@@ -236,58 +269,58 @@ init_stack_page(Parent, Pid) ->
Update(),
{LCtrl, Update}.
-
-init_state_page(Parent, Pid) ->
- Text = init_text_page(Parent),
+init_state_page(Parent, Pid, Table) ->
+ Win = observer_lib:html_window(Parent),
Update = fun() ->
- %% First, test if sys:get_status/2 have any chance to return an answer
- case rpc:call(node(Pid), proc_lib, translate_initial_call, [Pid])
- of
- %% Not a gen process
- {proc_lib,init_p,5} -> Misc = [{"Information", "Not available"}];
- %% May be a gen process
- {M, _F, _A} ->
- %% Get the behavio(u)r
- I = rpc:call(node(Pid), M, module_info, [attributes]),
- case lists:keyfind(behaviour, 1, I) of
- false -> case lists:keyfind(behavior, 1, I) of
- false -> B = undefined;
- {behavior, [B]} -> B
- end;
- {behaviour, [B]} -> B
- end,
- %% but not sure that system messages are treated by this process
- %% so using a rpc with a small timeout in order not to lag the display
- case rpc:call(node(Pid), sys, get_status, [Pid, 200])
- of
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First},{data, Second}]]} ->
- Misc = [{"Behaviour", B}] ++ [Header] ++ First ++ Second;
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- [Header,{data, First}, OtherFormat]]} ->
- Misc = [{"Behaviour", B}] ++ [Header] ++ First ++ [{"State",OtherFormat}];
- {status, _, {module, _}, [_PDict, _SysState, _Parent, _Dbg,
- OtherFormat]} ->
- %% Formatted status ?
- case lists:keyfind(format_status, 1, rpc:call(node(Pid), M, module_info, [exports])) of
- false -> Opt = {"Format", unknown};
- _ -> Opt = {"Format", overriden}
- end,
- Misc = [{"Behaviour", B}] ++ [Opt, {"State",OtherFormat}];
- {badrpc,{'EXIT',{timeout, _}}} ->
- Misc = [{"Information","Timed out"},
- {"Tip","system messages are probably not treated by this process"}]
- end;
- _ -> Misc=[], throw(process_undefined)
- end,
- Dict = [io_lib:format("~-20.s ~tp~n", [K, V]) || {K, V} <- Misc],
- Last = wxTextCtrl:getLastPosition(Text),
- wxTextCtrl:remove(Text, 0, Last),
- wxTextCtrl:writeText(Text, Dict)
+ StateInfo = fetch_state_info(Pid),
+ Html = observer_html_lib:expandable_term("ProcState", StateInfo, Table),
+ wxHtmlWindow:setPage(Win, Html)
end,
Update(),
- {Text, Update}.
+ {Win, Update}.
+
+fetch_state_info(Pid) ->
+ %% First, test if sys:get_status/2 have any chance to return an answer
+ case rpc:call(node(Pid), proc_lib, translate_initial_call, [Pid]) of
+ %% Not a gen process
+ {proc_lib,init_p,5} -> [];
+ %% May be a gen process
+ {M, _F, _A} -> fetch_state_info2(Pid, M);
+ _ -> throw(process_undefined)
+ end.
+fetch_state_info2(Pid, M) ->
+ %% Get the behavio(u)r
+ I = rpc:call(node(Pid), M, module_info, [attributes]),
+ case lists:keyfind(behaviour, 1, I) of
+ false -> case lists:keyfind(behavior, 1, I) of
+ false -> B = undefined;
+ {behavior, [B]} -> B
+ end;
+ {behaviour, [B]} -> B
+ end,
+ %% but not sure that system messages are treated by this process
+ %% so using a rpc with a small timeout in order not to lag the display
+ case rpc:call(node(Pid), sys, get_status, [Pid, 200])
+ of
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg,
+ [Header,{data, First},{data, Second}]]} ->
+ [{"Behaviour", B}, Header] ++ First ++ Second;
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg,
+ [Header,{data, First}, OtherFormat]]} ->
+ [{"Behaviour", B}, Header] ++ First ++ [{"State",OtherFormat}];
+ {status, _, {module, _},
+ [_PDict, _SysState, _Parent, _Dbg, OtherFormat]} ->
+ %% Formatted status ?
+ case lists:keyfind(format_status, 1, rpc:call(node(Pid), M, module_info, [exports])) of
+ false -> Opt = {"Format", unknown};
+ _ -> Opt = {"Format", overriden}
+ end,
+ [{"Behaviour", B}, Opt, {"State",OtherFormat}];
+ {badrpc,{'EXIT',{timeout, _}}} -> []
+ end.
create_menus(MenuBar) ->
Menus = [{"File", [#create_menu{id=?wxID_CLOSE, text="Close"}]},
@@ -301,6 +334,7 @@ process_info_fields(Pid) ->
{"Registered Name", registered_name},
{"Status", status},
{"Message Queue Len",message_queue_len},
+ {"Group Leader", {click, group_leader}},
{"Priority", priority},
{"Trap Exit", trap_exit},
{"Reductions", reductions},
@@ -311,11 +345,10 @@ process_info_fields(Pid) ->
{"Suspending", suspending},
{"Sequential Trace Token", sequential_trace_token},
{"Error Handler", error_handler}]},
- {"Connections",
- [{"Group Leader", group_leader},
- {"Links", links},
- {"Monitors", monitors},
- {"Monitored by", monitored_by}]},
+ {scroll_boxes,
+ [{"Links", {click, links}},
+ {"Monitors", {click, filter_monitor_info()}},
+ {"Monitored by", {click, monitored_by}}]},
{"Memory and Garbage Collection", right,
[{"Memory", {bytes, memory}},
{"Stack and Heaps", {bytes, total_heap_size}},
@@ -365,3 +398,9 @@ get_gc_info(Arg) ->
GC = proplists:get_value(garbage_collection, Data),
proplists:get_value(Arg, GC)
end.
+
+filter_monitor_info() ->
+ fun(Data) ->
+ Ms = proplists:get_value(monitors, Data),
+ [Pid || {process, Pid} <- Ms]
+ end.
diff --git a/lib/observer/src/observer_sys_wx.erl b/lib/observer/src/observer_sys_wx.erl
index 31800cf12a..f989f9cf97 100644
--- a/lib/observer/src/observer_sys_wx.erl
+++ b/lib/observer/src/observer_sys_wx.erl
@@ -60,10 +60,10 @@ init([Notebook, Parent]) ->
wxSizer:add(TopSizer, FPanel0, [{flag, ?wxEXPAND}, {proportion, 1}]),
wxSizer:add(TopSizer, FPanel1, [{flag, ?wxEXPAND}, {proportion, 1}]),
BorderFlags = ?wxLEFT bor ?wxRIGHT,
- MemoryInfo = create_mem_info(Panel, AllocInfo),
+ {MemPanel, MemoryInfo} = create_mem_info(Panel, AllocInfo),
wxSizer:add(Sizer, TopSizer, [{flag, ?wxEXPAND bor BorderFlags bor ?wxTOP},
{proportion, 0}, {border, 5}]),
- wxSizer:add(Sizer, MemoryInfo, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
+ wxSizer:add(Sizer, MemPanel, [{flag, ?wxEXPAND bor BorderFlags bor ?wxBOTTOM},
{proportion, 1}, {border, 5}]),
wxPanel:setSizer(Panel, Sizer),
Timer = observer_lib:start_timer(10),
@@ -86,7 +86,9 @@ update_syspage(#sys_wx_state{node = Node, fields=Fields, sizer=Sizer, alloc=Allo
update_alloc(AllocCtrl, AllocInfo),
wxSizer:layout(Sizer).
-create_mem_info(Panel, Fields) ->
+create_mem_info(Parent, Fields) ->
+ Panel = wxPanel:new(Parent),
+ wxWindow:setBackgroundColour(Panel, {255,255,255}),
Style = ?wxLC_REPORT bor ?wxLC_SINGLE_SEL bor ?wxLC_HRULES bor ?wxLC_VRULES,
Grid = wxListCtrl:new(Panel, [{style, Style}]),
Li = wxListItem:new(),
@@ -103,7 +105,12 @@ create_mem_info(Panel, Fields) ->
lists:foldl(AddListEntry, 0, ListItems),
wxListItem:destroy(Li),
update_alloc(Grid, Fields),
- Grid.
+
+ Sizer = wxBoxSizer:new(?wxVERTICAL),
+ wxSizer:add(Sizer, Grid, [{flag, ?wxEXPAND bor ?wxLEFT bor ?wxRIGHT},
+ {border, 5}, {proportion, 1}]),
+ wxWindow:setSizerAndFit(Panel, Sizer),
+ {Panel, Grid}.
update_alloc(Grid, AllocInfo) ->
Fields = alloc_info(AllocInfo, [], 0, 0, true),
@@ -167,9 +174,12 @@ info_fields() ->
{"Async thread pool size", thread_pool_size}
]},
{"CPU's and Threads",
- [{"System Logical CPU's", logical_processors},
- {"Erlang Logical CPU's", logical_processors_online},
- {"Used Logical CPU's", logical_processors_available}
+ [{"Logical CPU's", logical_processors},
+ {"Online Logical CPU's", logical_processors_online},
+ {"Available Logical CPU's", logical_processors_available},
+ {"Schedulers", schedulers},
+ {"Online schedulers", schedulers_online},
+ {"Available schedulers", schedulers_available}
]}
],
Stat = [{"Memory Usage", right,
diff --git a/lib/observer/src/observer_trace_wx.erl b/lib/observer/src/observer_trace_wx.erl
index f2a1084f85..2878842c23 100644
--- a/lib/observer/src/observer_trace_wx.erl
+++ b/lib/observer/src/observer_trace_wx.erl
@@ -84,7 +84,8 @@ create_window(Notebook, ParentPid) ->
%% Create the window
Panel = wxPanel:new(Notebook, [{size, wxWindow:getClientSize(Notebook)}]),
Sizer = wxBoxSizer:new(?wxVERTICAL),
- Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)}]),
+ Splitter = wxSplitterWindow:new(Panel, [{size, wxWindow:getClientSize(Panel)},
+ {style, ?SASH_STYLE}]),
{NodeProcView, NodeView, ProcessView} = create_process_view(Splitter),
{MatchSpecView,ModView,FuncView} = create_matchspec_view(Splitter),
wxSplitterWindow:setSashGravity(Splitter, 0.5),
@@ -120,7 +121,7 @@ create_process_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
- Splitter = wxSplitterWindow:new(Panel, []),
+ Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Nodes = wxListCtrl:new(Splitter, [{winid, ?NODES_WIN}, {style, Style}]),
Procs = wxListCtrl:new(Splitter, [{winid, ?PROC_WIN}, {style, Style}]),
Li = wxListItem:new(),
@@ -157,7 +158,7 @@ create_matchspec_view(Parent) ->
Panel = wxPanel:new(Parent),
MainSz = wxBoxSizer:new(?wxHORIZONTAL),
Style = ?wxLC_REPORT bor ?wxLC_HRULES,
- Splitter = wxSplitterWindow:new(Panel, []),
+ Splitter = wxSplitterWindow:new(Panel, [{style, ?SASH_STYLE}]),
Modules = wxListCtrl:new(Splitter, [{winid, ?MODULES_WIN}, {style, Style}]),
Funcs = wxListCtrl:new(Splitter, [{winid, ?FUNCS_WIN}, {style, Style}]),
Li = wxListItem:new(),
diff --git a/lib/observer/src/observer_tv_table.erl b/lib/observer/src/observer_tv_table.erl
index b4832d9599..59fe5b5670 100644
--- a/lib/observer/src/observer_tv_table.erl
+++ b/lib/observer/src/observer_tv_table.erl
@@ -98,7 +98,7 @@ init([Parent, Opts]) ->
ets -> "TV Ets: " ++ Title0;
mnesia -> "TV Mnesia: " ++ Title0
end,
- Frame = wxFrame:new(Parent, ?wxID_ANY, Title, [{size, {800, 300}}]),
+ Frame = wxFrame:new(Parent, ?wxID_ANY, Title, [{size, {800, 600}}]),
IconFile = filename:join(code:priv_dir(observer), "erlang_observer.png"),
Icon = wxIcon:new(IconFile, [{type,?wxBITMAP_TYPE_PNG}]),
wxFrame:setIcon(Frame, Icon),
@@ -261,11 +261,12 @@ handle_event(#wx{id=?ID_EDIT}, State = #state{selected=Index}) ->
handle_event(#wx{id=?ID_DELETE}, State = #state{selected=undefined}) ->
{noreply, State};
handle_event(#wx{id=?ID_DELETE},
- State = #state{pid=Pid, status=StatusBar, selected=Index}) ->
+ State = #state{grid=Grid, pid=Pid, status=StatusBar, selected=Index}) ->
Str = get_row(Pid, Index, all),
Pid ! {delete, Index},
wxStatusBar:setStatusText(StatusBar, io_lib:format("Deleted object: ~s",[Str])),
- {noreply, State};
+ wxListCtrl:setItemState(Grid, Index, 0, ?wxLIST_STATE_FOCUSED),
+ {noreply, State#state{selected=undefined}};
handle_event(#wx{id=?wxID_CLOSE}, State = #state{frame=Frame}) ->
wxFrame:destroy(Frame),
@@ -279,8 +280,8 @@ handle_event(#wx{id=?GOTO_ENTRY, event=#wxCommand{cmdString=Str}},
State = #state{grid=Grid}) ->
try
Row0 = list_to_integer(Str),
- Row1 = min(0, Row0),
- Row = max(wxListCtrl:getItemCount(Grid)-1,Row1),
+ Row1 = max(0, Row0),
+ Row = min(wxListCtrl:getItemCount(Grid)-1,Row1),
wxListCtrl:ensureVisible(Grid, Row),
ok
catch _:_ -> ok
@@ -289,7 +290,9 @@ handle_event(#wx{id=?GOTO_ENTRY, event=#wxCommand{cmdString=Str}},
%% Search functionality
handle_event(#wx{id=?ID_SEARCH},
- State = #state{sizer=Sz, search=Search}) ->
+ State = #state{grid=Grid, sizer=Sz, search=Search, selected=Index}) ->
+ is_integer(Index) andalso
+ wxListCtrl:setItemState(Grid, Index, 0, ?wxLIST_STATE_FOCUSED),
wxSizer:show(Sz, Search#search.win),
wxWindow:setFocus(Search#search.search),
wxSizer:layout(Sz),
@@ -321,7 +324,7 @@ handle_event(#wx{id=?SEARCH_ENTRY, event=#wxCommand{type=command_text_enter,cmdS
Pid ! {mark_search_hit, false},
case search(Pid, Str, Pos, Dir, Case) of
false ->
- wxStatusBar:setStatusText(SB, "Not found"),
+ wxStatusBar:setStatusText(SB, io_lib:format("Not found (regexp): ~s",[Str])),
Pid ! {mark_search_hit, Find#find.start},
wxListCtrl:refreshItem(Grid, Find#find.start),
{noreply, State#state{search=Search#search{find=Find#find{found=false}}}};
@@ -355,7 +358,7 @@ handle_event(#wx{id=?SEARCH_ENTRY, event=#wxCommand{cmdString=Str}},
Pid ! {mark_search_hit, false},
case search(Pid, Str, Cont#find.start, Dir, Case) of
false ->
- wxStatusBar:setStatusText(SB, "Not found"),
+ wxStatusBar:setStatusText(SB, io_lib:format("Not found (regexp): ~s",[Str])),
{noreply, State};
Row ->
wxListCtrl:ensureVisible(Grid, Row),
@@ -402,8 +405,11 @@ handle_info({new_cols, New}, State = #state{grid=Grid, columns=Cols0}) ->
Cols = add_columns(Grid, Cols0, New),
{noreply, State#state{columns=Cols}};
+handle_info({refresh, Min, Min}, State = #state{grid=Grid}) ->
+ wxListCtrl:refreshItem(Grid, Min), %% Avoid assert in wx below if Max is 0
+ {noreply, State};
handle_info({refresh, Min, Max}, State = #state{grid=Grid}) ->
- Max > 0 andalso wxListCtrl:refreshItems(Grid, Min, Max),
+ wxListCtrl:refreshItems(Grid, Min, Max),
{noreply, State};
handle_info(refresh_interval, State = #state{pid=Pid}) ->
@@ -426,10 +432,14 @@ handle_info(_Event, State) ->
terminate(_Event, #state{pid=Pid, attrs=Attrs}) ->
%% ListItemAttr are not auto deleted
- #attrs{odd=Odd, deleted=D, changed=Ch, searched=S} = Attrs,
- wxListItemAttr:destroy(Odd),
+ #attrs{odd=Odd, even=Even, deleted=D, searched=S,
+ changed_odd=Ch1, changed_even=Ch2,
+ new_odd=New1, new_even=New2
+ } = Attrs,
+ wxListItemAttr:destroy(Odd), wxListItemAttr:destroy(Even),
wxListItemAttr:destroy(D),
- wxListItemAttr:destroy(Ch),
+ wxListItemAttr:destroy(Ch1),wxListItemAttr:destroy(Ch2),
+ wxListItemAttr:destroy(New1),wxListItemAttr:destroy(New2),
wxListItemAttr:destroy(S),
unlink(Pid),
exit(Pid, window_closed),
@@ -473,7 +483,7 @@ search(Table, Str, Row, Dir, Case) ->
end.
-record(holder, {node, parent, pid,
- table=[], n=0, columns,
+ table=array:new(), n=0, columns,
temp=[],
search,
source, tabid,
@@ -507,6 +517,7 @@ table_holder(S0 = #holder{parent=Parent, pid=Pid, table=Table}) ->
S1 = handle_new_data_chunk(Data, S0),
table_holder(S1);
{sort, Col} ->
+ Parent ! {refresh, 0, S0#holder.n-1},
table_holder(sort(Col, S0));
{search, Data} ->
table_holder(search(Data, S0));
@@ -530,11 +541,14 @@ table_holder(S0 = #holder{parent=Parent, pid=Pid, table=Table}) ->
table_holder(S0);
What ->
io:format("Table holder got ~p~n",[What]),
+ Parent ! {refresh, 0, S0#holder.n-1},
table_holder(S0)
end.
handle_new_data_chunk(Data, S0 = #holder{columns=Cols, parent=Parent}) ->
- S1 = #holder{columns=NewCols} = handle_new_data_chunk2(Data, S0),
+ S1 = #holder{n=N,columns=NewCols} = handle_new_data_chunk2(Data, S0),
+ Parent ! {no_rows, N},
+ Parent ! {refresh, 0, N-1},
case NewCols =:= Cols of
true -> S1;
false ->
@@ -543,15 +557,12 @@ handle_new_data_chunk(Data, S0 = #holder{columns=Cols, parent=Parent}) ->
end.
handle_new_data_chunk2('$end_of_table',
- S0 = #holder{parent=Parent, sort=Opt,
- key=Key,
+ S0 = #holder{sort=Opt0, key=Key,
table=Old, temp=New}) ->
- Table = merge(Old, New, Key),
- N = length(Table),
- Parent ! {no_rows, N},
- sort(Opt#opt.sort_key, S0#holder{n=N, pid=undefine,
- sort=Opt#opt{sort_key = undefined},
- table=Table, temp=[]});
+ Merged = merge(array:to_list(Old), New, Key),
+ {Opt,Sorted} = sort(Opt0#opt.sort_key, Opt0#opt{sort_key = undefined}, Merged),
+ SortedA = array:from_list(Sorted),
+ S0#holder{sort=Opt, table=SortedA, n=array:size(SortedA), temp=[], pid=undefined};
handle_new_data_chunk2(Data, S0 = #holder{columns=Cols0, source=ets, temp=Tab0}) ->
{Tab, Cols} = parse_ets_data(Data, Cols0, Tab0),
S0#holder{columns=Cols, temp=Tab};
@@ -566,10 +577,9 @@ parse_ets_data([Recs|Rs], C0, Tab0) ->
parse_ets_data([], Cols, Tab) ->
{Tab, Cols}.
-sort(Col, S=#holder{n=N, parent=Parent, sort=Opt0, table=Table0}) ->
- {Opt, Table} = sort(Col, Opt0, Table0),
- Parent ! {refresh, 0, N-1},
- S#holder{sort=Opt, table=Table}.
+sort(Col, S=#holder{sort=Opt0, table=Table0}) ->
+ {Opt, Table} = sort(Col, Opt0, array:to_list(Table0)),
+ S#holder{sort=Opt, table=array:from_list(Table)}.
sort(Col, Opt = #opt{sort_key=Col, sort_incr=Bool}, Table) ->
{Opt#opt{sort_incr=not Bool}, lists:reverse(Table)};
@@ -597,7 +607,7 @@ keysort(Col, Table) ->
lists:sort(Sort, Table).
search([Str, Row, Dir0, CaseSens],
- S=#holder{parent=Parent, table=Table0}) ->
+ S=#holder{parent=Parent, n=N, table=Table}) ->
Opt = case CaseSens of
true -> [];
false -> [caseless]
@@ -607,32 +617,26 @@ search([Str, Row, Dir0, CaseSens],
false -> -1
end,
Res = case re:compile(Str, Opt) of
- {ok, Re} ->
- Table =
- case Dir0 of
- true ->
- lists:nthtail(Row, Table0);
- false ->
- lists:reverse(lists:sublist(Table0, Row+1))
- end,
- search(Row, Dir, Re, Table);
+ {ok, Re} -> re_search(Row, Dir, N, Re, Table);
{error, _} -> false
end,
Parent ! {self(), Res},
S#holder{search=Res}.
-search(Row, Dir, Re, [ [Term|_] |Table]) ->
+re_search(Row, Dir, N, Re, Table) when Row >= 0, Row < N ->
+ [Term|_] = array:get(Row, Table),
Str = format(Term),
Res = re:run(Str, Re),
case Res of
- nomatch -> search(Row+Dir, Dir, Re, Table);
- {match,_} -> Row
+ nomatch -> re_search(Row+Dir, Dir, N, Re, Table);
+ {match,_} ->
+ Row
end;
-search(_, _, _, []) ->
+re_search(_, _, _, _, _) ->
false.
get_row(From, Row, Col, Table) ->
- case lists:nth(Row+1, Table) of
+ case array:get(Row, Table) of
[Object|_] when Col =:= all ->
From ! {self(), format(Object)};
[Object|_] when Col =:= all_multiline ->
@@ -647,14 +651,15 @@ get_attr(From, Row, #holder{attrs=Attrs, search=Row}) ->
What = Attrs#attrs.searched,
From ! {self(), What};
get_attr(From, Row, #holder{table=Table, attrs=Attrs}) ->
- What = case lists:nth(Row+1, Table) of
+ Odd = (Row rem 2) > 0,
+ What = case array:get(Row, Table) of
[_|deleted] -> Attrs#attrs.deleted;
- [_|changed] -> Attrs#attrs.changed;
- [_|new] -> Attrs#attrs.changed;
- _ when (Row rem 2) > 0 ->
- Attrs#attrs.odd;
- _ ->
- Attrs#attrs.even
+ [_|changed] when Odd -> Attrs#attrs.changed_odd;
+ [_|changed] -> Attrs#attrs.changed_even;
+ [_|new] when Odd -> Attrs#attrs.new_odd;
+ [_|new] -> Attrs#attrs.new_even;
+ _ when Odd -> Attrs#attrs.odd;
+ _ -> Attrs#attrs.even
end,
From ! {self(), What}.
@@ -665,19 +670,29 @@ merge(Old, New, Key) ->
merge2([[Obj|_]|Old], [Obj|New], Key) ->
[[Obj]|merge2(Old, New, Key)];
-merge2([[A|_]|Old], [B|New], Key)
+merge2([[A|Op]|Old], [B|New], Key)
when element(Key, A) == element(Key, B) ->
- [[B|changed]|merge2(Old, New, Key)];
-merge2([[A|_]|Old], New = [B|_], Key)
+ case Op of
+ deleted ->
+ [[B|new]|merge2(Old, New, Key)];
+ _ ->
+ [[B|changed]|merge2(Old, New, Key)]
+ end;
+merge2([[A|Op]|Old], New = [B|_], Key)
when element(Key, A) < element(Key, B) ->
- [[A|deleted]|merge2(Old, New, Key)];
+ case Op of
+ deleted -> merge2(Old, New, Key);
+ _ -> [[A|deleted]|merge2(Old, New, Key)]
+ end;
merge2(Old = [[A|_]|_], [B|New], Key)
when element(Key, A) > element(Key, B) ->
[[B|new]|merge2(Old, New, Key)];
merge2([], New, _Key) ->
[[N|new] || N <- New];
merge2(Old, [], _Key) ->
- [[O|deleted] || [O|_] <- Old].
+ lists:foldl(fun([_O|deleted], Acc) -> Acc;
+ ([O|_], Acc) -> [[O|deleted]|Acc]
+ end, [], Old).
delete_row(Row, S0 = #holder{parent=Parent}) ->
@@ -691,7 +706,7 @@ delete_row(Row, S0 = #holder{parent=Parent}) ->
delete(Row, #holder{tabid=Id, table=Table,
source=Source, node=Node}) ->
- [Object|_] = lists:nth(Row+1, Table),
+ [Object|_] = array:get(Row, Table),
try
case Source of
ets ->
diff --git a/lib/observer/src/observer_wx.erl b/lib/observer/src/observer_wx.erl
index 47740581f0..4c385b76aa 100644
--- a/lib/observer/src/observer_wx.erl
+++ b/lib/observer/src/observer_wx.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2012. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -36,6 +36,7 @@
-define(ID_PING, 1).
-define(ID_CONNECT, 2).
-define(ID_NOTEBOOK, 3).
+-define(ID_CDV, 4).
-define(FIRST_NODES_MENU_ID, 1000).
-define(LAST_NODES_MENU_ID, 2000).
@@ -131,6 +132,9 @@ setup(#state{frame = Frame} = State) ->
wxMenu:connect(Frame, command_menu_selected),
wxFrame:show(Frame),
+ %% Freeze and thaw is buggy currently
+ DoFreeze = [?wxMAJOR_VERSION,?wxMINOR_VERSION] < [2,9],
+ DoFreeze andalso wxWindow:freeze(Panel),
%% I postpone the creation of the other tabs so they can query/use
%% the window size
@@ -154,9 +158,12 @@ setup(#state{frame = Frame} = State) ->
TracePanel = observer_trace_wx:start_link(Notebook, self()),
wxNotebook:addPage(Notebook, TracePanel, ?TRACE_STR, []),
-
- %% Force redraw (window needs it)
+ %% Force redraw (windows needs it)
wxWindow:refresh(Panel),
+ DoFreeze andalso wxWindow:thaw(Panel),
+
+ wxFrame:raise(Frame),
+ wxFrame:setFocus(Frame),
SysPid = wx_object:get_pid(SysPanel),
SysPid ! {active, node()},
@@ -206,6 +213,10 @@ handle_event(#wx{event=#wxNotebook{type=command_notebook_page_changing}},
handle_event(#wx{event = #wxClose{}}, State) ->
{stop, normal, State};
+handle_event(#wx{id = ?ID_CDV, event = #wxCommand{type = command_menu_selected}}, State) ->
+ crashdump_viewer:start(),
+ {noreply, State};
+
handle_event(#wx{id = ?wxID_EXIT, event = #wxCommand{type = command_menu_selected}}, State) ->
{stop, normal, State};
@@ -340,6 +351,22 @@ handle_info({nodedown, Node},
create_txt_dialog(Frame, Msg, "Node down", ?wxICON_EXCLAMATION),
{noreply, State3};
+handle_info({open_link, Pid0}, State = #state{pro_panel=ProcViewer, frame=Frame}) ->
+ Pid = case Pid0 of
+ [_|_] -> try list_to_pid(Pid0) catch _:_ -> Pid0 end;
+ _ -> Pid0
+ end,
+ %% Forward to process tab
+ case is_pid(Pid) of
+ true -> wx_object:get_pid(ProcViewer) ! {procinfo_open, Pid};
+ false ->
+ Msg = io_lib:format("Information about ~p is not available or implemented",[Pid]),
+ Info = wxMessageDialog:new(Frame, Msg),
+ wxMessageDialog:showModal(Info),
+ wxMessageDialog:destroy(Info)
+ end,
+ {noreply, State};
+
handle_info({'EXIT', Pid, _Reason}, State) ->
io:format("Child (~s) crashed exiting: ~p ~p~n",
[pid2panel(Pid, State), Pid,_Reason]),
@@ -517,9 +544,11 @@ create_connect_dialog(connect, #state{frame = Frame}) ->
end.
default_menus(NodesMenuItems) ->
+ CDV = #create_menu{id = ?ID_CDV, text = "Examine Crashdump"},
Quit = #create_menu{id = ?wxID_EXIT, text = "Quit"},
About = #create_menu{id = ?wxID_ABOUT, text = "About"},
Help = #create_menu{id = ?wxID_HELP},
+ FileMenu = {"File", [CDV, Quit]},
NodeMenu = case erlang:is_alive() of
true -> {"Nodes", NodesMenuItems ++
[#create_menu{id = ?ID_PING, text = "Connect Node"}]};
@@ -528,15 +557,15 @@ default_menus(NodesMenuItems) ->
end,
case os:type() =:= {unix, darwin} of
false ->
- FileMenu = {"File", [Quit]},
+ FileMenu = {"File", [CDV, Quit]},
HelpMenu = {"Help", [About,Help]},
[FileMenu, NodeMenu, HelpMenu];
true ->
%% On Mac quit and about will be moved to the "default' place
%% automagicly, so just add them to a menu that always exist.
%% But not to the help menu for some reason
- {Tag, Menus} = NodeMenu,
- [{Tag, Menus ++ [Quit,About]}, {"&Help", [Help]}]
+ {Tag, Menus} = FileMenu,
+ [{Tag, Menus ++ [About]}, NodeMenu, {"&Help", [Help]}]
end.
clean_menus(Menus, MenuBar) ->
@@ -550,13 +579,6 @@ remove_menu_items([{MenuStr = "File", Menus}|Rest], MenuBar) ->
Menu = wxMenuBar:getMenu(MenuBar, MenuId),
Items = [wxMenu:findItem(Menu, Tag) || #create_menu{text=Tag} <- Menus],
[wxMenu:delete(Menu, MItem) || MItem <- Items],
- case os:type() =:= {unix, darwin} of
- true ->
- wxMenuBar:remove(MenuBar, MenuId),
- wxMenu:destroy(Menu);
- false ->
- ignore
- end,
remove_menu_items(Rest, MenuBar)
end;
remove_menu_items([{"Nodes", _}|_], _MB) ->
diff --git a/lib/observer/test/crashdump_helper.erl b/lib/observer/test/crashdump_helper.erl
index 520fcdfd0d..40dbe28d46 100644
--- a/lib/observer/test/crashdump_helper.erl
+++ b/lib/observer/test/crashdump_helper.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2007-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2007-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -23,15 +23,15 @@
-include("test_server.hrl").
n1_proc(N2,Creator) ->
- spawn(fun() -> n1_proc(Creator,N2,x,[]) end).
-n1_proc(Creator,N2,P2,L) when P2==x;length(L)<2->
+ spawn(fun() -> n1_proc(Creator,N2,x,y,[]) end).
+n1_proc(Creator,N2,Pid2,Port2,L) when Pid2==x;length(L)<2->
receive
- {N2,P} ->
- n1_proc(Creator,N2,P,L);
+ {N2,Pid,Port} ->
+ n1_proc(Creator,N2,Pid,Port,L);
P ->
- n1_proc(Creator,N2,P2,[P|L])
+ n1_proc(Creator,N2,Pid2,Port2,[P|L])
end;
-n1_proc(Creator,_N2,P2,_L) ->
+n1_proc(Creator,_N2,Pid2,Port2,_L) ->
register(aaaaaaaa,self()),
process_flag(save_calls,3),
ets:new(cdv_test_ordset_table,[ordered_set]),
@@ -42,20 +42,50 @@ n1_proc(Creator,_N2,P2,_L) ->
Pid = self(),
Bin = list_to_binary(lists:seq(1, 255)),
SubBin = element(1, split_binary(element(2, split_binary(Bin, 8)), 17)),
- DictionaryValue = {"list",atom,42,54.654,math:pow(2,1023),{},
- Port,Fun,Ref,Pid,
- Bin,SubBin,83974938738373873,-38748762783736367},
- put(dictionary_key,DictionaryValue),
- spawn(fun() -> register(aaaaaaab,self()),
- receive after infinity -> ok end
- end),
- link(P2),
+
+ register(named_port,Port),
+
+ %% Dictionary
+ put(list,"list"),
+ put(atom,atom),
+ put(integer,42),
+ put(float,54.654),
+ put(big_float,math:pow(2,1023)),
+ put(tuple,{1,2,{}}),
+ put(port,Port),
+ put('fun',Fun),
+ put(ref,Ref),
+ put(pid,Pid),
+ put(bin,Bin),
+ put(sub_bin,SubBin),
+ put(bignum,83974938738373873),
+ put(neg_bignum,-38748762783736367),
+ put(ext_pid,Pid2),
+ put(ext_port,Port2),
+
+ %% Message queue
+ L = lists:seq(0,255),
+ BigMsg = {message,list_to_binary(L),L},
+ Port = hd(erlang:ports()),
+ self() ! {short,message,1,2.5,"hello world",Port,{}},
+ self() ! BigMsg,
+
+ OtherPid = spawn(fun() -> register(aaaaaaab,self()),
+ receive after infinity -> ok end
+ end),
+ link(OtherPid), % own node
+ link(Pid2), % external node
+ erlang:monitor(process,OtherPid),
+ erlang:monitor(process,Pid2),
+
+ code:load_file(?MODULE),
+
Creator ! {self(),done},
receive after infinity -> ok end.
remote_proc(P1,Creator) ->
spawn(fun() ->
- P1 ! {node(),self()},
+ P1 ! {node(),self(),hd(erlang:ports())},
Creator ! {self(),done},
receive after infinity -> ok end
end).
diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl
index 28c7853eaf..7a582436b4 100644
--- a/lib/observer/test/crashdump_viewer_SUITE.erl
+++ b/lib/observer/test/crashdump_viewer_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2003-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2003-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -19,9 +19,11 @@
-module(crashdump_viewer_SUITE).
+-include_lib("observer/src/crashdump_viewer.hrl").
+
%% Test functions
-export([all/0, suite/0,groups/0,init_per_group/2,end_per_group/2,
- translate/1,start/1,fini/1,load_file/1,
+ start_stop/1,load_file/1,not_found_items/1,
non_existing/1,not_a_crashdump/1,old_crashdump/1]).
-export([init_per_suite/1, end_per_suite/1]).
-export([init_per_testcase/2, end_per_testcase/2]).
@@ -30,22 +32,39 @@
-include("test_server_line.hrl").
-include_lib("kernel/include/file.hrl").
--include_lib("stdlib/include/ms_transform.hrl").
-
--define(default_timeout, ?t:minutes(30)).
--define(sl_alloc_vsns,[r9b]).
-define(failed_file,"failed-cases.txt").
+-define(helper_mod,crashdump_helper).
+
+
+init_per_testcase(start_stop, Config) ->
+ catch crashdump_viewer:stop(),
+ try
+ case os:type() of
+ {unix,darwin} ->
+ exit("Can not test on MacOSX");
+ {unix, _} ->
+ io:format("DISPLAY ~s~n", [os:getenv("DISPLAY")]),
+ case ct:get_config(xserver, none) of
+ none -> ignore;
+ Server -> os:putenv("DISPLAY", Server)
+ end;
+ _ -> ignore
+ end,
+ wx:new(),
+ wx:destroy(),
+ Config
+ catch
+ _:undef ->
+ {skipped, "No wx compiled for this platform"};
+ _:Reason ->
+ SkipReason = io_lib:format("Start wx failed: ~p", [Reason]),
+ {skipped, lists:flatten(SkipReason)}
+ end;
init_per_testcase(_Case, Config) ->
- DataDir = ?config(data_dir,Config),
- Fs = filelib:wildcard(filename:join(DataDir,"*translated*")),
- lists:foreach(fun(F) -> file:delete(F) end,Fs),
catch crashdump_viewer:stop(),
- Dog = ?t:timetrap(?default_timeout),
- [{watchdog, Dog}|Config].
+ Config.
end_per_testcase(Case, Config) ->
- Dog=?config(watchdog, Config),
- ?t:timetrap_cancel(Dog),
case ?config(tc_status,Config) of
ok ->
ok;
@@ -60,8 +79,13 @@ end_per_testcase(Case, Config) ->
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [translate, load_file, non_existing, not_a_crashdump,
- old_crashdump].
+ [start_stop,
+ non_existing,
+ not_a_crashdump,
+ old_crashdump,
+ load_file,
+ not_found_items
+ ].
groups() ->
[].
@@ -73,18 +97,13 @@ end_per_group(_GroupName, Config) ->
Config.
-init_per_suite(doc) ->
- ["Create a lot of crashdumps which can be used in the testcases below"];
+%% Create a lot of crashdumps which can be used in the testcases below
init_per_suite(Config) when is_list(Config) ->
- Dog = ?t:timetrap(?default_timeout),
delete_saved(Config),
- application:start(inets), % will be using the http client later
- httpc:set_options([{ipfamily,inet6fb4}]),
DataDir = ?config(data_dir,Config),
Rels = [R || R <- [r15b,r16b], ?t:is_release_available(R)] ++ [current],
io:format("Creating crash dumps for the following releases: ~p", [Rels]),
AllDumps = create_dumps(DataDir,Rels),
- ?t:timetrap_cancel(Dog),
[{dumps,AllDumps}|Config].
delete_saved(Config) ->
@@ -97,54 +116,64 @@ delete_saved(Config) ->
ok.
-translate(suite) ->
- [];
-translate(doc) ->
- ["Test that crash dumps from OTP R9B can be translated"];
-translate(Config) when is_list(Config) ->
- DataDir = ?config(data_dir,Config),
- OutFile = filename:join(DataDir,"translated"),
-
- R9BFiles = filelib:wildcard(filename:join(DataDir,"r9b_dump.*")),
- AllFiles = R9BFiles,
- lists:foreach(
- fun(File) ->
- io:format("Translating file: ~s~n",[File]),
- ok = crashdump_translate:old2new(File,OutFile),
- check_result(File,OutFile)
- end,
- AllFiles),
- ok.
+start_stop(Config) when is_list(Config) ->
+ Dump = hd(?config(dumps,Config)),
+ timer:sleep(1000),
-start(suite) ->
- [];
-start(doc) ->
- ["Test start and stop of the Crashdump Viewer"];
-start(Config) when is_list(Config) ->
- %% Set a much shorter timeout here... We don't have all the time in world.
- AngryDog = ?t:timetrap(?t:seconds(30)),
- Port = start_cdv(),
+ ProcsBefore = length(processes()),
+ ok = crashdump_viewer:start(Dump),
true = is_pid(whereis(crashdump_viewer_server)),
- true = is_pid(whereis(web_tool)),
- Html = contents(Port,"start_page"),
- "Welcome to the Web BasedErlang Crash Dump Analyser" = strip(Html),
+ true = is_pid(whereis(cdv_wx)),
+ true = is_pid(whereis(cdv_proc_cb)),
+ true = is_pid(whereis(cdv_port_cb)),
+ true = is_pid(whereis(cdv_ets_cb)),
+ true = is_pid(whereis(cdv_timer_cb)),
+ true = is_pid(whereis(cdv_fun_cb)),
+ true = is_pid(whereis(cdv_atom_cb)),
+ true = is_pid(whereis(cdv_dist_cb)),
+ true = is_pid(whereis(cdv_mod_cb)),
+ timer:sleep(5000), % give some time to live
ok = crashdump_viewer:stop(),
- timer:sleep(10), % give some time to stop
+ timer:sleep(1000), % give some time to stop
undefined = whereis(crashdump_viewer_server),
- undefined = whereis(web_tool),
- Url = cdv_url(Port,"start_page"),
- {error,_} = httpc:request(Url),
-% exit(whereis(httpc_manager),kill),
- ?t:timetrap_cancel(AngryDog),
+ undefined = whereis(cdv_wx),
+ ProcsAfter=length(processes()),
+ ProcsAfter=ProcsBefore,
ok.
-fini(Config) when is_list(Config) ->
- ok.
+%% Try to load nonexisting file
+non_existing(Config) when is_list(Config) ->
+ ExpectedReason = "non-existing-file is not an Erlang crash dump\n",
+ {error, ExpectedReason} = start_backend("non-existing-file"),
+ ok = crashdump_viewer:stop().
+
+%% Try to load a crashdump of old (earlier than OTP R10B) format
+old_crashdump(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ OldFile = filename:join(DataDir,"old_format.dump"),
+ ExpectedReason = "The crashdump " ++ OldFile ++
+ " is in the pre-R10B format, which is no longer supported.\n",
+ {error, ExpectedReason} = start_backend(OldFile),
+ ok = crashdump_viewer:stop().
+
+%% Try to load a file which is not an erlang crashdump
+not_a_crashdump(Config) when is_list(Config) ->
+ PrivDir = ?config(priv_dir,Config),
+ F1 = filename:join(PrivDir,"f1"),
+ F2 = filename:join(PrivDir,"f2"),
+
+ file:write_file(F1,"=unexpected_tag:xyz"),
+ file:write_file(F2,""),
+
+ ExpReason1 = F1 ++ " is not an Erlang crash dump\n",
+ ExpReason2 = F2 ++ " is not an Erlang crash dump\n",
-load_file(suite) ->
- [];
-load_file(doc) ->
- ["Load files into the tool and view all pages"];
+ {error,ExpReason1} = start_backend(F1),
+ {error,ExpReason2} = start_backend(F2),
+
+ ok = crashdump_viewer:stop().
+
+%% Load files into the tool and view all pages
load_file(Config) when is_list(Config) ->
case ?t:is_debug() of
true ->
@@ -156,65 +185,33 @@ load_file(Config) when is_list(Config) ->
load_file_1(Config) ->
DataDir = ?config(data_dir,Config),
- Port = start_cdv(),
+ crashdump_viewer:start_link(),
+ %% Read both created and predefined dumps
AllFiles = filelib:wildcard(filename:join(DataDir,"r*_dump.*")),
lists:foreach(
fun(File) ->
- browse_file(Port,File),
- special(Port,File)
+ Content = browse_file(File),
+ special(File,Content)
end,
AllFiles),
ok = crashdump_viewer:stop().
-non_existing(suite) ->
- [];
-non_existing(doc) ->
- ["Try to load nonexisting file"];
-non_existing(Config) when is_list(Config) ->
- Port = start_cdv(),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path=nonexistingfile"}),
- "Please wait..." = title(Html),
- "An error occured:nonexistingfile is not an Erlang crash dump" =
- strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop().
+%% Try to lookup nonexisting process, port and node
+not_found_items(Config) ->
+ Dump = hd(?config(dumps,Config)),
-old_crashdump(doc) ->
- ["Try to load nonexisting file"];
-old_crashdump(Config) when is_list(Config) ->
- Port = start_cdv(),
- DataDir = ?config(data_dir, Config),
- OldCrashDump = filename:join(DataDir, "old_format.dump"),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++OldCrashDump}),
- "Please wait..." = title(Html),
- Str = "An error occured:The crashdump "++OldCrashDump++
- " is in the pre-R10B format, which is no longer supported.",
- Str = strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop().
+ ok = start_backend(Dump),
+ {ok,#general_info{},_} = crashdump_viewer:general_info(),
-not_a_crashdump(suite) ->
- [];
-not_a_crashdump(doc) ->
- ["Try to load a file which is not an erlang crashdump"];
-not_a_crashdump(Config) when is_list(Config) ->
- Port = start_cdv(),
- NoCrashdump = code:which(?MODULE),
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++NoCrashdump}),
- "Please wait..." = title(Html),
- Str = "An error occured:"++NoCrashdump++" is not an Erlang crash dump",
- Str = strip(wait(10,Port,"redirect")),
- ok = crashdump_viewer:stop(),
-% exit(whereis(httpc_manager),kill),
- ok.
-
+ {error,not_found} = crashdump_viewer:proc_details("<1111.1111.1111>"),
+ {error,not_found} = crashdump_viewer:port("#Port<1111.1111>"),
+ {error,not_found} = crashdump_viewer:node_info("1111"),
+ ok = crashdump_viewer:stop().
-end_per_suite(doc) ->
- ["Remove generated crashdumps"];
+%% Remove generated crashdumps
end_per_suite(Config) when is_list(Config) ->
Dumps = ?config(dumps,Config),
DataDir = ?config(data_dir,Config),
@@ -240,387 +237,165 @@ end_per_suite(Config) when is_list(Config) ->
%%%-----------------------------------------------------------------
%%% Internal
-start_cdv() ->
- ?t:capture_start(),
- ok = crashdump_viewer:start(),
- "WebTool is available at http://localhost:" ++ Where =
- lists:flatten(?t:capture_get()),
- ?t:capture_stop(),
- [Port|_] = string:tokens(Where,"/"),
- Port.
-
-
-check_result(File,OutFile) ->
- {ok,#file_info{size=FS}} = file:read_file_info(File),
- {ok,#file_info{size=OFS}} = file:read_file_info(OutFile),
- Rel =
- if OFS > 0 -> FS/OFS;
- true -> 1.25
- end,
- if Rel>0.75, Rel<1.25 -> ok;
- true -> ?t:fail({unreasonable_size,File,FS,OFS})
- end,
- {ok,Fd} = file:open(OutFile,[read]),
- "=erl_crash_dump:0.0\n" = io:get_line(Fd,''),
- case is_truncated(File) of
- true ->
- ok;
- false ->
- {ok,_} = file:position(Fd,{eof,-5}),
- case io:get_line(Fd,'') of
- "=end\n" -> ok;
- Other -> ?t:fail({truncated,File,Other})
- end
- end,
- ok = file:close(Fd).
-
-
-%% Read a page and check that the page title matches Title
-contents(Port,Link) ->
- Url = cdv_url(Port,Link),
- request_sync(get,{Url,[]}).
-
-cdv_url(Port,Link) ->
- "http://localhost:" ++ Port ++ "/cdv_erl/crashdump_viewer/" ++ Link.
-
-request_sync(Method,HTTPReqCont) ->
- case httpc:request(Method,
- HTTPReqCont,
- [{timeout,30000}],
- [{full_result, false}]) of
- {ok,{200,Html}} ->
- Html;
- {ok,{Code,Html}} ->
- io:format("~s\n", [Html]),
- io:format("Received ~w from httpc:request(...) with\nMethod=~w\n"
- "HTTPReqCont=~p\n",
- [Code,Method,HTTPReqCont]),
- ?t:fail();
- Other ->
- io:format(
- "Received ~w from httpc:request(...) with\nMethod=~w\n"
- "HTTPReqCont=~p\n",
- [Other,Method,HTTPReqCont]),
- ?t:fail()
- end.
-
-
+%%%-----------------------------------------------------------------
+%%% Start the crashdump_viewer backend and load a dump
+start_backend(File) ->
+ crashdump_viewer:start_link(),
+ register_progress_handler(),
+ ok = crashdump_viewer:read_file(File),
+ wait_for_progress_done().
+%%%-----------------------------------------------------------------
+%%% Simulate the progress handler in observer_lib
+register_progress_handler() ->
+ register(cdv_progress_handler,self()).
-strip([$<|Html]) ->
- strip(drop_tag(Html));
-strip([$\n|Html]) ->
- strip(Html);
-strip([X|Html]) ->
- [X|strip(Html)];
-strip([]) ->
- [].
-drop_tag([$>|Html]) ->
- Html;
-drop_tag([_|Html]) ->
- drop_tag(Html).
-
-title(Port,Link,Title) ->
- Html = contents(Port,Link),
- Title = title(Html).
-
-wait(0,_Port,Link) ->
- ?t:fail({wait,Link,timeout});
-wait(Time,Port,Link) ->
- Html = contents(Port,Link),
- case title(Html) of
- "Please wait..." ->
- timer:sleep(1000),
- wait(Time-1,Port,Link);
- _Title ->
- Html
+wait_for_progress_done() ->
+ receive
+ {progress,{error,Reason}} ->
+ unregister(cdv_progress_handler),
+ {error,lists:flatten(Reason)};
+ {progress,{ok,done}} ->
+ unregister(cdv_progress_handler),
+ ok;
+ {progress,_} ->
+ wait_for_progress_done()
end.
-title([$<,$T,$I,$T,$L,$E,$>|Html]) ->
- title_end(Html);
-title([_|Html]) ->
- title(Html);
-title([]) ->
- [].
-
-title_end([$<,$/,$T,$I,$T,$L,$E,$>|_]) ->
- [];
-title_end([X|Html]) ->
- [X|title_end(Html)].
-
-
%%%-----------------------------------------------------------------
%%% General check of what is displayed for a dump
-browse_file(Port,File) ->
+browse_file(File) ->
io:format("Browsing file: ~s~n",[File]),
- %% The page where a filename can be entered
- title(Port,"read_file_frame","Read File"),
-
- %% Load a file
- Url = "http://localhost:"++Port++"/cdv_erl/crashdump_viewer/read_file",
- Html = request_sync(post,{Url,[],[],"path="++File}),
- "Please wait..." = title(Html),
- "Crashdump Viewer Start Page" = title(wait(10,Port,"start_page")),
-
- %% The frame with the initial information for a dump
- title(Port,"initial_info_frame","General Information"),
-
- %% Topmost frame of the page
- FilenameFrame = contents(Port,"filename_frame"),
- Match = "FilenameCrashdump currently viewed:" ++ File,
- true = lists:prefix(Match,strip(FilenameFrame)),
-
- %% Toggle a menu item and check that it explodes/collapses
- title(Port,"menu_frame","Menu"),
- exploded = toggle_menu(Port),
- collapsed = toggle_menu(Port),
-
- %% Open each page in menu and check that correct title is shown
- title(Port,"general_info","General Information"),
- title(Port,"processes","Process Information"),
- title(Port,"sort_procs?sort=state","Process Information"),
- title(Port,"sort_procs?sort=state","Process Information"),
- title(Port,"sort_procs?sort=pid","Process Information"),
- title(Port,"sort_procs?sort=pid","Process Information"),
- title(Port,"sort_procs?sort=msg_q_len","Process Information"),
- title(Port,"sort_procs?sort=msg_q_len","Process Information"),
- title(Port,"sort_procs?sort=reds","Process Information"),
- title(Port,"sort_procs?sort=reds","Process Information"),
- title(Port,"sort_procs?sort=mem","Process Information"),
- title(Port,"sort_procs?sort=mem","Process Information"),
- title(Port,"sort_procs?sort=name","Process Information"),
- title(Port,"sort_procs?sort=name","Process Information"),
- title(Port,"sort_procs?sort=init_func","Process Information"),
- title(Port,"sort_procs?sort=init_func","Process Information"),
- title(Port,"ports","Port Information"),
- title(Port,"ets_tables","ETS Table Information"),
- title(Port,"timers","Timer Information"),
- title(Port,"fun_table","Fun Information"),
- title(Port,"atoms","Atoms"),
- title(Port,"dist_info","Distribution Information"),
- title(Port,"loaded_modules","Loaded Modules Information"),
- title(Port,"hash_tables","Hash Table Information"),
- title(Port,"index_tables","Index Table Information"),
- title(Port,"memory","Memory Information"),
- title(Port,"allocated_areas","Information about allocated areas"),
- title(Port,"allocator_info","Allocator Information"),
-
- case is_truncated(File) of
- true ->
- ok;
- _ ->
- proc_details(Port),
- port_details(Port),
- title(Port,"loaded_mod_details?mod=kernel","kernel")
- end,
-
- ok.
-
-
-special(Port,File) ->
+ ok = start_backend(File),
+
+ {ok,_GI=#general_info{},_GenTW} = crashdump_viewer:general_info(),
+ {ok,Procs,_ProcsTW} = crashdump_viewer:processes(),
+ {ok,Ports,_PortsTW} = crashdump_viewer:ports(),
+ {ok,_Ets,_EtsTW} = crashdump_viewer:ets_tables(all),
+ {ok,_IntEts,_IntEtsTW} = crashdump_viewer:internal_ets_tables(),
+ {ok,_Timers,_TimersTW} = crashdump_viewer:timers(all),
+ {ok,_Funs,_FunsTW} = crashdump_viewer:funs(),
+ {ok,_Atoms,_AtomsTW} = crashdump_viewer:atoms(),
+ {ok,Nodes,_NodesTW} = crashdump_viewer:dist_info(),
+ {ok,Mods,_ModsTW} = crashdump_viewer:loaded_modules(),
+ {ok,_Mem,_MemTW} = crashdump_viewer:memory(),
+ {ok,_AllocAreas,_AreaTW} = crashdump_viewer:allocated_areas(),
+ {ok,_AllocINfo,_AllocInfoTW} = crashdump_viewer:allocator_info(),
+ {ok,_HashTabs,_HashTabsTW} = crashdump_viewer:hash_tables(),
+ {ok,_IndexTabs,_IndexTabsTW} = crashdump_viewer:index_tables(),
+
+ lookat_all_pids(Procs),
+ lookat_all_ports(Ports),
+ lookat_all_mods(Mods),
+ lookat_all_nodes(Nodes),
+
+ Procs. % used as second arg to special/2
+
+special(File,Procs) ->
case filename:extension(File) of
".full_dist" ->
- contents(Port,"processes"),
- AllProcs = contents(Port,"sort_procs?sort=name"),
-
%% I registered a process as aaaaaaaa in the full_dist dumps
%% to make sure it will be the first in the list when sorted
%% on names. There are some special data here, so I'll thoroughly
%% read the process details for this process. Other processes
%% are just briefly traversed.
- {Pid,Rest1} = get_first_process(AllProcs),
-
- ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
- ProcTitle = "Process " ++ Pid,
- ProcTitle = title(ProcDetails),
- title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
- title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
-
- case filename:basename(File) of
- "r10b_dump.full_dist" ->
- [MsgQueueLink,DictLink,StackDumpLink] =
- expand_memory_links(ProcDetails),
- MsgQueue = contents(Port,MsgQueueLink),
- "MsgQueue" = title(MsgQueue),
- title(Port,DictLink,"Dictionary"),
- title(Port,StackDumpLink,"StackDump"),
-
- ExpandBinaryLink = expand_binary_link(MsgQueue),
- title(Port,ExpandBinaryLink,"Expanded binary"),
- lookat_all_pids(Port,Rest1);
- _ ->
- ok
- end;
- ".strangemodname" ->
- AllMods = contents(Port,"loaded_modules"),
- open_all_modules(Port,AllMods),
+ [#proc{pid=Pid0}|_Rest] = lists:keysort(#proc.name,Procs),
+ Pid = pid_to_list(Pid0),
+ {ok,ProcDetails=#proc{},[]} = crashdump_viewer:proc_details(Pid),
+
+ #proc{dict=Dict} = ProcDetails,
+
+ ['#CDVBin',Offset,Size,Pos] = proplists:get_value(bin,Dict),
+ {ok,<<_:Size/binary>>} =
+ crashdump_viewer:expand_binary({Offset,Size,Pos}),
+ {ok,'#CDVTruncatedBinary'} =
+ crashdump_viewer:expand_binary({Offset,Size+1,Pos}),
+ ['#CDVBin',SOffset,SSize,SPos] = proplists:get_value(sub_bin,Dict),
+ {ok,<<_:SSize/binary>>} =
+ crashdump_viewer:expand_binary({SOffset,SSize,SPos}),
+
+ ['#CDVPid',X1,Y1,Z1] = proplists:get_value(ext_pid,Dict),
+ ChannelStr1 = integer_to_list(X1),
+ ExtPid =
+ "<" ++ ChannelStr1 ++ "." ++
+ integer_to_list(Y1) ++ "." ++
+ integer_to_list(Z1) ++ ">",
+ {error,{other_node,ChannelStr1}} =
+ crashdump_viewer:proc_details(ExtPid),
+
+ ['#CDVPort',X2,Y2] = proplists:get_value(port,Dict),
+ ChannelStr2 = integer_to_list(X2),
+ Port = "#Port<"++ChannelStr2++"."++integer_to_list(Y2)++">",
+ {ok,_PortDetails=#port{},[]} = crashdump_viewer:port(Port),
+
+ ['#CDVPort',X3,Y3] = proplists:get_value(ext_port,Dict),
+ ChannelStr3 = integer_to_list(X3),
+ ExtPort = "#Port<"++ChannelStr3++"."++integer_to_list(Y3)++">",
+ {error,{other_node,ChannelStr3}} = crashdump_viewer:port(ExtPort),
+
+ {ok,[_Ets=#ets_table{}],[]} = crashdump_viewer:ets_tables(Pid),
+ {ok,[_Timer=#timer{}],[]} = crashdump_viewer:timers(Pid),
+
+ {ok,Mod1=#loaded_mod{},[]} =
+ crashdump_viewer:loaded_mod_details(atom_to_list(?helper_mod)),
+ #loaded_mod{current_size=CS, old_size=OS,
+ old_attrib=A,old_comp_info=C}=Mod1,
+ true = is_integer(CS),
+ true = (CS==OS),
+ true = (A=/=undefined),
+ true = (C=/=undefined),
+ {ok,Mod2=#loaded_mod{},[]} =
+ crashdump_viewer:loaded_mod_details("application"),
+ #loaded_mod{old_size="No old code exists",
+ old_attrib=undefined,
+ old_comp_info=undefined}=Mod2,
ok;
- %%! No longer needed - all atoms are shown on one page!!
- %% ".250atoms" ->
- %% Html1 = contents(Port,"atoms"),
- %% NextLink1 = next_link(Html1),
- %% "Atoms" = title(Html1),
- %% Html2 = contents(Port,NextLink1),
- %% NextLink2 = next_link(Html2),
- %% "Atoms" = title(Html2),
- %% Html3 = contents(Port,NextLink2),
- %% "" = next_link(Html3),
- %% "Atoms" = title(Html3);
- _ ->
- ok
- end,
- case filename:basename(File) of
- "r10b_dump." ++ _ ->
- lookat_all_pids(Port,contents(Port,"processes"));
- "r11b_dump." ++ _ ->
- lookat_all_pids(Port,contents(Port,"processes"));
+ %% ".strangemodname" ->
+ %% {ok,Mods,[]} = crashdump_viewer:loaded_modules(),
+ %% lookat_all_mods(Mods),
+ %% ok;
+ %% ".sort" ->
+ %% %% sort ports, atoms and modules ????
+ %% ok;
+ %% ".trunc" ->
+ %% %% ????
+ %% ok;
_ ->
ok
end,
ok.
-lookat_all_pids(Port,Pids) ->
- case get_first_process(Pids) of
- {Pid,Rest} ->
- ProcDetails = contents(Port,"proc_details?pid=" ++ Pid),
- ProcTitle = "Process " ++ Pid,
- ProcTitle = title(ProcDetails),
- title(Port,"ets_tables?pid="++Pid,"ETS Tables for Process "++Pid),
- title(Port,"timers?pid="++Pid,"Timers for Process "++Pid),
-
- MemoryLinks = expand_memory_links(ProcDetails),
- lists:foreach(
- fun(Link) ->
- Cont = contents(Port,Link),
- true = lists:member(title(Cont),
- ["MsgQueue",
- "Dictionary",
- "StackDump"])
- end,
- MemoryLinks),
- lookat_all_pids(Port,Rest);
- false ->
- ok
- end.
-
-
-get_first_process([]) ->
- false;
-get_first_process(Html) ->
- case Html of
- "<TD><A HREF=\"./proc_details?pid=" ++ Rest ->
- {string:sub_word(Rest,1,$"),Rest};
- [_H|T] ->
- get_first_process(T)
- end.
-
-expand_memory_links(Html) ->
- case Html of
- "<B>MsgQueue</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
- "<B>Dictionary</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")|expand_memory_links(Rest)];
- "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- [string:sub_word(Rest,1,$")];
- [_H|T] ->
- expand_memory_links(T);
- [] ->
- []
- end.
-
-expand_binary_link(Html) ->
- case Html of
- "<A HREF=\"./expand_binary?pos=" ++ Rest ->
- "expand_binary?pos=" ++ string:sub_word(Rest,1,$");
- [_H|T] ->
- expand_binary_link(T)
- end.
-
-open_all_modules(Port,Modules) ->
- case get_first_module(Modules) of
- {Module,Rest} ->
- ModuleDetails = contents(Port,"loaded_mod_details?mod=" ++ Module),
- ModTitle = http_uri:decode(Module),
- ModTitle = title(ModuleDetails),
- open_all_modules(Port,Rest);
- false ->
- ok
- end.
-
-get_first_module([]) ->
- false;
-get_first_module(Html) ->
- case Html of
- "<TD><A HREF=\"loaded_mod_details?mod=" ++ Rest ->
- {string:sub_word(Rest,1,$"),Rest};
- [_H|T] ->
- get_first_module(T)
- end.
-
-%% next_link(Html) ->
-%% case Html of
-%% "<A HREF=\"./next?pos=" ++ Rest ->
-%% "next?pos=" ++ string:sub_word(Rest,1,$");
-%% [_H|T] ->
-%% next_link(T);
-%% [] ->
-%% []
-%% end.
-
-
-
-toggle_menu(Port) ->
- Html = contents(Port,"toggle?index=4"),
- check_toggle(Html).
-
-check_toggle(Html) ->
- case Html of
- "<A HREF=\"./toggle?index=4\"><IMG SRC=\"/crashdump_viewer/collapsd.gif\"" ++ _ ->
- collapsed;
- "<A HREF=\"./toggle?index=4\"><IMG SRC=\"/crashdump_viewer/exploded.gif\"" ++ _ ->
- exploded;
- [_H|T] ->
- check_toggle(T)
- end.
-
-
-proc_details(Port) ->
- ProcDetails = contents(Port,"proc_details?pid=<0.0.0>"),
- "Process <0.0.0>" = title(ProcDetails),
-
- ExpandLink = expand_link(ProcDetails),
- title(Port,ExpandLink,"StackDump"),
-
- Unknown = contents(Port,"proc_details?pid=<0.9999.0>"),
- "Could not find process: <0.9999.0>" = title(Unknown).
-
-expand_link(Html) ->
- case Html of
- "<B>StackDump</B></TD><TD COLSPAN=3><A HREF=\"./" ++ Rest ->
- string:sub_word(Rest,1,$");
- [_H|T] ->
- expand_link(T)
- end.
-
-
-port_details(Port) ->
- Port0 = contents(Port,"port?port=Port<0.0>"),
- Port1 = contents(Port,"port?port=Port<0.1>"),
- case title(Port0) of
- "#Port<0.0>" -> % R16 or later
- "Could not find port: #Port<0.1>" = title(Port1);
- "Could not find port: #Port<0.0>" -> % R15 or earlier
- "#Port<0.1>" = title(Port1)
- end.
-
-is_truncated(File) ->
- case filename:extension(filename:rootname(File)) of
- ".trunc" -> true;
- _ -> false
- end.
-
+lookat_all_pids([]) ->
+ ok;
+lookat_all_pids([#proc{pid=Pid0}|Procs]) ->
+ Pid = pid_to_list(Pid0),
+ {ok,_ProcDetails=#proc{},_ProcTW} = crashdump_viewer:proc_details(Pid),
+ {ok,_Ets,_EtsTW} = crashdump_viewer:ets_tables(Pid),
+ {ok,_Timers,_TimersTW} = crashdump_viewer:timers(Pid),
+ lookat_all_pids(Procs).
+
+lookat_all_ports([]) ->
+ ok;
+lookat_all_ports([#port{id=Port0}|Procs]) ->
+ Port = cdv_port_cb:format(Port0),
+ {ok,_PortDetails=#port{},_PortTW} = crashdump_viewer:port(Port),
+ lookat_all_ports(Procs).
+
+lookat_all_mods([]) ->
+ ok;
+lookat_all_mods([#loaded_mod{mod=ModId}|Mods]) ->
+ ModName = cdv_mod_cb:format(ModId),
+ {ok,_Mod=#loaded_mod{},_ModTW} = crashdump_viewer:loaded_mod_details(ModName),
+ lookat_all_mods(Mods).
+
+lookat_all_nodes([]) ->
+ ok;
+lookat_all_nodes([#nod{channel=Channel0}|Nodes]) ->
+ Channel = integer_to_list(Channel0),
+ {ok,_Node=#nod{},_NodeTW} = crashdump_viewer:node_info(Channel),
+ lookat_all_nodes(Nodes).
%%%-----------------------------------------------------------------
%%%
@@ -629,22 +404,13 @@ create_dumps(DataDir,Rels) ->
create_dumps(DataDir,[Rel|Rels],Acc) ->
Fun = fun() -> do_create_dumps(DataDir,Rel) end,
Pa = filename:dirname(code:which(?MODULE)),
- {SlAllocDumps,Dumps,DosDump} =
+ {Dumps,DosDump} =
?t:run_on_shielded_node(Fun, compat_rel(Rel) ++ "-pa \"" ++ Pa ++ "\""),
- create_dumps(DataDir,Rels,SlAllocDumps ++ Dumps ++ Acc ++ DosDump);
+ create_dumps(DataDir,Rels,Dumps ++ Acc ++ DosDump);
create_dumps(_DataDir,[],Acc) ->
Acc.
do_create_dumps(DataDir,Rel) ->
- SlAllocDumps =
- case lists:member(Rel,?sl_alloc_vsns) of
- true ->
- [dump_with_args(DataDir,Rel,"no_sl_alloc","+Se false"),
- dump_with_args(DataDir,Rel,"sl_alloc_1","+Se true +Sr 1"),
- dump_with_args(DataDir,Rel,"sl_alloc_2","+Se true +Sr 2")];
- false ->
- []
- end,
CD1 = full_dist_dump(DataDir,Rel),
CD2 = dump_with_args(DataDir,Rel,"port_is_unix_fd","-oldshell"),
DosDump =
@@ -656,9 +422,9 @@ do_create_dumps(DataDir,Rel) ->
current ->
CD3 = dump_with_args(DataDir,Rel,"instr","+Mim true"),
CD4 = dump_with_strange_module_name(DataDir,Rel,"strangemodname"),
- {SlAllocDumps, [CD1,CD2,CD3,CD4], DosDump};
+ {[CD1,CD2,CD3,CD4], DosDump};
_ ->
- {SlAllocDumps, [CD1,CD2], DosDump}
+ {[CD1,CD2], DosDump}
end.
@@ -674,23 +440,17 @@ full_dist_dump(DataDir,Rel) ->
{ok,N4} = ?t:start_node(n4,peer,Opt ++ [{args,"-hidden " ++ Pz}]),
Creator = self(),
- HelperMod = crashdump_helper,
-
- P1 = rpc:call(N1,HelperMod,n1_proc,[N2,Creator]),
- P2 = rpc:call(N2,HelperMod,remote_proc,[P1,Creator]),
- P3 = rpc:call(N3,HelperMod,remote_proc,[P1,Creator]),
- P4 = rpc:call(N4,HelperMod,remote_proc,[P1,Creator]),
+ P1 = rpc:call(N1,?helper_mod,n1_proc,[N2,Creator]),
+ P2 = rpc:call(N2,?helper_mod,remote_proc,[P1,Creator]),
+ P3 = rpc:call(N3,?helper_mod,remote_proc,[P1,Creator]),
+ P4 = rpc:call(N4,?helper_mod,remote_proc,[P1,Creator]),
get_response(P2),
get_response(P3),
get_response(P4),
get_response(P1),
- L = lists:seq(0,255),
- BigMsg = {message,list_to_binary(L),L},
- Port = hd(erlang:ports()),
- {aaaaaaaa,N1} ! {short,message,1,2.5,"hello world",Port,{}},
- {aaaaaaaa,N1} ! BigMsg,
+ {aaaaaaaa,N1} ! {hello,from,other,node}, % distribution message
?t:stop_node(N3),
DumpName = "full_dist",
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
deleted file mode 100644
index 921c27bd0e..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.100atoms
+++ /dev/null
@@ -1,13135 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
-zombies
-http_content_length
-http_content_type
-'-procs_summary_body/5-fun-0-'
-'-expanded_memory_body/2-fun-0-'
-'-expanded_memory_body/2-fun-1-'
-'-expanded_memory_body/2-fun-2-'
-'-ports_body/3-fun-0-'
-'-ets_tables_body/4-fun-0-'
-'-internal_ets_tables_table/1-fun-0-'
-'-timers_body/3-fun-0-'
-'-make_nodes_table/2-fun-0-'
-'-loaded_mods_body/5-fun-0-'
-'-funs_body/3-fun-0-'
-'-memory_body/3-fun-0-'
-'-allocated_areas_body/3-fun-0-'
-'-allocator_info_body/3-fun-0-'
-'-allocator_info_body/3-fun-1-'
-'-allocator_info_body/3-fun-2-'
-'-hash_tables_body/3-fun-0-'
-'-index_tables_body/3-fun-0-'
-enter_write_file
-replace_insrt
-'$insrt'
-special
-initial
-pretty_format
-heading
-to_gt_noreverse
-to_gt
-href_proc_port
-br
-font
-h2
-h1
-img
-href
-pre
-em
-td
-th
-tr
-frame
-frameset
-html_header
-index_tables_table
-index_tables_body
-hash_tables_table
-hash_tables_body
-allocator_info_body \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
deleted file mode 100644
index ce3e5d8228..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.250atoms
+++ /dev/null
@@ -1,13285 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
-zombies
-http_content_length
-http_content_type
-'-procs_summary_body/5-fun-0-'
-'-expanded_memory_body/2-fun-0-'
-'-expanded_memory_body/2-fun-1-'
-'-expanded_memory_body/2-fun-2-'
-'-ports_body/3-fun-0-'
-'-ets_tables_body/4-fun-0-'
-'-internal_ets_tables_table/1-fun-0-'
-'-timers_body/3-fun-0-'
-'-make_nodes_table/2-fun-0-'
-'-loaded_mods_body/5-fun-0-'
-'-funs_body/3-fun-0-'
-'-memory_body/3-fun-0-'
-'-allocated_areas_body/3-fun-0-'
-'-allocator_info_body/3-fun-0-'
-'-allocator_info_body/3-fun-1-'
-'-allocator_info_body/3-fun-2-'
-'-hash_tables_body/3-fun-0-'
-'-index_tables_body/3-fun-0-'
-enter_write_file
-replace_insrt
-'$insrt'
-special
-initial
-pretty_format
-heading
-to_gt_noreverse
-to_gt
-href_proc_port
-br
-font
-h2
-h1
-img
-href
-pre
-em
-td
-th
-tr
-frame
-frameset
-html_header
-index_tables_table
-index_tables_body
-hash_tables_table
-hash_tables_body
-allocator_info_body
-allocated_areas_table
-allocated_areas_body
-memory_table
-memory_body
-atoms_body
-funs_table
-funs_body
-loaded_mod_details_body
-loaded_mods_table
-loaded_mods_body
-format_extra_info
-format_links_and_monitors
-to_end_par
-break_lines_creation
-maybe_refcount
-nodes_table_row
-nodes_table_heading
-make_nodes_table
-nodes_body
-timers_table
-timers_body
-internal_ets_tables_table1
-internal_ets_tables_table
-ets_tables_table
-ets_tables_body
-ports_table
-ports_body
-expanded_binary_body
-dict_table
-stackdump_table
-msgq_table
-expanded_memory_body
-link_to_read_memory
-display_or_link_to_expand
-proc_details_body
-procs_summary_table
-summary_table_head
-procs_summary_body
-pretty_info_body
-info_body
-error_body
-general_info_body
-format_title
-format_picture
-format_item
-arentState
-format_items
-menu_body
-filename_body
-start_page_frameset
-get_translated_filename_frame_body
-read_file_frame_body
-welcome_body
-http_
-http_te
-http_connection
-http_if_modified_since
-http_referer
-http_accept_encoding
-http_accept
-http_host
-http_user_agent
-'-create_header1/3-fun-0-'
-send_response_old
-transform
-mapfilter
-create_header1
-accept_ranges
-cache_control
-pragma
-trailer
-etag
-retry_after
-content_encoding
-content_language
-content_location
-content_MD5
-content_range
-expires
-transfer_encoding
-get_connection
-bad_args
-send_header
-get_body
-traverse_modules
-formatAbsoluteURI
-removeServer
-formatRequestUri
-tagup_header
-verify_request
-split_lines
-find_content_type
-maybe_remove_nl
-get_persistens
-df
-dm
-dy
-year_day_to_date2
-year_day_to_date
-dty
-day_to_year
-valid_date1
-valid_date
-universal_time_to_local_time
-time_to_seconds
-seconds_to_time
-seconds_to_daystime
-now_to_local_time
-now_to_universal_time
-now_to_datetime
-last_day_of_the_month1
-last_day_of_the_month
-is_leap_year1
-is_leap_year
-gregorian_seconds_to_datetime
-gregorian_days_to_date
-date_to_gregorian_days
-'-parse_trailers/1-lc^0/1-0-'
-'-read_trailer_end/4-fun-0-'
-'-read_trailer_end/4-lc^0/1-0-'
-'-remove_newline/1-fun-0-'
-remove_newline
-close_sleep
-unknown_size
-send_read_status
-handle_read_error
-transfer_coding
-expect
-getTrailerField
-read_trailer
-get_chunk_size
-read_chunked_entity_body
-read_chunk_trailer
-read_trailer_end
-parse_trailers
-parse_chunk_trailer
-body_to_big
-parse_chunked_entity_body
-parse_chunk_size
-read_chunked_entity
-etimedout
-body_too_long
-unknown_coding
-chunked
-read_entity_body2
-no_expect_header
-http_1_0_expect_header
-read_entity_body
-header_too_long
-hsplit \ No newline at end of file
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
deleted file mode 100644
index 78e301a6c7..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.50atoms
+++ /dev/null
@@ -1,13085 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
-http_cache_control
-copy_word
-drop_line
-copy_line
-write_rest_of_line
-drop_to_empty_line
-read_to_empty_line_reverse
-set_pos
-read_line_backwards
-jumped
-jump_to_empty_line_or_eof
-get_pos
-translate_atoms
-translate_fun
-translate_funs
-translate_loaded_modules2
-translate_loaded_modules_totals
-translate_loaded_modules
-translate_links
-get_all_creations
-translate_node_info2
-translate_node_info
-translate_dist_info2
-translate_dist_info
-get_msg
-translate_timers
-translate_ets
-translate_ets_tables
-do_translate_sl_alloc_r7_r8
-translate_sl_alloc_r7_r8
-translate_sl_alloc_line
-do_translate_sl_alloc
-translate_sl_alloc
-translate_memory_and_allocated_area_r9b
-translate_allocated_areas
-translate_internal_table_line
-translate_index_table
-translate_hash_table
-translate_internal_tables
-translate_ports
-write_last_calls
-write_msg_q_stuff
-translate_process
-translate_processes
-erts_vsn
-translate_summary
-'Send'
-erl_crash_dump
-internal_tables
-mods
diff --git a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms b/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
deleted file mode 100644
index 9f20ef3e44..0000000000
--- a/lib/observer/test/crashdump_viewer_SUITE_data/r10b_dump.trunc.noatoms
+++ /dev/null
@@ -1,13035 +0,0 @@
-=erl_crash_dump:0.1
-Wed Apr 21 13:22:44 2004
-Slogan: eheap_alloc: Cannot allocate 785672 bytes of memory (of type "heap").
-System version: Erlang (BEAM) emulator version 5.4 [source] [hipe] [threads:0]
-Compiled: Thu Dec 18 14:07:45 2003
-Atoms: 5614
-=memory
-total: 653336887
-processes: 1768396
-processes_used: 1765460
-system: 651568491
-atom: 244837
-atom_used: 237116
-binary: 648618369
-code: 2158413
-ets: 225620
-=hash_table:atom_tab
-size: 4813
-used: 3304
-objs: 5614
-depth: 7
-=index_table:atom_tab
-size: 5700
-limit: 1048576
-used: 5614
-rate: 100
-=hash_table:module_code
-size: 97
-used: 69
-objs: 107
-depth: 5
-=index_table:module_code
-size: 110
-limit: 65536
-used: 107
-rate: 10
-=hash_table:export_list
-size: 2411
-used: 1674
-objs: 2843
-depth: 6
-=index_table:export_list
-size: 2900
-limit: 65536
-used: 2843
-rate: 100
-=hash_table:process_reg
-size: 47
-used: 16
-objs: 23
-depth: 3
-=hash_table:fun_table
-size: 397
-used: 261
-objs: 400
-depth: 4
-=hash_table:node_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=hash_table:dist_table
-size: 11
-used: 1
-objs: 1
-depth: 1
-=allocated_areas
-processes: 1765460 1768396
-ets: 225620
-sys_misc: 24634
-static: 295033
-atom_space: 65544 57967
-binary: 648618369
-atom_table: 42141
-module_table: 920
-export_table: 21336
-register_table: 252
-fun_table: 1650
-module_refs: 1024
-loaded_code: 1968915
-dist_table: 159
-node_table: 131
-bits_bufs_size: 19
-bif_timer: 13392
-link_lh: 0
-dist_buf: 0
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:sys_alloc
-option e: true
-option m: libc
-=allocator:temp_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 90
-option rsbcmt: 80
-option mmbcs: 65536
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: af
-mbcs blocks: 0 9 9
-mbcs blocks size: 0 35376 35376
-mbcs carriers: 1 1 1
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 65568 65568 65568
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 65568
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-temp_alloc calls: 6155
-temp_free calls: 6155
-temp_realloc calls: 29
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 1
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:sl_alloc
-option e: false
-=allocator:std_alloc
-option e: false
-=allocator:ll_alloc
-versions: 0.9 2.1
-option e: true
-option sbct: 4294967295
-option asbcst: 0
-option rsbcst: 0
-option rsbcmt: 0
-option mmbcs: 2097152
-option mmsbc: 0
-option mmmbc: 0
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option as: aobf
-mbcs blocks: 592 592 592
-mbcs blocks size: 2838520 2863304 2863304
-mbcs carriers: 2 2 2
-mbcs mseg carriers: 0
-mbcs sys_alloc carriers: 2
-mbcs carriers size: 3145760 3145760 3145760
-mbcs mseg carriers size: 0
-mbcs sys_alloc carriers size: 3145760
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-ll_alloc calls: 592
-ll_free calls: 0
-ll_realloc calls: 235
-mseg_alloc calls: 0
-mseg_dealloc calls: 0
-mseg_realloc calls: 0
-sys_alloc calls: 2
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:eheap_alloc
-versions: 2.1 2.1
-option e: true
-option sbct: 524288
-option asbcst: 4145152
-option rsbcst: 50
-option rsbcmt: 80
-option mmbcs: 524288
-option mmsbc: 256
-option mmmbc: 10
-option lmbcs: 5242880
-option smbcs: 1048576
-option mbcgs: 10
-option mbsd: 3
-option as: gf
-mbcs blocks: 56 102 102
-mbcs blocks size: 833280 1638920 1638920
-mbcs carriers: 2 3 3
-mbcs mseg carriers: 1
-mbcs sys_alloc carriers: 1
-mbcs carriers size: 1998880 3047456 3047456
-mbcs mseg carriers size: 1474560
-mbcs sys_alloc carriers size: 524320
-sbcs blocks: 0 0 0
-sbcs blocks size: 0 0 0
-sbcs carriers: 0 0 0
-sbcs mseg carriers: 0
-sbcs sys_alloc carriers: 0
-sbcs carriers size: 0 0 0
-sbcs mseg carriers size: 0
-sbcs sys_alloc carriers size: 0
-eheap_alloc calls: 6971
-eheap_free calls: 6914
-eheap_realloc calls: 461
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-sys_alloc calls: 3
-sys_free calls: 0
-sys_realloc calls: 0
-=allocator:binary_alloc
-option e: false
-=allocator:ets_alloc
-option e: false
-=allocator:fix_alloc
-option e: true
-proc: 15080 13576
-atom_entry: 137152 137008
-export_entry: 138448 137632
-module_entry: 4872 4352
-reg_proc: 1000 592
-link_nh: 2464 2080
-link_sh: 832 192
-proc_list: 24 24
-fun_entry: 22584 22584
-db_tab: 1632 1632
-=allocator:mseg_alloc
-version: 0.9
-option amcbf: 4194304
-option rmcbf: 20
-option mcs: 5
-option cci: 1000
-cached_segments: 0
-cache_hits: 13
-segments: 2
-segments_watermark: 2
-mseg_alloc calls: 16
-mseg_dealloc calls: 14
-mseg_realloc calls: 0
-mseg_create calls: 4
-mseg_destroy calls: 1
-mseg_clear_cache calls: 6
-mseg_check_cache calls: 2
-=allocator:alloc_util
-option mmc: 1024
-option ycs: 1048576
-=allocator:instr
-option m: false
-option s: false
-option t: false
-=proc:<0.0.0>
-State: Waiting
-Name: init
-Spawned as: otp_ring0:start/2
-Spawned by: []
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.5.0>,<0.4.0>,<0.2.0>]
-Reductions: 3851
-Stack+heap: 377
-OldHeap: 610
-Heap unused: 53
-OldHeap unused: 610
-Program counter: 0x1f496c (init:loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.2.0>
-State: Waiting
-Name: erl_prim_loader
-Spawned as: erlang:apply/2
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.0.0>,#Port<0.2>]
-Reductions: 201036
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 923
-OldHeap unused: 987
-Program counter: 0x20cc94 (erl_prim_loader:loop/3 + 52)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.4.0>
-State: Waiting
-Name: error_logger
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.0.0>]
-Reductions: 296
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 851
-OldHeap unused: 0
-Program counter: 0x21f5b8 (gen_event:loop/4 + 40)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.5.0>
-State: Waiting
-Name: application_controller
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.1.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.7.0>,<0.0.0>]
-Reductions: 1508
-Stack+heap: 1597
-OldHeap: 0
-Heap unused: 835
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.7.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.6.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.8.0>,<0.5.0>]
-Reductions: 23
-Stack+heap: 377
-OldHeap: 0
-Heap unused: 79
-OldHeap unused: 0
-Program counter: 0x248d04 (application_master:main_loop/2 + 28)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.8.0>
-State: Waiting
-Spawned as: application_master:start_it/4
-Spawned by: <0.7.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>,<0.7.0>]
-Reductions: 91
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 177
-OldHeap unused: 0
-Program counter: 0x24a26c (application_master:loop_it/4 + 40)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.9.0>
-State: Waiting
-Name: kernel_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.8.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.24.0>,<0.23.0>,<0.19.0>,<0.18.0>,<0.17.0>,<0.16.0>,<0.15.0>,<0.14.0>,<0.11.0>,<0.10.0>,<0.8.0>]
-Reductions: 7402
-Stack+heap: 610
-OldHeap: 987
-Heap unused: 311
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.10.0>
-State: Waiting
-Name: rex
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 44
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 144
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.11.0>
-State: Waiting
-Name: global_name_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.13.0>,<0.12.0>,<0.9.0>]
-Reductions: 47
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 98
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.12.0>
-State: Waiting
-Spawned as: global:init_the_locker/1
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 3
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 227
-OldHeap unused: 0
-Program counter: 0x261340 (global:loop_the_locker/2 + 92)
-CP: 0x261184 (global:init_the_locker/1 + 112)
-arity = 0
-=proc:<0.13.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.11.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.11.0>]
-Reductions: 4
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 221
-OldHeap unused: 0
-Program counter: 0x265288 (global:collect_deletions/2 + 76)
-CP: 0x2651ac (global:loop_the_deleter/1 + 36)
-arity = 0
-=proc:<0.14.0>
-State: Waiting
-Name: inet_db
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 376
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 30
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.15.0>
-State: Waiting
-Name: global_group
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 71
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 92
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.16.0>
-State: Waiting
-Name: file_server_2
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 119
-Link list: [{from,<0.17.0>,#Ref<0.0.0.22>},#Port<0.4>,<0.9.0>]
-Reductions: 83605
-Stack+heap: 4181
-OldHeap: 4181
-Heap unused: 1720
-OldHeap unused: 4181
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.17.0>
-State: Waiting
-Name: file_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.16.0>,#Ref<0.0.0.22>},<0.9.0>]
-Reductions: 12
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 207
-OldHeap unused: 0
-Program counter: 0x2a18e8 (old_file_server:relay_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.18.0>
-State: Waiting
-Name: code_server
-Spawned as: erlang:apply/2
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:07 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 108900
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 4389
-OldHeap unused: 6765
-Program counter: 0x2a6e64 (code_server:loop/1 + 64)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.19.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.21.0>,<0.9.0>]
-Reductions: 74
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 180
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.20.0>
-State: Waiting
-Spawned as: user_drv:server/2
-Spawned by: <0.19.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.22.0>,<0.21.0>,#Port<0.72>]
-Reductions: 596
-Stack+heap: 233
-OldHeap: 377
-Heap unused: 214
-OldHeap unused: 377
-Program counter: 0x2ca4e0 (user_drv:server_loop/5 + 56)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.21.0>
-State: Waiting
-Name: user
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.4.0>,<0.19.0>,<0.20.0>]
-Reductions: 26
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 202
-OldHeap unused: 0
-Program counter: 0x2cd9d8 (group:server_loop/3 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.22.0>
-State: Waiting
-Spawned as: group:server/2
-Spawned by: <0.20.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{from,<0.49.0>,#Ref<0.0.0.307>},<0.25.0>,<0.20.0>]
-Reductions: 1244
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 40
-OldHeap unused: 233
-Program counter: 0x2cf238 (group:get_line1/3 + 1652)
-CP: 0x2cf230 (group:get_line1/3 + 1644)
-arity = 0
-=proc:<0.23.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.9.0>]
-Reductions: 45
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 63
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.24.0>
-State: Waiting
-Name: kernel_safe_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.9.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.31.0>,<0.9.0>]
-Reductions: 133
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 198
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.25.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.22.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.49.0>,<0.27.0>,<0.22.0>]
-Reductions: 161
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 169
-OldHeap unused: 0
-Program counter: 0x2e0d00 (shell:get_command1/4 + 40)
-CP: 0x2e06fc (shell:server_loop/6 + 140)
-arity = 0
-=proc:<0.27.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:08 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.25.0>]
-Reductions: 506
-Stack+heap: 4181
-OldHeap: 0
-Heap unused: 1131
-OldHeap unused: 0
-Program counter: 0x2e2bbc (shell:eval_loop/2 + 32)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.31.0>
-State: Waiting
-Name: inet_gethost_native_sup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.24.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.32.0>,<0.24.0>]
-Reductions: 49
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 87
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.32.0>
-State: Waiting
-Name: inet_gethost_native
-Spawned as: inet_gethost_native:server_init/2
-Spawned by: <0.31.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 118
-Link list: [#Port<0.105>,<0.31.0>]
-Reductions: 65
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 13
-OldHeap unused: 0
-Program counter: 0x4ad840 (inet_gethost_native:main_loop/1 + 20)
-CP: 0x156f90 (<terminate process normally>)
-arity = 0
-=proc:<0.33.0>
-State: Waiting
-Name: web_tool
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.27.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.41.0>]
-Reductions: 131773
-Stack+heap: 6765
-OldHeap: 6765
-Heap unused: 2941
-OldHeap unused: 6765
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.41.0>
-State: Waiting
-Name: websup
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.48.0>,<0.33.0>]
-Reductions: 118
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 205
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.43.0>
-State: Waiting
-Name: httpd_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.33.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.46.0>,<0.45.0>,<0.44.0>]
-Reductions: 1220
-Stack+heap: 6765
-OldHeap: 0
-Heap unused: 277
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.44.0>
-State: Waiting
-Name: httpd_acc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.47.0>,<0.43.0>]
-Reductions: 147
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 77
-OldHeap unused: 233
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.45.0>
-State: Waiting
-Name: httpd_misc_sup__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 52
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 80
-OldHeap unused: 0
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.46.0>
-State: Waiting
-Name: httpd__127_0_0_1__8888
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.43.0>
-Started: Wed Apr 21 13:22:17 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.43.0>]
-Reductions: 2905
-Stack+heap: 6765
-OldHeap: 10946
-Heap unused: 138
-OldHeap unused: 10946
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.47.0>
-State: Waiting
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.44.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [#Port<0.161>,#Port<0.141>,<0.44.0>]
-Reductions: 874
-Stack+heap: 233
-OldHeap: 233
-Heap unused: 190
-OldHeap unused: 233
-Program counter: 0x1fe798 (prim_inet:accept0/2 + 96)
-CP: 0x1feb04 (prim_inet:async_accept/2 + 380)
-arity = 0
-=proc:<0.48.0>
-State: Waiting
-Name: crashdump_viewer_server
-Spawned as: proc_lib:init_p/5
-Spawned by: <0.41.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [<0.56.0>,<0.41.0>]
-Reductions: 1913
-Stack+heap: 987
-OldHeap: 987
-Heap unused: 524
-OldHeap unused: 987
-Program counter: 0x239d50 (gen_server:loop/6 + 52)
-CP: 0x225860 (proc_lib:init_p/5 + 164)
-arity = 0
-=proc:<0.49.0>
-State: Waiting
-Spawned as: erlang:apply/2
-Spawned by: <0.25.0>
-Started: Wed Apr 21 13:22:18 2004
-Message queue length: 0
-Number of heap fragments: 0
-Heap fragment data: 0
-Link list: [{to,<0.22.0>,#Ref<0.0.0.307>},<0.25.0>]
-Reductions: 15
-Stack+heap: 233
-OldHeap: 0
-Heap unused: 190
-OldHeap unused: 0
-Program counter: 0x301d58 (io:wait_io_mon_reply/2 + 28)
-CP: 0x30174c (io:parse_erl_exprs/3 + 92)
-arity = 0
-=proc:<0.56.0>
-State: Garbing
-Spawned as: erlang:apply/2
-Last scheduled in for: erlang:garbage_collect/0
-Spawned by: <0.48.0>
-Started: Wed Apr 21 13:22:27 2004
-Message queue length: 0
-Number of heap fragments: 1
-Heap fragment data: 121
-Link list: [#Port<0.158>,#Port<0.157>,<0.48.0>]
-Reductions: 2420470
-Stack+heap: 121393
-OldHeap: 0
-Heap unused: 22172
-OldHeap unused: 0
-New heap start: FE5768E0
-New heap top: FE5D7734
-Stack top: FE5ED130
-Stack end: FE5ED1A4
-Old heap start: 0
-Old heap top: 0
-Old heap end: 0
-Program counter: 0x1a4980 (unknown function)
-CP: 0x20710c (prim_file:read/2 + 436)
-=port:#Port<0.1>
-Slot: 1
-Connected: #Port<0.0>
-Port controls linked-in driver: async
-=port:#Port<0.2>
-Slot: 2
-Connected: <0.2.0>
-Links: <0.2.0>
-Port controls linked-in driver: efile
-=port:#Port<0.4>
-Slot: 4
-Connected: <0.16.0>
-Links: <0.16.0>
-Port controls linked-in driver: efile
-=port:#Port<0.72>
-Slot: 72
-Connected: <0.20.0>
-Links: <0.20.0>
-Port controls linked-in driver: tty_sl -c -e
-=port:#Port<0.105>
-Slot: 105
-Connected: <0.32.0>
-Links: <0.32.0>
-Port controls external process: inet_gethost 4
-=port:#Port<0.141>
-Slot: 141
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=port:#Port<0.157>
-Slot: 157
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.158>
-Slot: 158
-Connected: <0.56.0>
-Links: <0.56.0>
-Port controls linked-in driver: efile
-=port:#Port<0.161>
-Slot: 161
-Connected: <0.47.0>
-Links: <0.47.0>
-Port controls linked-in driver: tcp_inet
-=ets:<0.18.0>
-Slot: 9
-Table: 9
-Name: code
-Buckets: 256
-Objects: 289
-Words: 14108
-=ets:<0.18.0>
-Slot: 10
-Table: 10
-Name: code_names
-Buckets: 256
-Objects: 47
-Words: 4334
-=ets:<0.32.0>
-Slot: 11
-Table: 11
-Name: ign_requests
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.32.0>
-Slot: 12
-Table: 12
-Name: ign_req_index
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.33.0>
-Slot: 13
-Table: 13
-Name: app_data
-Buckets: 256
-Objects: 7
-Words: 952
-=ets:<0.46.0>
-Slot: 15
-Table: 15
-Name: httpd_mime__127_0_0_1__8888
-Buckets: 256
-Objects: 105
-Words: 5742
-=ets:<0.11.0>
-Slot: 84
-Table: global_names
-Name: global_names
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 95
-Table: global_locks
-Name: global_locks
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.11.0>
-Slot: 96
-Table: global_names_ext
-Name: global_names_ext
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.14.0>
-Slot: 316
-Table: inet_cache
-Name: inet_cache
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 340
-Table: cdv_menu_table
-Name: cdv_menu_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 341
-Table: cdv_dump_index_table
-Name: cdv_dump_index_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.48.0>
-Slot: 342
-Table: cdv_decode_heap_table
-Name: cdv_decode_heap_table
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.16.0>
-Slot: 780
-Table: file_io_servers
-Name: file_io_servers
-Buckets: 256
-Objects: 0
-Words: 277
-=ets:<0.46.0>
-Slot: 984
-Table: httpd_conf__127_0_0_1__8888
-Name: httpd_conf__127_0_0_1__8888
-Buckets: 256
-Objects: 17
-Words: 1176
-=ets:<0.14.0>
-Slot: 1342
-Table: inet_hosts
-Name: inet_hosts
-Buckets: 256
-Objects: 4
-Words: 421
-=ets:<0.14.0>
-Slot: 1362
-Table: inet_db
-Name: inet_db
-Buckets: 256
-Objects: 20
-Words: 671
-=ets:<0.5.0>
-Slot: 1655
-Table: ac_tab
-Name: ac_tab
-Buckets: 256
-Objects: 6
-Words: 843
-=timer:<0.14.0>
-Message: refresh_timeout
-Time left: 3565692 ms
-=node:'nonode@nohost'
-=no_distribution
-=loaded_modules
-Current code: 1968915
-Old code: 0
-=mod:otp_ring0
-Current size: 489
-=mod:init
-Current size: 30110
-=mod:prim_inet
-Current size: 35532
-=mod:prim_file
-Current size: 24965
-=mod:erl_prim_loader
-Current size: 19607
-=mod:erlang
-Current size: 11137
-=mod:error_handler
-Current size: 2389
-Current attributes: 836C00000001680264000376736E6C000000016E100030769A34345F26EF6D3433254FF2AE576A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161216802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F68616E646C65722E65726C6A
-=mod:heart
-Current size: 6687
-Current attributes: 836C00000001680264000376736E6C000000016E10003094F7BECF345494DDBB4D7186E694186A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261086802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F68656172742E65726C6A
-=mod:error_logger
-Current size: 7051
-Current attributes: 836C00000001680264000376736E6C000000016E10004E3347F841DEAE2EB6A74389E6E127146A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161246802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6572726F725F6C6F676765722E65726C6A
-=mod:gen_event
-Current size: 18288
-Current attributes: 836C00000001680264000376736E6C000000016E1000336F22DF1EA75E0EA4AE65D3B8C34F946A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61346802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F6576656E742E65726C6A
-=mod:gen
-Current size: 7129
-Current attributes: 836C00000001680264000376736E6C000000016E10007BE6AEB66EF48D8B33323C89C9936A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61316802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E2E65726C6A
-=mod:proc_lib
-Current size: 11658
-Current attributes: 836C00000001680264000376736E6C000000016E10005C589A8C9BD2E1F2E895E765CAE983406A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E612D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F70726F635F6C69622E65726C6A
-=mod:application_controller
-Current size: 55249
-Current attributes: 836C00000002680264000376736E6C000000016E10003372E1AB0410565065FA086086A721316A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061246802640006736F757263656B003D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F636F6E74726F6C6C65722E65726C6A
-=mod:gen_server
-Current size: 18728
-Current attributes: 836C00000001680264000376736E6C000000016E10004C5E93533036DAC7698FC4112F59CF236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61396802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67656E5F7365727665722E65726C6A
-=mod:sys
-Current size: 11589
-Current attributes: 836C00000001680264000376736E6C000000016E1000E12B0E8267551204BD5924BAB9629ADF6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61176802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7379732E65726C6A
-=mod:lists
-Current size: 18638
-Current attributes: 836C00000002680264000376736E6C000000016E10001E95B32C30E4CDAF0BDD1ABA58CBB5F36A680264000A646570726563617465646C0000000B68026400066B65796D617061046802640003616C6C61036802640003616E79610368026400036D617061036802640007666C61746D617061036802640005666F6C646C61046802640005666F6C64726104680264000666696C746572610368026400086D6170666F6C646C610468026400086D6170666F6C647261046802640007666F726561636861036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61116802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374732E65726C6A
-=mod:application
-Current size: 2666
-Current attributes: 836C00000001680264000376736E6C000000016E1000C0C5A7B67B306300FEFF9D91AA50ECB36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130611F6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E2E65726C6A
-=mod:application_master
-Current size: 10912
-Current attributes: 836C00000001680264000376736E6C000000016E1000360420F5CEB80AD7DD51B3A8A0E2AFA26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061266802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6170706C69636174696F6E5F6D61737465722E65726C6A
-=mod:kernel
-Current size: 7639
-Current attributes: 836C00000002680264000376736E6C000000016E10004D418ACCB0F948D4D3CA6B9A81B462746A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261336802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C2E65726C6A
-=mod:supervisor
-Current size: 24469
-Current attributes: 836C00000002680264000376736E6C000000016E1000979F65727577135484BE0892A35087CC6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61126802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F722E65726C6A
-=mod:rpc
-Current size: 14539
-Current attributes: 836C00000002680264000376736E6C000000016E10008C5D6242D36B3201E3B11E82D5E1581E6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133610F6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7270632E65726C6A
-=mod:gb_trees
-Current size: 8274
-Current attributes: 836C00000001680264000376736E6C000000016E1000094BEFDE7B866EF2CB6FCD895AC2EE056A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F67625F74726565732E65726C6A
-=mod:global
-Current size: 40753
-Current attributes: 836C00000002680264000376736E6C000000016E10001D02C89BDE6CB2052F099894683C14CA6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161386802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C2E65726C6A
-=mod:inet_db
-Current size: 34555
-Current attributes: 836C00000001680264000376736E6C000000016E1000C1CF6A6F2E83D4EBC23D2CCECBF376226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132611A6802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F64622E65726C6A
-=mod:inet_config
-Current size: 13575
-Current attributes: 836C00000001680264000376736E6C000000016E1000650F6571C03BC9C16BB7973A747565066A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261166802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F636F6E6669672E65726C6A
-=mod:os
-Current size: 5997
-Current attributes: 836C00000001680264000376736E6C000000016E100017144CD766A604A9DFBA0B58C8FCA78B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361056802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F732E65726C6A
-=mod:inet_udp
-Current size: 2451
-Current attributes: 836C00000001680264000376736E6C000000016E1000ACB163E87A687A6683B50B331C6E289B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261306802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7564702E65726C6A
-=mod:inet
-Current size: 28288
-Current attributes: 836C00000001680264000376736E6C000000016E10009B9AD400F0BAF6AAF17A4788A4EFF11E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132610C6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65742E65726C6A
-=mod:inet_parse
-Current size: 21928
-Current attributes: 836C00000001680264000376736E6C000000016E1000E0E65454C096847749930EDC1C53C80B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261266802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F70617273652E65726C6A
-=mod:filename
-Current size: 17411
-Current attributes: 836C00000001680264000376736E6C000000016E100068085214F459D51A3E08819BF8D7698A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61296802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656E616D652E65726C6A
-=mod:inet_hosts
-Current size: 3745
-Current attributes: 836C00000001680264000376736E6C000000016E1000E7430304E86230057150DEE5D279881F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261226802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F686F7374732E65726C6A
-=mod:erl_distribution
-Current size: 2512
-Current attributes: 836C00000002680264000376736E6C000000016E1000CDE49D63ACA767E0D49679657E99D2046A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161186802640006736F757263656B00372F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F65726C5F646973747269627574696F6E2E65726C6A
-=mod:global_group
-Current size: 30960
-Current attributes: 836C00000002680264000376736E6C000000016E10008ECE759E5920988CA3ACFF34B32F86736A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131613B6802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F676C6F62616C5F67726F75702E65726C6A
-=mod:net_kernel
-Current size: 37648
-Current attributes: 836C00000002680264000376736E6C000000016E1000967CE7DE41F9B39906CCCF3225E6E5286A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361026802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6E65745F6B65726E656C2E65726C6A
-=mod:file_server
-Current size: 8372
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF90906EC6204204AC0A77C4A25B65236A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612D6802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F7365727665722E65726C6A
-=mod:old_file_server
-Current size: 3074
-Current attributes: 836C00000001680264000376736E6C000000016E1000C802085DD76D4EFBA6A8F528FECB94B36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612F6802640006736F757263656B00362F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6F6C645F66696C655F7365727665722E65726C6A
-=mod:code
-Current size: 7419
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE618E3041C8E3807A3719CD5140DF5E6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6130612E6802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64652E65726C6A
-=mod:code_server
-Current size: 30811
-Current attributes: 836C00000001680264000376736E6C000000016E0F00BFB96248C2CA8601B4CB7F543F52E26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061346802640006736F757263656B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F7365727665722E65726C6A
-=mod:code_aux
-Current size: 1736
-Current attributes: 836C00000001680264000376736E6C000000016E10007A90DB53FCCECD52504F20E7A3B6BAE26A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613061316802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F636F64655F6175782E65726C6A
-=mod:packages
-Current size: 3119
-Current attributes: 836C00000001680264000376736E6C000000016E1000044DC8EEB65F178AE23EF2465E1954496A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361076802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F7061636B616765732E65726C6A
-=mod:hipe_unified_loader
-Current size: 37330
-Current attributes: 836C00000001680264000376736E6C000000016E1000DABD57945702E56F4B3AA7B7B19C1D166A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361326802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F756E69666965645F6C6F616465722E65726C6A
-=mod:hipe_sparc_loader
-Current size: 1821
-Current attributes: 836C00000001680264000376736E6C000000016E1000582BC55E9FADFF879C2C45D25A6CB7E56A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F6D61696E6802640001696B00312F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F72746C6802640001696B00332F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F2E2E2F686970652F737061726364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6133612B6802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F686970655F73706172635F6C6F616465722E65726C6A
-=mod:ets
-Current size: 16577
-Current attributes: 836C00000002680264000376736E6C000000016E100033D982AC91129E5FC35E0AC3337A4EB56A680264000A646570726563617465646C0000000168026400086669787461626C6561026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D611C6802640006736F757263656B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6574732E65726C6A
-=mod:lists_sort
-Current size: 38692
-Current attributes: 836C00000001680264000376736E6C000000016E1000E17EC92FA9AA3199DD71701C215044616A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000B68026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736802640006696E6C696E656C0000000468026400096D65726765335F3132610768026400096D65726765335F32316107680264000A726D65726765335F31326107680264000A726D65726765335F323161076A6802640006696E6C696E656C00000004680264000A756D65726765335F31326108680264000A756D65726765335F32316108680264000C72756D65726765335F3132616107680264000C72756D65726765335F31326261086A6802640006696E6C696E656C00000004680264000C6B65796D65726765335F3132610C680264000C6B65796D65726765335F3231610C680264000D726B65796D65726765335F3132610C680264000D726B65796D65726765335F3231610C6A6802640006696E6C696E656C00000006680264000D756B65796D65726765335F3132610D680264000D756B65796D65726765335F3231610D680264000F72756B65796D65726765335F313261610B680264000F72756B65796D65726765335F323161610D680264000F72756B65796D65726765335F313262610D680264000F72756B65796D65726765335F323162610C6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61166802640006736F757263656B00312F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6C697374735F736F72742E65726C6A
-=mod:user_sup
-Current size: 2355
-Current attributes: 836C00000002680264000376736E6C000000016E100074BA860804CB4D60D6908C705E6544BD6A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361246802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F7375702E65726C6A
-=mod:supervisor_bridge
-Current size: 2944
-Current attributes: 836C00000002680264000376736E6C000000016E10001590DDC10CF8A9D09763CDB7479678ED6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61156802640006736F757263656B00382F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F73757065727669736F725F6272696467652E65726C6A
-=mod:user_drv
-Current size: 14630
-Current attributes: 836C00000001680264000376736E6C000000016E1000F29F3B193A1EB1ADA9975D97E51BF0E86A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613361216802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F757365725F6472762E65726C6A
-=mod:group
-Current size: 10165
-Current attributes: 836C00000001680264000376736E6C000000016E1000F6427D0DA330BBFAD5D4C19058516FF36A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261066802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67726F75702E65726C6A
-=mod:io_lib
-Current size: 12601
-Current attributes: 836C00000002680264000376736E6C000000016E10004160DD78F37EE7C72F7C5B6A751DB7F56A680264000A646570726563617465646C0000000468026400047363616E610168026400047363616E610268026400047363616E6103680264000D72657365727665645F776F726461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61036802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69622E65726C6A
-=mod:edlin
-Current size: 18178
-Current attributes: 836C00000001680264000376736E6C000000016E100035D752FCBA8ED7F4D26990EF3E6A1A526A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65646C696E2E65726C6A
-=mod:io_lib_format
-Current size: 16189
-Current attributes: 836C00000001680264000376736E6C000000016E10004F382F327C456F83F33C3D5EBFBD87906A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61066802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F666F726D61742E65726C6A
-=mod:kernel_config
-Current size: 3295
-Current attributes: 836C00000002680264000376736E6C000000016E100077B8EE6C9E95FBBE5DB0371F6DB235226A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261356802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F6B65726E656C5F636F6E6669672E65726C6A
-=mod:shell
-Current size: 22571
-Current attributes: 836C00000001680264000376736E6C000000016E10007D1354325618EB98A5BD4E8F41E6A0226A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F61016802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7368656C6C2E65726C6A
-=mod:error_logger_tty_h
-Current size: 7773
-Current attributes: 836C00000002680264000376736E6C000000016E10001502D55D6C1777F07E2E05CDD91D16986A68026400096265686176696F75726C0000000164000967656E5F6576656E746A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61196802640006736F757263656B00392F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6572726F725F6C6F676765725F7474795F682E65726C6A
-=mod:erl_eval
-Current size: 33481
-Current attributes: 836C00000002680264000376736E6C000000016E1000D06903753C86BBC49A5CBD789CCB09B66A680264000A646570726563617465646C00000004680264000373657161026802640003736571610368026400086172675F6C697374610268026400086172675F6C69737461036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C610D6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6576616C2E65726C6A
-=mod:orddict
-Current size: 4872
-Current attributes: 836C00000002680264000376736E6C000000016E100078DCF69F3949D79BC54168266A3ABF566A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61236802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264646963742E65726C6A
-=mod:c
-Current size: 19555
-Current attributes: 836C00000001680264000376736E6C000000016E10003FACCF5DE16ABBC988ABF0811980C33B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61136802640006736F757263656B00282F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F632E65726C6A
-=mod:io
-Current size: 7417
-Current attributes: 836C00000002680264000376736E6C000000016E1000E2F2A6094B3C3D945865225D0620E7546A680264000A646570726563617465646C00000007680264000B70617273655F65787072736102680264000C7363616E5F65726C5F7365716101680264000C7363616E5F65726C5F7365716102680264000C7363616E5F65726C5F7365716103680264000D70617273655F65726C5F7365716101680264000D70617273655F65726C5F7365716102680264000D70617273655F65726C5F73657161036A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61006802640006736F757263656B00292F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F2E65726C6A
-=mod:file
-Current size: 20795
-Current attributes: 836C00000002680264000376736E6C000000016E1000D291AF77EE8B08B792B7FE99274504506A680264000A646570726563617465646C00000001680264000966696C655F696E666F61016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161276802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C652E65726C6A
-=mod:file_io_server
-Current size: 12071
-Current attributes: 836C00000001680264000376736E6C000000016E1000A5A8C4E2B2646855AD5C617CB216CB966A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6131612A6802640006736F757263656B00352F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F66696C655F696F5F7365727665722E65726C6A
-=mod:erl_scan
-Current size: 21891
-Current attributes: 836C00000001680264000376736E6C000000016E100094F386F0C378B258E5D9CEADD4F03B6A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61116802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F7363616E2E65726C6A
-=mod:erl_parse
-Current size: 161233
-Current attributes: 836C00000001680264000376736E6C000000016E10000E8CBC32C293BFC1FBC721CE918062236A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000968026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F76617273640006696E6C696E656802640004686970656C000000016802640008726567616C6C6F6364000B6C696E6561725F7363616E6A6A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61076802640006736F757263656B00302F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F70617273652E65726C6A
-=mod:erl_lint
-Current size: 73159
-Current attributes: 836C00000001680264000376736E6C000000016E1000D1D2A7D6DDFD1195CB180993C76FD2CD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612C61156802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F65726C5F6C696E742E65726C6A
-=mod:ordsets
-Current size: 3257
-Current attributes: 836C00000002680264000376736E6C000000016E1000FD39D8FD846511128F5670BA28600F676A680264000A646570726563617465646C0000000468026400076E65775F7365746100680264000B7365745F746F5F6C6973746101680264000B6C6973745F746F5F7365746101680264000673756273657461026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61256802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F7264736574732E65726C6A
-=mod:dict
-Current size: 15637
-Current attributes: 836C00000002680264000376736E6C000000016E1000BC846E7EF85045A5D76190CE9B1AE97C6A680264000A646570726563617465646C00000002680264000C646963745F746F5F6C6973746101680264000C6C6973745F746F5F6469637461016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61356802640006736F757263656B002B2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F646963742E65726C6A
-=mod:otp_internal
-Current size: 7133
-Current attributes: 836C00000001680264000376736E6C000000016E1000DC494F64DE590AFC4919DFEB0EB026B66A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61206802640006736F757263656B00332F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F6F74705F696E7465726E616C2E65726C6A
-=mod:user_default
-Current size: 1261
-Current attributes: 836C00000002680264000376736E6C000000016E1000505078ACD9B84D514FC6DA2BE249E6756A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612C61126802640006736F757263656B00222F686F6D652F736972692F65726C616E672F757365725F64656661756C742E65726C6A
-=mod:tt
-Current size: 2959
-Current attributes: 836C00000002680264000376736E6C000000016E10001D71FD5A55D3BCBF06BFEDF2426C3C386A6802640006617574686F726C0000000164001765656973686E6E406565692E6572696373736F6E2E73656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000368026400036377646B00112F686F6D652F736972692F65726C616E6768026400066F75746469726B00112F686F6D652F736972692F65726C616E676400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461036116610D612B610C6802640006736F757263656B00182F686F6D652F736972692F65726C616E672F74742E65726C6A
-=mod:distel
-Current size: 18214
-Current attributes: 836C00000002680264000376736E6C000000016E1000CC9C9EF141459249C1CCA00993B2E29A6A6802640006617574686F726C000000016400116C756B6540626C75657461696C2E636F6D6A6A
-Current compilation info: 836C0000000368026400076F7074696F6E736C0000000664000276336400107761726E5F756E757365645F7661727364000A64656275675F696E666F68026400066F75746469726B00046562696E68026400036377646B001C2F6C6469736B2F736972692F746F6F6C732F64697374656C2D332E3164000A6578706F72745F616C6C6A680264000776657273696F6E6B0003342E31680264000474696D65680662000007D2610B6114610B610361336A
-=mod:crashdump_viewer
-Current size: 125756
-Current attributes: 836C00000001680264000376736E6C000000016E10002DC5D9D96190A2D5F27FAC3FA3D5C7956A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611B61366802640006736F757263656B00362F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765722E65726C6A
-=mod:webtool
-Current size: 29229
-Current attributes: 836C00000002680264000376736E6C000000016E10008AEEF06B60527A3390CBC2C98083CC0A6A68026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F76617273680264000F70617273655F7472616E73666F726D64000C6D735F7472616E73666F726D6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104610661086106612D6802640006736F757263656B002C2F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C2E65726C6A
-=mod:gen_tcp
-Current size: 3574
-Current attributes: 836C00000001680264000376736E6C000000016E1000C965E4EAFDAA94D7F21EDCBE30B21E7B6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613161316802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F67656E5F7463702E65726C6A
-=mod:inet_tcp
-Current size: 2743
-Current attributes: 836C00000001680264000376736E6C000000016E1000C4AFE0B49768E4CF78B2C42EA1D3DB7F6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B6132612B6802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F7463702E65726C6A
-=mod:inet_gethost_native
-Current size: 15611
-Current attributes: 836C00000002680264000376736E6C000000016E10005D8CD4277D0BD2425B9C26036AE314506A68026400096265686176696F75726C0000000164001173757065727669736F725F6272696467656A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000568026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F2E2E2F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B613261206802640006736F757263656B003A2F636C656172636173652F6F74702F657274732F6C69622F6B65726E656C2F7372632F696E65745F676574686F73745F6E61746976652E65726C6A
-=mod:filelib
-Current size: 7202
-Current attributes: 836C00000001680264000376736E6C000000016E10007B42AA23FF99DF2CD9D586635B77556A6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612D61266802640006736F757263656B002E2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F66696C656C69622E65726C6A
-=mod:httpd_util
-Current size: 24068
-Current attributes: 836C00000002680264000376736E6C000000016E10008D99E096221B88D542E52CB9C8377F6D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128613B6802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7574696C2E65726C6A
-=mod:webtool_sup
-Current size: 695
-Current attributes: 836C00000002680264000376736E6C000000016E1000FA5449E12816CF3AD0A3085BB26CDB9B6A68026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000468026400036377646B00202F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F73726368026400066F75746469726B00282F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F2E2E2F6562696E64000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461066108610761236802640006736F757263656B00302F636C656172636173652F6F74702F746F6F6C732F776562746F6F6C2F7372632F776562746F6F6C5F7375702E65726C6A
-=mod:httpd_conf
-Current size: 33659
-Current attributes: 836C00000002680264000376736E6C000000016E1000E3198FBDC73BC48CB7D0C1C762B8F1AB6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861116802640006736F757263656B00312F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F636F6E662E65726C6A
-=mod:regexp
-Current size: 13698
-Current attributes: 836C00000001680264000376736E6C000000016E10009DD44F3D02F8328BE3ABF4DDA89E0CAE6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E61376802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F7265676578702E65726C6A
-=mod:string
-Current size: 7740
-Current attributes: 836C00000002680264000376736E6C000000016E10005521DDF38903D46D7C53DB864266F7456A680264000A646570726563617465646C00000007680264000C72655F73685F746F5F61776B6101680264000872655F70617273656101680264000872655F6D617463686102680264000672655F7375626103680264000772655F677375626103680264000872655F73706C697461026802640005696E64657861026A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F610F6802640006736F757263656B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F737472696E672E65726C6A
-=mod:httpd
-Current size: 7563
-Current attributes: 836C00000002680264000376736E6C000000016E1000BFD190D951EB3CAD2CC72ADEF20886906A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861036802640006736F757263656B002C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470642E65726C6A
-=mod:httpd_sup
-Current size: 4068
-Current attributes: 836C00000003680264000376736E6C000000016E10007FA5C790118F18F3D20A2BFAF0229F0A6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861366802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F7375702E65726C6A
-=mod:httpd_acceptor_sup
-Current size: 2161
-Current attributes: 836C00000003680264000376736E6C000000016E10003E6F9289B64C13F1EC8A1184BACF055F6A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128610C6802640006736F757263656B00392F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F725F7375702E65726C6A
-=mod:httpd_verbosity
-Current size: 2672
-Current attributes: 836C00000002680264000376736E6C000000016E100018B6F407D391872421748F87877DAAF36A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961036802640006736F757263656B00362F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F766572626F736974792E65726C6A
-=mod:timer
-Current size: 8223
-Current attributes: 836C00000001680264000376736E6C000000016E10001D0D64DB1B923D1B3B9497655C43B4AD6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612F611A6802640006736F757263656B002C2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F74696D65722E65726C6A
-=mod:httpd_misc_sup
-Current size: 2066
-Current attributes: 836C00000003680264000376736E6C000000016E100092342F38AC16C074DDC21532FBFB52C26A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A73757065727669736F726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611F6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D6973635F7375702E65726C6A
-=mod:httpd_manager
-Current size: 28916
-Current attributes: 836C00000003680264000376736E6C000000016E100013F7A1E6A4B6407A0A1892A794EE10A36A68026400076170705F76736E6B000B696E6574732D332E302E3768026400096265686176696F75726C0000000164000A67656E5F7365727665726A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128611B6802640006736F757263656B00342F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6D616E616765722E65726C6A
-=mod:mod_alias
-Current size: 6720
-Current attributes: 836C00000002680264000376736E6C000000016E10002F35C36060B4AC45474440381D146AB96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961106802640006736F757263656B00302F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616C6961732E65726C6A
-=mod:mod_auth
-Current size: 25168
-Current attributes: 836C00000002680264000376736E6C000000016E100083F3CA0C7A3E7B5E19A635A7F916595D6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961166802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F617574682E65726C6A
-=mod:mod_esi
-Current size: 22534
-Current attributes: 836C00000002680264000376736E6C000000016E1000513E3FF733E1E6592B86CB55B9C14E086A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61026802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6573692E65726C6A
-=mod:mod_actions
-Current size: 3625
-Current attributes: 836C00000002680264000376736E6C000000016E10008E5437921662830490CA76DFF88548966A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066129610C6802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F616374696F6E732E65726C6A
-=mod:mod_cgi
-Current size: 25891
-Current attributes: 836C00000002680264000376736E6C000000016E1000F91D405488188F1BD25110B4ED9EE8786A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961306802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6367692E65726C6A
-=mod:mod_include
-Current size: 34923
-Current attributes: 836C00000002680264000376736E6C000000016E1000B9CCE88D63DD6AC49D5DF533C46B97D56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61176802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F696E636C7564652E65726C6A
-=mod:mod_dir
-Current size: 13488
-Current attributes: 836C00000002680264000376736E6C000000016E1000EF620CB4B5DE5586ED681347496DA1C86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961356802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469722E65726C6A
-=mod:mod_get
-Current size: 4672
-Current attributes: 836C00000002680264000376736E6C000000016E1000AD2730B6BE6AF875A500AF4857C4D7F86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A61076802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6765742E65726C6A
-=mod:mod_head
-Current size: 3074
-Current attributes: 836C00000002680264000376736E6C000000016E1000CAF803B9FA6A28D4153BC109B00D7DF96A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A610B6802640006736F757263656B002F2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F686561642E65726C6A
-=mod:mod_log
-Current size: 8546
-Current attributes: 836C00000002680264000376736E6C000000016E1000F9664B54861260DEA081249379219AF86A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612A611B6802640006736F757263656B002E2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6C6F672E65726C6A
-=mod:mod_disk_log
-Current size: 15160
-Current attributes: 836C00000002680264000376736E6C000000016E1000DDA1E88A9C423A2866B56425DF36F5C66A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612961396802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F6D6F645F6469736B5F6C6F672E65726C6A
-=mod:httpd_socket
-Current size: 7426
-Current attributes: 836C00000002680264000376736E6C000000016E1000B831219096661E4D2E200A07C4A9A7776A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861326802640006736F757263656B00332F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F736F636B65742E65726C6A
-=mod:httpd_acceptor
-Current size: 4472
-Current attributes: 836C00000002680264000376736E6C000000016E1000A501686DF4E4053E7D978E0CA162BEC56A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861076802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F6163636570746F722E65726C6A
-=mod:io_lib_pretty
-Current size: 8171
-Current attributes: 836C00000001680264000376736E6C000000016E1000CD397E11D2D380D02A4BC6EE309B98CB6A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612E610C6802640006736F757263656B00342F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F696F5F6C69625F7072657474792E65726C6A
-=mod:httpd_request_handler
-Current size: 26393
-Current attributes: 836C00000002680264000376736E6C000000016E100021C280A5EB5B9CCD00A2C418A341202A6A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861296802640006736F757263656B003C2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726571756573745F68616E646C65722E65726C6A
-=mod:calendar
-Current size: 7158
-Current attributes: 836C00000002680264000376736E6C000000016E10008C44498546709037F8D72DA4AF8B7FB76A680264000A646570726563617465646C00000001680264001C6C6F63616C5F74696D655F746F5F756E6976657273616C5F74696D6561016A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00222F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F6562696E6802640001696B002D2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F696E636C7564656802640001696B00372F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F2E2E2F2E2E2F6B65726E656C2F696E636C7564656400107761726E5F756E757365645F7661727364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E31680264000474696D65680662000007D3610C6112610B612B61166802640006736F757263656B002F2F636C656172636173652F6F74702F657274732F6C69622F7374646C69622F7372632F63616C656E6461722E65726C6A
-=mod:httpd_parse
-Current size: 9977
-Current attributes: 836C00000002680264000376736E6C000000016E1000174653BAA652261FEB44FFDED99E50B76A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461156106612861246802640006736F757263656B00322F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F70617273652E65726C6A
-=mod:httpd_response
-Current size: 13535
-Current attributes: 836C00000002680264000376736E6C000000016E1000785B247D894BA08A40D814EF11F848976A68026400076170705F76736E6B000B696E6574732D332E302E376A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000868036400016464001164656661756C745F766572626F7369747964000773696C656E636568036400016464000F5345525645525F534F4654574152456B000B696E6574732F332E302E3768026400036377646B00222F636C656172636173652F6F74702F6C69627261726965732F696E6574732F73726368026400066F75746469726B002A2F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F2E2E2F6562696E6804640009617474726962757465640006696E736572746400076170705F76736E6B000B696E6574732D332E302E37680264000F70617273655F7472616E73666F726D6400127379735F7072655F6174747269627574657364000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D46104611561066128612D6802640006736F757263656B00352F636C656172636173652F6F74702F6C69627261726965732F696E6574732F7372632F68747470645F726573706F6E73652E65726C6A
-=mod:crashdump_viewer_html
-Current size: 68343
-Current attributes: 836C00000001680264000376736E6C000000016E1000AE414770FDB0806C5583FF8D6D71DC766A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000768026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6400107761726E5F756E757365645F766172736A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D4610461146108611C61026802640006736F757263656B003B2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7669657765725F68746D6C2E65726C6A
-=mod:crashdump_translate
-Current size: 89840
-Current attributes: 836C00000001680264000376736E6C000000016E100038F332287181E933A76CEF4799BDB6416A6A
-Current compilation info: 836C0000000468026400076F7074696F6E736C0000000668026400036377646B00212F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F73726368026400066F75746469726B00292F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F6562696E6802640001696B002C2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F696E636C7564656802640001696B00322F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F65742F696E636C7564656802640001696B003F2F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F2E2E2F2E2E2F2E2E2F6C69627261726965732F65742F696E636C75646564000A64656275675F696E666F6A680264000776657273696F6E6B0005342E322E32680264000474696D65680662000007D461046115610B611661106802640006736F757263656B00392F636C656172636173652F6F74702F746F6F6C732F6F627365727665722F7372632F637261736864756D705F7472616E736C6174652E65726C6A
-=fun
-Module: crashdump_viewer_html
-Uniq: 9122590
-Index: 0
-Address: 526308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 77168418
-Index: 14
-Address: 26541c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 88083515
-Index: 9
-Address: 284c30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 36747896
-Index: 4
-Address: 26df84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 80395734
-Index: 8
-Address: 265838
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 103184573
-Index: 5
-Address: 2fa59c
-Native_address: bce80
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 88265811
-Index: 24
-Address: 34f6a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 9644262
-Index: 2
-Address: 292cec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 100885585
-Index: 0
-Address: 29eb2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 128335479
-Index: 6
-Address: 26de84
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 42988083
-Index: 1
-Address: 210c14
-Native_address: bcf04
-Refc: 1
-=fun
-Module: dict
-Uniq: 7105125
-Index: 7
-Address: 354f84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 29030584
-Index: 8
-Address: 234978
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 29214351
-Index: 2
-Address: 285660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 5158633
-Index: 4
-Address: 274034
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 74624950
-Index: 25
-Address: 34f63c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 6477018
-Index: 3
-Address: 2adb6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 117885138
-Index: 7
-Address: 2ffff8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 47566924
-Index: 6
-Address: 354fb8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 114637756
-Index: 12
-Address: 313c60
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121316204
-Index: 31
-Address: 313a68
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61363639
-Index: 12
-Address: 2ad6a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 116208699
-Index: 3
-Address: 274094
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 113750737
-Index: 0
-Address: 292d54
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 12853672
-Index: 0
-Address: 222e74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108046357
-Index: 12
-Address: 4ab0b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 111569299
-Index: 47
-Address: 34e80c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 20108653
-Index: 15
-Address: 2f9f94
-Native_address: bcea4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 45252965
-Index: 15
-Address: 313c0c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 12437425
-Index: 9
-Address: 4ab3e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 30942993
-Index: 22
-Address: 34f6ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 93430337
-Index: 3
-Address: 33b100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 6604883
-Index: 2
-Address: 33b16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 36867745
-Index: 5
-Address: 255e28
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 90563105
-Index: 1
-Address: 285708
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 18519297
-Index: 7
-Address: 26ddfc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8058975
-Index: 16
-Address: 4a36b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 30694569
-Index: 7
-Address: 27d018
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 76933943
-Index: 0
-Address: 2741b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 9033258
-Index: 6
-Address: 4a4690
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 74851752
-Index: 5
-Address: 4a4798
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 50855382
-Index: 4
-Address: 2659a8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39211582
-Index: 52
-Address: 34e504
-Native_address: bceec
-Refc: 1
-=fun
-Module: file_server
-Uniq: 77665472
-Index: 0
-Address: 2a0dec
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 57487277
-Index: 8
-Address: 2fa3c4
-Native_address: bce94
-Refc: 1
-=fun
-Module: webtool
-Uniq: 87386575
-Index: 11
-Address: 4ab1c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 58991950
-Index: 8
-Address: 4a4338
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 118859163
-Index: 17
-Address: 4a34d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 38265609
-Index: 12
-Address: 354dec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 56903339
-Index: 1
-Address: 2527c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 129504763
-Index: 0
-Address: 28aae8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 44817307
-Index: 10
-Address: 354e3c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 52856894
-Index: 41
-Address: 34eb70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22623360
-Index: 23
-Address: 34f5d4
-Native_address: bceec
-Refc: 1
-=fun
-Module: orddict
-Uniq: 34963136
-Index: 0
-Address: 2fbbbc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erlang
-Uniq: 24496633
-Index: 0
-Address: 213744
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 99313855
-Index: 27
-Address: 2f9914
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 99137703
-Index: 3
-Address: 4b5dfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 124043500
-Index: 3
-Address: 222b84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 102650878
-Index: 22
-Address: 313b48
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 13333720
-Index: 12
-Address: 34fb2c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 133457
-Index: 5
-Address: 292a80
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 64640983
-Index: 4
-Address: 29e944
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 7580218
-Index: 2
-Address: 255f08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 131850870
-Index: 59
-Address: 34e6b8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 56617403
-Index: 10
-Address: 284b40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108680306
-Index: 4
-Address: 4ab5e0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 90880071
-Index: 2
-Address: 26e150
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_io_server
-Uniq: 23980778
-Index: 0
-Address: 30ac30
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 12006418
-Index: 19
-Address: 2f9d54
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 81701030
-Index: 8
-Address: 526228
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 71013875
-Index: 1
-Address: 4a4ddc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: distel
-Uniq: 87740845
-Index: 2
-Address: 35c0e0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 90782401
-Index: 17
-Address: 2f9e8c
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 133882676
-Index: 6
-Address: 2e52ac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 105698088
-Index: 3
-Address: 2855b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 58370899
-Index: 0
-Address: 27d370
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 15274536
-Index: 25
-Address: 2f9a94
-Native_address: bcef4
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 94349557
-Index: 0
-Address: 252844
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 33328185
-Index: 1
-Address: 33b1d8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86971387
-Index: 16
-Address: 313db0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 53364473
-Index: 38
-Address: 34ee84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 128145687
-Index: 0
-Address: 4ab944
-Native_address: bcee4
-Refc: 1
-=fun
-Module: c
-Uniq: 98651404
-Index: 10
-Address: 2fff20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 78224618
-Index: 0
-Address: 313dcc
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 40779085
-Index: 11
-Address: 2e50c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 93517350
-Index: 4
-Address: 300090
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 58551291
-Index: 0
-Address: 234f14
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 10055518
-Index: 17
-Address: 526170
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 15795706
-Index: 19
-Address: 313bd4
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 31129467
-Index: 13
-Address: 313c44
-Native_address: bced4
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 115635393
-Index: 0
-Address: 2a1a4c
-Native_address: bcf04
-Refc: 2
-=fun
-Module: erl_eval
-Uniq: 65839696
-Index: 22
-Address: 2f9c00
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 69275064
-Index: 28
-Address: 313aa0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 55938066
-Index: 11
-Address: 354d6c
-Native_address: bceec
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 22323433
-Index: 3
-Address: 252688
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 129726129
-Index: 29
-Address: 313abc
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 84346832
-Index: 0
-Address: 3550fc
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 102096820
-Index: 7
-Address: 2e5290
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 70385762
-Index: 11
-Address: 27cf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_cgi
-Uniq: 1483038
-Index: 0
-Address: 4ec2e8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 3664813
-Index: 1
-Address: 3550b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 131143671
-Index: 6
-Address: 27d08c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 46286977
-Index: 2
-Address: 2740b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_esi
-Uniq: 49099432
-Index: 0
-Address: 4e522c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 95764905
-Index: 2
-Address: 24aaa8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: packages
-Uniq: 62890926
-Index: 0
-Address: 2ae814
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 41564771
-Index: 35
-Address: 3139f8
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 95490768
-Index: 0
-Address: 4a4dc0
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 121559432
-Index: 3
-Address: 313d78
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_conf
-Uniq: 21152662
-Index: 0
-Address: 4be5a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 41630916
-Index: 5
-Address: 29e914
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 19747201
-Index: 5
-Address: 313d24
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 100584837
-Index: 36
-Address: 34f0f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 64635712
-Index: 15
-Address: 34f94c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 46398361
-Index: 3
-Address: 29e9a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 86699817
-Index: 27
-Address: 313b2c
-Native_address: bced4
-Refc: 1
-=fun
-Module: distel
-Uniq: 40869731
-Index: 0
-Address: 35c12c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 83701641
-Index: 1
-Address: 27d33c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_auth
-Uniq: 85845790
-Index: 0
-Address: 4dfd84
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 101292714
-Index: 9
-Address: 2e519c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 134173702
-Index: 1
-Address: 265b68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 92433687
-Index: 6
-Address: 2ad9f4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 62315241
-Index: 8
-Address: 354f38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 11615541
-Index: 12
-Address: 265530
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 11160090
-Index: 2
-Address: 2b6bb4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 12116524
-Index: 15
-Address: 2342c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 61620901
-Index: 2
-Address: 4fc670
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 23665189
-Index: 12
-Address: 4a3b94
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 43844413
-Index: 0
-Address: 300100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 100514258
-Index: 6
-Address: 313d08
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 54271286
-Index: 17
-Address: 34f8a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 47017252
-Index: 3
-Address: 26dfa0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 1228304
-Index: 7
-Address: 4a45a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 127131470
-Index: 10
-Address: 2655a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: file_server
-Uniq: 22638227
-Index: 1
-Address: 2a0e20
-Native_address: bcf04
-Refc: 1
-=fun
-Module: code_server
-Uniq: 112704920
-Index: 15
-Address: 2ad488
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88302875
-Index: 2
-Address: 2fa76c
-Native_address: bceb4
-Refc: 1
-=fun
-Module: inet_hosts
-Uniq: 85808984
-Index: 1
-Address: 28ab18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_parse
-Uniq: 106391799
-Index: 0
-Address: 33b22c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25830519
-Index: 5
-Address: 27d0c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 110491036
-Index: 1
-Address: 2e5398
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 13128736
-Index: 5
-Address: 52627c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 84644982
-Index: 21
-Address: 313b9c
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 120577486
-Index: 3
-Address: 34fffc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 4504456
-Index: 44
-Address: 34e938
-Native_address: bceec
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 28754183
-Index: 0
-Address: 500140
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 88043334
-Index: 14
-Address: 313c28
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61592373
-Index: 0
-Address: 2adc28
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74468346
-Index: 26
-Address: 313ad8
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69896253
-Index: 21
-Address: 2f9c40
-Native_address: bce80
-Refc: 1
-=fun
-Module: global_group
-Uniq: 59656873
-Index: 4
-Address: 292ac0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 103891261
-Index: 2
-Address: 4a4d70
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 89619733
-Index: 0
-Address: 4b5e64
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 133201466
-Index: 10
-Address: 2e5180
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 32159369
-Index: 2
-Address: 4ab820
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 76861396
-Index: 2
-Address: 2adbb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 48206487
-Index: 0
-Address: 4fc6f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 118996551
-Index: 28
-Address: 34f384
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 12593774
-Index: 50
-Address: 34e60c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 48542841
-Index: 1
-Address: 50e88c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56178490
-Index: 9
-Address: 4a420c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 88212576
-Index: 4
-Address: 35bf44
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 79562132
-Index: 29
-Address: 34f368
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 129524917
-Index: 32
-Address: 34f2c0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54029891
-Index: 23
-Address: 2f9af0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 108872092
-Index: 4
-Address: 27d0f0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 40905124
-Index: 6
-Address: 234ac0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 50124876
-Index: 10
-Address: 2ad760
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 791358
-Index: 48
-Address: 34e7b0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 18404828
-Index: 24
-Address: 313af4
-Native_address: bced4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 13278653
-Index: 1
-Address: 4b5e48
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 110307423
-Index: 13
-Address: 284a7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 99592247
-Index: 0
-Address: 256118
-Native_address: bcf04
-Refc: 1
-=fun
-Module: global
-Uniq: 99918211
-Index: 2
-Address: 265af4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 71442319
-Index: 27
-Address: 34f510
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 7612785
-Index: 13
-Address: 2fa0fc
-Native_address: bce80
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 56095795
-Index: 15
-Address: 4a38a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 23626796
-Index: 25
-Address: 313b10
-Native_address: bced4
-Refc: 1
-=fun
-Module: file_server
-Uniq: 126074974
-Index: 2
-Address: 2a0cac
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_config
-Uniq: 104278122
-Index: 1
-Address: 274154
-Native_address: bcefc
-Refc: 1
-=fun
-Module: sys
-Uniq: 90854051
-Index: 0
-Address: 240344
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 113334594
-Index: 2
-Address: 313d5c
-Native_address: bced4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 8832142
-Index: 7
-Address: 284e30
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9159706
-Index: 42
-Address: 34eb54
-Native_address: bceec
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 123946665
-Index: 8
-Address: 26e494
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3149789
-Index: 1
-Address: 5262d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 48288621
-Index: 11
-Address: 2ffed8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 8953292
-Index: 20
-Address: 4a4d54
-Native_address: bcee4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 9632158
-Index: 4
-Address: 34ff88
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 31111567
-Index: 7
-Address: 29e8c8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 85307443
-Index: 10
-Address: 2fa29c
-Native_address: bcec4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 104417191
-Index: 7
-Address: 313cd0
-Native_address: bced4
-Refc: 1
-=fun
-Module: dict
-Uniq: 43625777
-Index: 5
-Address: 354fec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 92698798
-Index: 3
-Address: 4ab780
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 39074546
-Index: 6
-Address: 2fa54c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 71451126
-Index: 5
-Address: 234b98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 122084387
-Index: 6
-Address: 300038
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 9625924
-Index: 14
-Address: 284a60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 128777368
-Index: 11
-Address: 313c7c
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 10203723
-Index: 7
-Address: 4ab4f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 35032400
-Index: 10
-Address: 313c98
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 17252586
-Index: 34
-Address: 313a14
-Native_address: bced4
-Refc: 1
-=fun
-Module: code_server
-Uniq: 7177165
-Index: 11
-Address: 2ad734
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 115778175
-Index: 3
-Address: 4a4930
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 96440880
-Index: 51
-Address: 34e590
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 68275407
-Index: 0
-Address: 2b7340
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 88854488
-Index: 16
-Address: 2f9f04
-Native_address: bcebc
-Refc: 1
-=fun
-Module: global
-Uniq: 26353848
-Index: 13
-Address: 2654e8
-Native_address: bcf04
-Refc: 3
-=fun
-Module: global
-Uniq: 93414722
-Index: 11
-Address: 265568
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 11194189
-Index: 60
-Address: 34fe0c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: c
-Uniq: 125189992
-Index: 8
-Address: 2fffdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 112472016
-Index: 2
-Address: 355088
-Native_address: bceec
-Refc: 1
-=fun
-Module: shell
-Uniq: 104426442
-Index: 5
-Address: 2e52e0
-Native_address: bceec
-Refc: 1
-=fun
-Module: global
-Uniq: 17426458
-Index: 0
-Address: 265bc4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 81191039
-Index: 5
-Address: 2ada48
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 71765042
-Index: 5
-Address: 284f74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 85855821
-Index: 2
-Address: 1fa298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 70586122
-Index: 10
-Address: 4a3fe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 87067911
-Index: 49
-Address: 34e708
-Native_address: bcef4
-Refc: 1
-=fun
-Module: distel
-Uniq: 63126735
-Index: 1
-Address: 35c0fc
-Native_address: bcf04
-Refc: 1
-=fun
-Module: c
-Uniq: 58270309
-Index: 1
-Address: 3000e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: ets
-Uniq: 80538457
-Index: 1
-Address: 2bc1a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 69827241
-Index: 9
-Address: 34fd70
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 103968752
-Index: 3
-Address: 355054
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 117175573
-Index: 21
-Address: 34f728
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 57865450
-Index: 2
-Address: 2e537c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 14705965
-Index: 20
-Address: 313b80
-Native_address: bced4
-Refc: 1
-=fun
-Module: webtool
-Uniq: 85360931
-Index: 6
-Address: 4ab56c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: kernel_config
-Uniq: 41755598
-Index: 0
-Address: 2d9e20
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 7110547
-Index: 37
-Address: 34ef14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 28091577
-Index: 16
-Address: 234244
-Native_address: bcef4
-Refc: 2
-=fun
-Module: code_server
-Uniq: 96448152
-Index: 14
-Address: 2ad4e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 40177568
-Index: 13
-Address: 4a39a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 31948320
-Index: 58
-Address: 34dfdc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global
-Uniq: 54153760
-Index: 7
-Address: 265854
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 60156260
-Index: 3
-Address: 5262b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 1010616
-Index: 2
-Address: 350064
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 96784459
-Index: 1
-Address: 1fa2b4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 48691771
-Index: 18
-Address: 313bb8
-Native_address: bced4
-Refc: 1
-=fun
-Module: global
-Uniq: 26895060
-Index: 9
-Address: 265710
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 109625093
-Index: 7
-Address: 2ad8fc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 59436171
-Index: 1
-Address: 3500dc
-Native_address: bcef4
-Refc: 1
-=fun
-Module: dict
-Uniq: 92768306
-Index: 9
-Address: 354f04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global_group
-Uniq: 106430008
-Index: 3
-Address: 292b38
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 79749196
-Index: 6
-Address: 1fa01c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 6014929
-Index: 9
-Address: 2fa324
-Native_address: bceac
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 57051922
-Index: 7
-Address: 234a28
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 77043468
-Index: 6
-Address: 29e8e4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 36176045
-Index: 9
-Address: 52620c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: rpc
-Uniq: 35862809
-Index: 3
-Address: 255edc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113649451
-Index: 4
-Address: 2850a0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 67943969
-Index: 5
-Address: 2658f4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 109003032
-Index: 16
-Address: 5260d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 104711447
-Index: 13
-Address: 525f5c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 107666872
-Index: 9
-Address: 27cfb0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 89410000
-Index: 10
-Address: 5261f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 47356870
-Index: 11
-Address: 284ab4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17873449
-Index: 56
-Address: 34e1e8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 8839441
-Index: 33
-Address: 34f25c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 82513204
-Index: 2
-Address: 222c18
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_master
-Uniq: 5973059
-Index: 0
-Address: 24ab7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 127832132
-Index: 0
-Address: 4b065c
-Native_address: bcefc
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 39322658
-Index: 14
-Address: 525f40
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_server
-Uniq: 100284021
-Index: 0
-Address: 23d288
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 17430070
-Index: 12
-Address: 284a98
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 97509773
-Index: 3
-Address: 1fa27c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: distel
-Uniq: 32364818
-Index: 3
-Address: 35c050
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 58576084
-Index: 32
-Address: 313a4c
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 38384851
-Index: 14
-Address: 4a3988
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 14139883
-Index: 4
-Address: 234d78
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 122590256
-Index: 0
-Address: 2fa8b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 14705629
-Index: 11
-Address: 2fa22c
-Native_address: bcedc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 9273769
-Index: 4
-Address: 2fa684
-Native_address: bcee4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 87950142
-Index: 11
-Address: 5261d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_log
-Uniq: 54913678
-Index: 1
-Address: 4fc6b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 28370334
-Index: 0
-Address: 26e4b0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 24927227
-Index: 40
-Address: 34ed4c
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 105437500
-Index: 33
-Address: 313a30
-Native_address: bced4
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 10921695
-Index: 1
-Address: 234eac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 112431564
-Index: 55
-Address: 34e22c
-Native_address: bceec
-Refc: 1
-=fun
-Module: webtool
-Uniq: 129460863
-Index: 5
-Address: 4ab5c4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 89001648
-Index: 3
-Address: 27d2ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 36199507
-Index: 8
-Address: 27cfe4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 35620771
-Index: 2
-Address: 5262ec
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 83214871
-Index: 18
-Address: 2f9e34
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 122455383
-Index: 1
-Address: 2adc0c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 22389488
-Index: 31
-Address: 34f1b8
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 41869059
-Index: 12
-Address: 2fa1d4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 18130505
-Index: 45
-Address: 34e904
-Native_address: bcefc
-Refc: 1
-=fun
-Module: hipe_unified_loader
-Uniq: 107414126
-Index: 1
-Address: 2b706c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 116638945
-Index: 28
-Address: 2f98f8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 48465762
-Index: 9
-Address: 2348c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_request_handler
-Uniq: 87633852
-Index: 0
-Address: 50e97c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 28213098
-Index: 8
-Address: 4ab42c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 123630574
-Index: 4
-Address: 222b58
-Native_address: bcefc
-Refc: 1
-=fun
-Module: dict
-Uniq: 127425508
-Index: 13
-Address: 354eb4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 95048118
-Index: 16
-Address: 2ad46c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 108661978
-Index: 19
-Address: 34f75c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 21272619
-Index: 13
-Address: 34fad8
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29943747
-Index: 17
-Address: 313bf0
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 120240397
-Index: 4
-Address: 313d94
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 124060676
-Index: 0
-Address: 350124
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 100975346
-Index: 6
-Address: 526260
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 61421476
-Index: 4
-Address: 2ada9c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45197232
-Index: 7
-Address: 34fe5c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 3151900
-Index: 15
-Address: 525f24
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 77509245
-Index: 2
-Address: 4b5e2c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 94110229
-Index: 8
-Address: 2ad7e4
-Native_address: bcef4
-Refc: 3
-=fun
-Module: rpc
-Uniq: 101217130
-Index: 1
-Address: 2560c4
-Native_address: bcf04
-Refc: 1
-=fun
-Module: lists
-Uniq: 103647452
-Index: 0
-Address: 244b7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 37841211
-Index: 9
-Address: 2ad77c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 40109251
-Index: 54
-Address: 34e2b4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: init
-Uniq: 98012300
-Index: 0
-Address: 1fa2d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 73604759
-Index: 10
-Address: 4ab270
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 12042434
-Index: 1
-Address: 313d40
-Native_address: bced4
-Refc: 1
-=fun
-Module: shell
-Uniq: 127137775
-Index: 4
-Address: 2e531c
-Native_address: bcf04
-Refc: 1
-=fun
-Module: inet
-Uniq: 45498037
-Index: 12
-Address: 27cec0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 122441107
-Index: 34
-Address: 34f1d4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70933889
-Index: 46
-Address: 34e8d0
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet
-Uniq: 69850797
-Index: 2
-Address: 27d308
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 103965539
-Index: 13
-Address: 234684
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 29979659
-Index: 30
-Address: 313a84
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 17148721
-Index: 20
-Address: 34f778
-Native_address: bcefc
-Refc: 1
-=fun
-Module: httpd_response
-Uniq: 100673049
-Index: 0
-Address: 5165dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_gethost_native
-Uniq: 10508176
-Index: 1
-Address: 4b04dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32476064
-Index: 57
-Address: 34e1c4
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 74835078
-Index: 9
-Address: 313cec
-Native_address: bced4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 60689814
-Index: 19
-Address: 4a3b78
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 39269715
-Index: 5
-Address: 34ff14
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 112923172
-Index: 0
-Address: 2e5404
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43010824
-Index: 14
-Address: 2fa03c
-Native_address: bce8c
-Refc: 1
-=fun
-Module: global
-Uniq: 82495254
-Index: 3
-Address: 265ac8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: shell
-Uniq: 48568081
-Index: 8
-Address: 2e5220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 77236637
-Index: 7
-Address: 1fa000
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 109386574
-Index: 1
-Address: 2fa804
-Native_address: bce9c
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 42613220
-Index: 14
-Address: 34f980
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 67093144
-Index: 23
-Address: 313b64
-Native_address: bced4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 86833790
-Index: 11
-Address: 34fbe8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 6344855
-Index: 1
-Address: 29eabc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 5149749
-Index: 35
-Address: 34f220
-Native_address: bcefc
-Refc: 1
-=fun
-Module: init
-Uniq: 93451769
-Index: 5
-Address: 1fa120
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 117428568
-Index: 11
-Address: 234758
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 15225890
-Index: 4
-Address: 526298
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 120760477
-Index: 2
-Address: 234cdc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 88561919
-Index: 3
-Address: 3000ac
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_scan
-Uniq: 108931174
-Index: 8
-Address: 313cb4
-Native_address: bced4
-Refc: 1
-=fun
-Module: rpc
-Uniq: 122901192
-Index: 4
-Address: 255e44
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32985930
-Index: 10
-Address: 34fc40
-Native_address: bcef4
-Refc: 1
-=fun
-Module: global_group
-Uniq: 97968498
-Index: 1
-Address: 292b7c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 45671671
-Index: 18
-Address: 4a32d0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 117968056
-Index: 3
-Address: 2fa6ec
-Native_address: bcecc
-Refc: 1
-=fun
-Module: init
-Uniq: 108717591
-Index: 4
-Address: 1fa194
-Native_address: bcf04
-Refc: 1
-=fun
-Module: supervisor
-Uniq: 15091954
-Index: 2
-Address: 2526dc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 65707495
-Index: 6
-Address: 2658a4
-Native_address: bcefc
-Refc: 1
-=fun
-Module: code_server
-Uniq: 34473969
-Index: 17
-Address: 2ad450
-Native_address: bcef4
-Refc: 2
-=fun
-Module: crashdump_viewer_html
-Uniq: 124296602
-Index: 7
-Address: 526244
-Native_address: bcefc
-Refc: 1
-=fun
-Module: global
-Uniq: 23074707
-Index: 15
-Address: 265460
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet
-Uniq: 25972856
-Index: 10
-Address: 27cf74
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 43110452
-Index: 24
-Address: 2f9ad4
-Native_address: bceec
-Refc: 1
-=fun
-Module: code_server
-Uniq: 106445918
-Index: 13
-Address: 2ad660
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer_html
-Uniq: 116071286
-Index: 12
-Address: 5261b8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 130814477
-Index: 8
-Address: 284cfc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 121017037
-Index: 39
-Address: 34ed80
-Native_address: bcef4
-Refc: 1
-=fun
-Module: ets
-Uniq: 104895267
-Index: 0
-Address: 2bc1bc
-Native_address: bcefc
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 104682437
-Index: 11
-Address: 4a3de0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 70248777
-Index: 30
-Address: 34f30c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 13274975
-Index: 5
-Address: 300074
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 98442771
-Index: 53
-Address: 34e2d0
-Native_address: bceec
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 69829006
-Index: 7
-Address: 2fa47c
-Native_address: bce80
-Refc: 1
-=fun
-Module: old_file_server
-Uniq: 36444943
-Index: 1
-Address: 2a1a80
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 58719455
-Index: 26
-Address: 34f5f0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: timer
-Uniq: 42505885
-Index: 0
-Address: 4cd62c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54682479
-Index: 20
-Address: 2f9d08
-Native_address: bcf04
-Refc: 1
-=fun
-Module: gen_event
-Uniq: 86070332
-Index: 1
-Address: 222d7c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 54728136
-Index: 9
-Address: 2fff68
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 16474219
-Index: 3
-Address: 234c60
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 108831556
-Index: 10
-Address: 234810
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 72053761
-Index: 16
-Address: 34f8ec
-Native_address: bcef4
-Refc: 1
-=fun
-Module: net_kernel
-Uniq: 65127616
-Index: 2
-Address: 29ea04
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 126167637
-Index: 14
-Address: 234640
-Native_address: bcef4
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 113704917
-Index: 0
-Address: 285788
-Native_address: bcefc
-Refc: 1
-=fun
-Module: mod_disk_log
-Uniq: 75279647
-Index: 1
-Address: 500100
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 119218247
-Index: 5
-Address: 26df68
-Native_address: bcef4
-Refc: 1
-=fun
-Module: httpd_util
-Uniq: 85690044
-Index: 4
-Address: 4b5d6c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_db
-Uniq: 53075592
-Index: 1
-Address: 26e16c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: c
-Uniq: 39490182
-Index: 2
-Address: 3000c8
-Native_address: bcefc
-Refc: 1
-=fun
-Module: application_controller
-Uniq: 75189006
-Index: 12
-Address: 234714
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 14980808
-Index: 43
-Address: 34eb38
-Native_address: bceec
-Refc: 1
-=fun
-Module: crashdump_viewer
-Uniq: 16463468
-Index: 4
-Address: 4a4914
-Native_address: bcee4
-Refc: 1
-=fun
-Module: dict
-Uniq: 99965326
-Index: 4
-Address: 355020
-Native_address: bcefc
-Refc: 1
-=fun
-Module: inet_parse
-Uniq: 36900786
-Index: 6
-Address: 284f3c
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 45447147
-Index: 18
-Address: 34f794
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 32353825
-Index: 6
-Address: 34fe78
-Native_address: bcef4
-Refc: 1
-=fun
-Module: erl_lint
-Uniq: 134052338
-Index: 8
-Address: 34fdc0
-Native_address: bceec
-Refc: 1
-=fun
-Module: application_master
-Uniq: 23840924
-Index: 1
-Address: 24aae0
-Native_address: bcefc
-Refc: 1
-=fun
-Module: webtool
-Uniq: 108282500
-Index: 1
-Address: 4ab918
-Native_address: bcefc
-Refc: 1
-=fun
-Module: erl_prim_loader
-Uniq: 31081110
-Index: 0
-Address: 210c68
-Native_address: bcf04
-Refc: 1
-=fun
-Module: erl_eval
-Uniq: 54275742
-Index: 26
-Address: 2f9a4c
-Native_address: bcef4
-Refc: 1
-=fun
-Module: shell
-Uniq: 45083091
-Index: 3
-Address: 2e5350
-Native_address: bcf04
-Refc: 3
-=proc_stack:<0.0.0>
-3a48bc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H371264
-=proc_heap:<0.0.0>
-371264:t9:A5:state,H3710D8,N,N,H3710F4,P<0.1.0>,H37128C,H3710FC,N
-3710FC:t2:H371138,H371140
-371140:lI80|H371194
-371194:lI49|H3711E0
-3711E0:lI48|H371204
-371204:lI66|N
-371138:lI79|H37118C
-37118C:lI84|H3711D8
-3711D8:lI80|H3711FC
-3711FC:lI32|H37120C
-37120C:lI32|H371214
-371214:lI65|H37121C
-37121C:lI80|H371224
-371224:lI78|H37122C
-37122C:lI32|H371234
-371234:lI49|H37123C
-37123C:lI56|H371244
-371244:lI49|H37124C
-37124C:lI32|H371254
-371254:lI48|H37125C
-37125C:lI49|N
-37128C:t2:A7:started,A7:started
-3710F4:lH371124|H371130
-371124:t2:A16:application_controller,P<0.5.0>
-371130:lH371178|H371184
-371178:t2:AC:error_logger,P<0.4.0>
-371184:lH3711CC|N
-3711CC:t2:AF:erl_prim_loader,P<0.2.0>
-3710D8:lH3710E0|H3710EC
-3710E0:t2:A5:-root,H371108
-371108:lH371148|N
-371148:Yh13:2F636C656172636173652F6F74702F65727473
-3710EC:lH371110|H37111C
-371110:t2:A9:-progname,H371164
-371164:lH37119C|N
-37119C:Yh1D:2F636C656172636173652F6F74702F657274732F62696E2F6365726C20
-37111C:lH37116C|N
-37116C:t2:A5:-home,H3711C4
-3711C4:lH3711E8|N
-3711E8:YhA:2F686F6D652F73697269
-=proc_stack:<0.2.0>
-38eca8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H367D20
-y1:P<0.1.0>
-y2:H367D28
-y3:A8:infinity
-=proc_heap:<0.2.0>
-367D20:lH367D48|H367D50
-367D48:lI47|H367D58
-367D58:lI99|H367D68
-367D68:lI108|H367D78
-367D78:lI101|H367D88
-367D88:lI97|H367D98
-367D98:lI114|H367DA8
-367DA8:lI99|H367DB8
-367DB8:lI97|H367DC8
-367DC8:lI115|H367DD8
-367DD8:lI101|H367DE8
-367DE8:lI47|H367DF8
-367DF8:lI111|H367E08
-367E08:lI116|H367E18
-367E18:lI112|H367E28
-367E28:lI47|H367E38
-367E38:lI101|H367E48
-367E48:lI114|H367E58
-367E58:lI116|H367E68
-367E68:lI115|H367E78
-367E78:lI47|H367E88
-367E88:lI108|H367E98
-367E98:lI105|H367EA8
-367EA8:lI98|H367EB8
-367EB8:lI47|H367EC8
-367EC8:lI107|H367ED8
-367ED8:lI101|H367EE8
-367EE8:lI114|H367EF8
-367EF8:lI110|H367F08
-367F08:lI101|H367F18
-367F18:lI108|H367F28
-367F28:lI47|H367F38
-367F38:lI101|H367F48
-367F48:lI98|H367F58
-367F58:lI105|H367F68
-367F68:lI110|N
-367D50:lH367D60|N
-367D60:lI47|H367D70
-367D70:lI99|H367D80
-367D80:lI108|H367D90
-367D90:lI101|H367DA0
-367DA0:lI97|H367DB0
-367DB0:lI114|H367DC0
-367DC0:lI99|H367DD0
-367DD0:lI97|H367DE0
-367DE0:lI115|H367DF0
-367DF0:lI101|H367E00
-367E00:lI47|H367E10
-367E10:lI111|H367E20
-367E20:lI116|H367E30
-367E30:lI112|H367E40
-367E40:lI47|H367E50
-367E50:lI101|H367E60
-367E60:lI114|H367E70
-367E70:lI116|H367E80
-367E80:lI115|H367E90
-367E90:lI47|H367EA0
-367EA0:lI108|H367EB0
-367EB0:lI105|H367EC0
-367EC0:lI98|H367ED0
-367ED0:lI47|H367EE0
-367EE0:lI115|H367EF0
-367EF0:lI116|H367F00
-367F00:lI100|H367F10
-367F10:lI108|H367F20
-367F20:lI105|H367F30
-367F30:lI98|H367F40
-367F40:lI47|H367F50
-367F50:lI101|H367F60
-367F60:lI98|H367F70
-367F70:lI105|H367F78
-367F78:lI110|N
-367D28:t7:A5:state,A5:efile,N,A4:none,p<0.2>,A8:infinity,A5:false
-=proc_dictionary:<0.4.0>
-H3AC588
-H3AC594
-=proc_stack:<0.4.0>
-3b2f14:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:H3B21E8
-y2:AC:error_logger
-y3:P<0.1.0>
-3b2f28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3AC5A8
-=proc_heap:<0.4.0>
-3B21E8:lH3B2144|H3B21E0
-3B2144:t5:A7:handler,AC:error_logger,A5:false,N,A5:false
-3B21E0:lH3B21BC|N
-3B21BC:t5:A7:handler,A12:error_logger_tty_h,A5:false,H3AC610,A5:false
-3AC610:t2:P<0.21.0>,AC:error_logger
-3AC5A8:lA9:gen_event|H3AC5E8
-3AC5E8:lP<0.1.0>|H3AC608
-3AC608:lP<0.1.0>|H3AC61C
-3AC61C:lH3AC624|H3AC630
-3AC624:t2:A5:local,AC:error_logger
-3AC630:lN|H3AC638
-3AC638:lN|H3AC640
-3AC640:lN|N
-3AC588:t2:AD:$initial_call,H3AC5B0
-3AC5B0:t3:A3:gen,A7:init_it,H3AC5A8
-3AC594:t2:AA:$ancestors,H3AC5C0
-3AC5C0:lP<0.1.0>|N
-=proc_dictionary:<0.5.0>
-H372E4C
-H372E58
-=proc_stack:<0.5.0>
-374704:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A16:application_controller
-y3:H3739F4
-y4:A16:application_controller
-y5:P<0.1.0>
-374720:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H372ED0
-=proc_heap:<0.5.0>
-3739F4:t9:A5:state,N,N,N,H373914,N,H373928,N,N
-373928:lH37391C|H372F54
-37391C:t2:A6:stdlib,A9:permanent
-372F54:lH372F90|N
-372F90:t2:A6:kernel,A9:permanent
-373914:lH373908|H372F4C
-373908:t2:A6:stdlib,A9:undefined
-372F4C:lH372F84|N
-372F84:t2:A6:kernel,P<0.7.0>
-372ED0:lAA:gen_server|H372F5C
-372F5C:lP<0.1.0>|H372F9C
-372F9C:lP<0.1.0>|H372FC4
-372FC4:lH372FEC|H372FF8
-372FEC:t2:A5:local,A16:application_controller
-372FF8:lA16:application_controller|H373018
-373018:lH373038|H373048
-373038:t3:AB:application,A6:kernel,H373060
-373060:lH373078|H373084
-373078:t2:AB:description,H37309C
-37309C:lI69|H3730C8
-3730C8:lI82|H3730FC
-3730FC:lI84|H373130
-373130:lI83|H37316C
-37316C:lI32|H3731A8
-3731A8:lI32|H3731E4
-3731E4:lI67|H373220
-373220:lI88|H37325C
-37325C:lI67|H37329C
-37329C:lI32|H3732D0
-3732D0:lI49|H3732FC
-3732FC:lI51|H373328
-373328:lI56|H373348
-373348:lI32|H373368
-373368:lI49|H373388
-373388:lI48|N
-373084:lH3730A4|H3730B0
-3730A4:t2:A3:vsn,H3730D0
-3730D0:lI50|H373104
-373104:lI46|H373138
-373138:lI57|N
-3730B0:lH3730D8|H3730E4
-3730D8:t2:A2:id,N
-3730E4:lH37310C|H373118
-37310C:t2:A7:modules,H373140
-373140:lAB:application|H373174
-373174:lA16:application_controller|H3731B0
-3731B0:lA12:application_master|H3731EC
-3731EC:lA13:application_starter|H373228
-373228:lA4:auth|H373264
-373264:lA4:code|H3732A4
-3732A4:lA8:code_aux|H3732D8
-3732D8:lA8:packages|H373304
-373304:lAB:code_server|H373330
-373330:lA9:dist_util|H373350
-373350:lAF:erl_boot_server|H373370
-373370:lA10:erl_distribution|H373390
-373390:lAF:erl_prim_loader|H3733A8
-3733A8:lA9:erl_reply|H3733C0
-3733C0:lA6:erlang|H3733D8
-3733D8:lAD:error_handler|H3733F0
-3733F0:lAC:error_logger|H373408
-373408:lA4:file|H373420
-373420:lAB:file_server|H373438
-373438:lAF:old_file_server|H373450
-373450:lAE:file_io_server|H373468
-373468:lA9:prim_file|H373480
-373480:lA6:global|H373498
-373498:lAC:global_group|H3734B0
-3734B0:lAD:global_search|H3734C8
-3734C8:lA5:group|H3734E0
-3734E0:lA5:heart|H3734F8
-3734F8:lA13:hipe_unified_loader|H373510
-373510:lA11:hipe_sparc_loader|H373520
-373520:lAF:hipe_x86_loader|H373530
-373530:lA9:inet6_tcp|H373540
-373540:lAE:inet6_tcp_dist|H373550
-373550:lA9:inet6_udp|H373560
-373560:lAB:inet_config|H373570
-373570:lAA:inet_hosts|H373580
-373580:lA13:inet_gethost_native|H373590
-373590:lAD:inet_tcp_dist|H3735A0
-3735A0:lA4:init|H3735B0
-3735B0:lA6:kernel|H3735C0
-3735C0:lAD:kernel_config|H3735D0
-3735D0:lA3:net|H3735E0
-3735E0:lA7:net_adm|H3735F0
-3735F0:lAA:net_kernel|H373600
-373600:lA2:os|H373610
-373610:lA8:ram_file|H373620
-373620:lA3:rpc|H373630
-373630:lA4:user|H373640
-373640:lA8:user_drv|H373650
-373650:lA8:user_sup|H373660
-373660:lA8:disk_log|H373670
-373670:lAA:disk_log_1|H373680
-373680:lAF:disk_log_server|H373690
-373690:lAC:disk_log_sup|H3736A0
-3736A0:lA7:dist_ac|H3736B0
-3736B0:lA8:erl_ddll|H3736C0
-3736C0:lA8:erl_epmd|H3736D0
-3736D0:lAA:erts_debug|H3736E0
-3736E0:lA7:gen_tcp|H3736F0
-3736F0:lA7:gen_udp|H373700
-373700:lA9:prim_inet|H373708
-373708:lA4:inet|H373710
-373710:lA7:inet_db|H373718
-373718:lA8:inet_dns|H373720
-373720:lAA:inet_parse|H373728
-373728:lA8:inet_res|H373730
-373730:lA8:inet_tcp|H373738
-373738:lA8:inet_udp|H373740
-373740:lA3:pg2|H373748
-373748:lA9:seq_trace|H373750
-373750:lA6:socks5|H373758
-373758:lAB:socks5_auth|H373760
-373760:lAA:socks5_tcp|H373768
-373768:lAA:socks5_udp|H373770
-373770:lAF:wrap_log_reader|H373778
-373778:lA4:zlib|H373780
-373780:lA9:otp_ring0|N
-373118:lH373148|H373154
-373148:t2:AA:registered,H37317C
-37317C:lA16:application_controller|H3731B8
-3731B8:lA9:erl_reply|H3731F4
-3731F4:lA4:auth|H373230
-373230:lAB:boot_server|H37326C
-37326C:lAB:code_server|H3732AC
-3732AC:lAF:disk_log_server|H3732E0
-3732E0:lAC:disk_log_sup|H37330C
-37330C:lAF:erl_prim_loader|H373338
-373338:lAC:error_logger|H373358
-373358:lAB:file_server|H373378
-373378:lAD:file_server_2|H373398
-373398:lAF:fixtable_server|H3733B0
-3733B0:lAC:global_group|H3733C8
-3733C8:lA12:global_name_server|H3733E0
-3733E0:lA5:heart|H3733F8
-3733F8:lA4:init|H373410
-373410:lAD:kernel_config|H373428
-373428:lAA:kernel_sup|H373440
-373440:lAA:net_kernel|H373458
-373458:lA7:net_sup|H373470
-373470:lA3:rex|H373488
-373488:lA4:user|H3734A0
-3734A0:lA9:os_server|H3734B8
-3734B8:lAB:ddll_server|H3734D0
-3734D0:lA8:erl_epmd|H3734E8
-3734E8:lA7:inet_db|H373500
-373500:lA3:pg2|N
-373154:lH373184|H373190
-373184:t2:AC:applications,N
-373190:lH3731C0|H3731CC
-3731C0:t2:A15:included_applications,N
-3731CC:lH3731FC|H373208
-3731FC:t2:A3:env,H373238
-373238:lH373274|N
-373274:t2:AC:error_logger,A3:tty
-373208:lH373240|H37324C
-373240:t2:AC:start_phases,A9:undefined
-37324C:lH373280|H37328C
-373280:t2:A4:maxT,A8:infinity
-37328C:lH3732B4|H3732C0
-3732B4:t2:A4:maxP,A8:infinity
-3732C0:lH3732E8|N
-3732E8:t2:A3:mod,H373314
-373314:t2:A6:kernel,N
-373048:lN|N
-372E4C:t2:AD:$initial_call,H372EE4
-372EE4:t3:A3:gen,A7:init_it,H372ED0
-372E58:t2:AA:$ancestors,H372EF4
-372EF4:lP<0.1.0>|N
-=proc_dictionary:<0.7.0>
-H369B78
-H369B5C
-=proc_stack:<0.7.0>
-369d64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:H369C2C
-y1:P<0.5.0>
-369d70:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A12:application_master
-y2:A4:init
-y3:H369B2C
-=proc_heap:<0.7.0>
-369C2C:t6:A5:state,P<0.8.0>,H3697B0,N,I0,P<0.0.0>
-3697B0:t9:A9:appl_data,A6:kernel,H369B14,A9:undefined,H3697D8,H369A3C,N,A8:infinity,A8:infinity
-369A3C:lAB:application|H369A34
-369A34:lA16:application_controller|H369A2C
-369A2C:lA12:application_master|H369A24
-369A24:lA13:application_starter|H369A1C
-369A1C:lA4:auth|H369A14
-369A14:lA4:code|H369A0C
-369A0C:lA8:code_aux|H369A04
-369A04:lA8:packages|H3699FC
-3699FC:lAB:code_server|H3699F4
-3699F4:lA9:dist_util|H3699EC
-3699EC:lAF:erl_boot_server|H3699E4
-3699E4:lA10:erl_distribution|H3699DC
-3699DC:lAF:erl_prim_loader|H3699D4
-3699D4:lA9:erl_reply|H3699CC
-3699CC:lA6:erlang|H3699C4
-3699C4:lAD:error_handler|H3699BC
-3699BC:lAC:error_logger|H3699B4
-3699B4:lA4:file|H3699AC
-3699AC:lAB:file_server|H3699A4
-3699A4:lAF:old_file_server|H36999C
-36999C:lAE:file_io_server|H369994
-369994:lA9:prim_file|H36998C
-36998C:lA6:global|H369984
-369984:lAC:global_group|H36997C
-36997C:lAD:global_search|H369974
-369974:lA5:group|H36996C
-36996C:lA5:heart|H369964
-369964:lA13:hipe_unified_loader|H36995C
-36995C:lA11:hipe_sparc_loader|H369954
-369954:lAF:hipe_x86_loader|H36994C
-36994C:lA9:inet6_tcp|H369944
-369944:lAE:inet6_tcp_dist|H36993C
-36993C:lA9:inet6_udp|H369934
-369934:lAB:inet_config|H36992C
-36992C:lAA:inet_hosts|H369924
-369924:lA13:inet_gethost_native|H36991C
-36991C:lAD:inet_tcp_dist|H369914
-369914:lA4:init|H36990C
-36990C:lA6:kernel|H369904
-369904:lAD:kernel_config|H3698FC
-3698FC:lA3:net|H3698F4
-3698F4:lA7:net_adm|H3698EC
-3698EC:lAA:net_kernel|H3698E4
-3698E4:lA2:os|H3698DC
-3698DC:lA8:ram_file|H3698D4
-3698D4:lA3:rpc|H3698CC
-3698CC:lA4:user|H3698C4
-3698C4:lA8:user_drv|H3698BC
-3698BC:lA8:user_sup|H3698B4
-3698B4:lA8:disk_log|H3698AC
-3698AC:lAA:disk_log_1|H3698A4
-3698A4:lAF:disk_log_server|H36989C
-36989C:lAC:disk_log_sup|H369894
-369894:lA7:dist_ac|H36988C
-36988C:lA8:erl_ddll|H369884
-369884:lA8:erl_epmd|H36987C
-36987C:lAA:erts_debug|H369874
-369874:lA7:gen_tcp|H36986C
-36986C:lA7:gen_udp|H369864
-369864:lA9:prim_inet|H36985C
-36985C:lA4:inet|H369854
-369854:lA7:inet_db|H36984C
-36984C:lA8:inet_dns|H369844
-369844:lAA:inet_parse|H36983C
-36983C:lA8:inet_res|H369834
-369834:lA8:inet_tcp|H36982C
-36982C:lA8:inet_udp|H369824
-369824:lA3:pg2|H36981C
-36981C:lA9:seq_trace|H369814
-369814:lA6:socks5|H36980C
-36980C:lAB:socks5_auth|H369804
-369804:lAA:socks5_tcp|H3697FC
-3697FC:lAA:socks5_udp|H3697F4
-3697F4:lAF:wrap_log_reader|H3697EC
-3697EC:lA4:zlib|H3697E4
-3697E4:lA9:otp_ring0|N
-3697D8:t2:A6:kernel,N
-369B14:lA16:application_controller|H369B0C
-369B0C:lA9:erl_reply|H369B04
-369B04:lA4:auth|H369AFC
-369AFC:lAB:boot_server|H369AF4
-369AF4:lAB:code_server|H369AEC
-369AEC:lAF:disk_log_server|H369AE4
-369AE4:lAC:disk_log_sup|H369ADC
-369ADC:lAF:erl_prim_loader|H369AD4
-369AD4:lAC:error_logger|H369ACC
-369ACC:lAB:file_server|H369AC4
-369AC4:lAD:file_server_2|H369ABC
-369ABC:lAF:fixtable_server|H369AB4
-369AB4:lAC:global_group|H369AAC
-369AAC:lA12:global_name_server|H369AA4
-369AA4:lA5:heart|H369A9C
-369A9C:lA4:init|H369A94
-369A94:lAD:kernel_config|H369A8C
-369A8C:lAA:kernel_sup|H369A84
-369A84:lAA:net_kernel|H369A7C
-369A7C:lA7:net_sup|H369A74
-369A74:lA3:rex|H369A6C
-369A6C:lA4:user|H369A64
-369A64:lA9:os_server|H369A5C
-369A5C:lAB:ddll_server|H369A54
-369A54:lA8:erl_epmd|H369A4C
-369A4C:lA7:inet_db|H369A44
-369A44:lA3:pg2|N
-369B2C:lP<0.5.0>|H369B24
-369B24:lP<0.6.0>|H3697A8
-3697A8:lH3697B0|H369B1C
-369B1C:lA6:normal|N
-369B78:t2:AD:$initial_call,H369B68
-369B68:t3:A12:application_master,A4:init,H369B2C
-369B5C:t2:AA:$ancestors,H369B54
-369B54:lP<0.6.0>|N
-=proc_stack:<0.8.0>
-384ec0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H384BDC
-y1:A6:kernel
-y2:P<0.9.0>
-y3:P<0.7.0>
-=proc_heap:<0.8.0>
-384BDC:t2:A5:state,A3:tty
-=proc_dictionary:<0.9.0>
-H376850
-H37685C
-=proc_stack:<0.9.0>
-36bde8:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36B8E8
-y4:AA:kernel_sup
-y5:P<0.8.0>
-36be04:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3768D4
-=proc_heap:<0.9.0>
-36B8E8:tA:A5:state,H376868,AB:one_for_all,H36B8D4,N,I0,I1,N,A6:kernel,N
-36B8D4:lH36B8B0|H36B6E8
-36B8B0:t8:A5:child,P<0.24.0>,AF:kernel_safe_sup,H376BF0,A9:permanent,A8:infinity,AA:supervisor,H376C00
-376C00:lA6:kernel|N
-376BF0:t3:AA:supervisor,AA:start_link,H376C08
-376C08:lH376C10|H376C1C
-376C10:t2:A5:local,AF:kernel_safe_sup
-376C1C:lA6:kernel|H376C24
-376C24:lA4:safe|N
-36B6E8:lH36B6C4|H36B490
-36B6C4:t8:A5:child,P<0.23.0>,AD:kernel_config,H376BB4,A9:permanent,I2000,A6:worker,H376BC4
-376BC4:lAD:kernel_config|N
-376BB4:t3:AD:kernel_config,AA:start_link,N
-36B490:lH36B498|H36B4BC
-36B498:t8:A5:child,P<0.19.0>,A4:user,H376B70,A9:temporary,I2000,AA:supervisor,H376B80
-376B80:lA8:user_sup|N
-376B70:t3:A8:user_sup,A5:start,N
-36B4BC:lH36B4C4|H376CB0
-36B4C4:t8:A5:child,P<0.18.0>,AB:code_server,H376B0C,A9:permanent,I2000,A6:worker,H376B1C
-376B1C:lA4:code|N
-376B0C:t3:A4:code,AA:start_link,N
-376CB0:lH376CB8|H376CDC
-376CB8:t8:A5:child,P<0.17.0>,AB:file_server,H376AB8,A9:permanent,I2000,A6:worker,H376AC8
-376AC8:lAF:old_file_server|N
-376AB8:t3:AF:old_file_server,AA:start_link,N
-376CDC:lH376CE4|H376C2C
-376CE4:t8:A5:child,P<0.16.0>,AD:file_server_2,H376A58,A9:permanent,I2000,A6:worker,H376A68
-376A68:lA4:file|H376AB0
-376AB0:lAB:file_server|H376B04
-376B04:lAE:file_io_server|H376B68
-376B68:lA9:prim_file|N
-376A58:t3:AB:file_server,AA:start_link,N
-376C2C:lH376C34|H376C58
-376C34:t8:A5:child,P<0.15.0>,AC:global_group,H3769F4,A9:permanent,I2000,A6:worker,H376A04
-376A04:lAC:global_group|N
-3769F4:t3:AC:global_group,AA:start_link,N
-376C58:lH376C60|H376C84
-376C60:t8:A5:child,A9:undefined,A7:net_sup,H37696C,A9:permanent,A8:infinity,AA:supervisor,H37697C
-37697C:lA10:erl_distribution|N
-37696C:t3:A10:erl_distribution,AA:start_link,N
-376C84:lH376C8C|H3768A0
-376C8C:t8:A5:child,P<0.14.0>,A7:inet_db,H3768F4,A9:permanent,I2000,A6:worker,H376904
-376904:lA7:inet_db|N
-3768F4:t3:A7:inet_db,AA:start_link,N
-3768A0:lH376938|H37695C
-376938:t8:A5:child,P<0.11.0>,A12:global_name_server,H3769B0,A9:permanent,I2000,A6:worker,H3769C0
-3769C0:lA6:global|N
-3769B0:t3:A6:global,AA:start_link,N
-37695C:lH3769C8|N
-3769C8:t8:A5:child,P<0.10.0>,A3:rex,H376A38,A9:permanent,I2000,A6:worker,H376A48
-376A48:lA3:rpc|N
-376A38:t3:A3:rpc,AA:start_link,N
-376868:t2:A5:local,AA:kernel_sup
-3768D4:lAA:gen_server|H376964
-376964:lP<0.8.0>|H3769EC
-3769EC:lP<0.8.0>|H376A50
-376A50:lH376A9C|H376AA8
-376A9C:t2:A5:local,AA:kernel_sup
-376AA8:lAA:supervisor|H376AFC
-376AFC:lH376B50|H376B60
-376B50:t3:H376868,A6:kernel,N
-376B60:lN|N
-376850:t2:AD:$initial_call,H3768DC
-3768DC:t3:A3:gen,A7:init_it,H3768D4
-37685C:t2:AA:$ancestors,H3768EC
-3768EC:lP<0.8.0>|N
-=proc_dictionary:<0.10.0>
-H367A10
-H3679F4
-=proc_stack:<0.10.0>
-367cec:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A3:rpc
-y3:H367AA8
-y4:A3:rex
-y5:P<0.9.0>
-367d08:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3679C4
-=proc_heap:<0.10.0>
-367AA8:t2:I0,A3:nil
-3679C4:lAA:gen_server|H3679BC
-3679BC:lP<0.9.0>|H3679B4
-3679B4:lP<0.9.0>|H367988
-367988:lH367990|H3679AC
-367990:t2:A5:local,A3:rex
-3679AC:lA3:rpc|H3679A4
-3679A4:lN|H36799C
-36799C:lN|N
-367A10:t2:AD:$initial_call,H367A00
-367A00:t3:A3:gen,A7:init_it,H3679C4
-3679F4:t2:AA:$ancestors,H3679EC
-3679EC:lAA:kernel_sup|H3679CC
-3679CC:lP<0.8.0>|N
-=proc_dictionary:<0.11.0>
-H36ADD8
-H36ADBC
-=proc_stack:<0.11.0>
-36b0b4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A6:global
-y3:H36AF0C
-y4:A12:global_name_server
-y5:P<0.9.0>
-36b0d0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36AD8C
-=proc_heap:<0.11.0>
-36AF0C:t9:A5:state,A4:true,N,N,N,N,AD:nonode@nohost,P<0.12.0>,P<0.13.0>
-36AD8C:lAA:gen_server|H36AD84
-36AD84:lP<0.9.0>|H36AD7C
-36AD7C:lP<0.9.0>|H36AD50
-36AD50:lH36AD58|H36AD74
-36AD58:t2:A5:local,A12:global_name_server
-36AD74:lA6:global|H36AD6C
-36AD6C:lN|H36AD64
-36AD64:lN|N
-36ADD8:t2:AD:$initial_call,H36ADC8
-36ADC8:t3:A3:gen,A7:init_it,H36AD8C
-36ADBC:t2:AA:$ancestors,H36ADB4
-36ADB4:lAA:kernel_sup|H36AD94
-36AD94:lP<0.8.0>|N
-=proc_stack:<0.12.0>
-36921c:SReturn addr 0x261184 (global:init_the_locker/1 + 112)
-y0:N
-y1:N
-y2:N
-y3:N
-y4:N
-y5:N
-y6:A8:infinity
-y7:H368EB0
-y8:P<0.11.0>
-369244:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-=proc_heap:<0.12.0>
-368EB0:t3:A5:multi,A9:undefined,N
-=proc_stack:<0.13.0>
-3695d0:SReturn addr 0x2651AC (global:loop_the_deleter/1 + 36)
-y0:A8:infinity
-y1:N
-y2:P<0.11.0>
-3695e0:SReturn addr 0x2654F8 (global:'-start_the_deleter/1-fun-0-'/1 + 20)
-y0:N
-y1:N
-y2:P<0.11.0>
-3695f0:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.13.0>
-=proc_dictionary:<0.14.0>
-H36A998
-H36A9A4
-=proc_stack:<0.14.0>
-372e0c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:inet_db
-y3:H36A9B0
-y4:A7:inet_db
-y5:P<0.9.0>
-372e28:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36A9C8
-=proc_heap:<0.14.0>
-36A9B0:t5:A5:state,A7:inet_db,AA:inet_cache,AA:inet_hosts,H36A9E8
-36A9E8:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000060000000000000000
-36A9C8:lAA:gen_server|H36A9F8
-36A9F8:lP<0.9.0>|H36AA08
-36AA08:lP<0.9.0>|H36AA10
-36AA10:lH36AA18|H36AA24
-36AA18:t2:A5:local,A7:inet_db
-36AA24:lA7:inet_db|H36AA2C
-36AA2C:lN|H36AA34
-36AA34:lN|N
-36A998:t2:AD:$initial_call,H36A9D0
-36A9D0:t3:A3:gen,A7:init_it,H36A9C8
-36A9A4:t2:AA:$ancestors,H36A9E0
-36A9E0:lAA:kernel_sup|H36AA00
-36AA00:lP<0.8.0>|N
-=proc_dictionary:<0.15.0>
-H372788
-H3727F8
-H37276C
-H37280C
-H372820
-=proc_stack:<0.15.0>
-372a64:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AC:global_group
-y3:H3728C8
-y4:AC:global_group
-y5:P<0.9.0>
-372a80:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37273C
-=proc_heap:<0.15.0>
-3728C8:tC:A5:state,A7:no_conf,A4:true,N,N,N,N,N,AD:nonode@nohost,N,A6:normal,A6:normal
-37273C:lAA:gen_server|H372734
-372734:lP<0.9.0>|H37272C
-37272C:lP<0.9.0>|H372700
-372700:lH372708|H372724
-372708:t2:A5:local,AC:global_group
-372724:lAC:global_group|H37271C
-37271C:lN|H372714
-372714:lN|N
-372788:t2:AD:$initial_call,H372778
-372778:t3:A3:gen,A7:init_it,H37273C
-3727F8:t2:A10:registered_names,H3727F0
-3727F0:lA9:undefined|N
-37276C:t2:AA:$ancestors,H372764
-372764:lAA:kernel_sup|H372744
-372744:lP<0.8.0>|N
-37280C:t2:A4:send,H372804
-372804:lA9:undefined|N
-372820:t2:AC:whereis_name,H372818
-372818:lA9:undefined|N
-=proc_dictionary:<0.16.0>
-H37B918
-H37B924
-=proc_stack:<0.16.0>
-3d303c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AB:file_server
-y3:p<0.4>
-y4:AD:file_server_2
-y5:P<0.9.0>
-3d3058:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37B930
-=proc_heap:<0.16.0>
-37B930:lAA:gen_server|H37B950
-37B950:lP<0.9.0>|H37B960
-37B960:lP<0.9.0>|H37B968
-37B968:lH37B970|H37B97C
-37B970:t2:A5:local,AD:file_server_2
-37B97C:lAB:file_server|H37B984
-37B984:lN|H37B98C
-37B98C:lN|N
-37B918:t2:AD:$initial_call,H37B938
-37B938:t3:A3:gen,A7:init_it,H37B930
-37B924:t2:AA:$ancestors,H37B948
-37B948:lAA:kernel_sup|H37B958
-37B958:lP<0.8.0>|N
-=proc_stack:<0.17.0>
-3763cc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H376084
-y1:P<0.16.0>
-y2:P<0.9.0>
-=proc_heap:<0.17.0>
-376084:E21:8372000364000D6E6F6E6F6465406E6F686F737400000000160000000000000000
-=proc_stack:<0.18.0>
-3b98e8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H38AE84
-y1:P<0.9.0>
-=proc_heap:<0.18.0>
-38AE84:t8:A5:state,P<0.9.0>,H3873BC,H38AEB8,I9,I10,A8:no_cache,AB:interactive
-38AEB8:lH3873D4|H38AEE0
-3873D4:lI46|N
-38AEE0:lH3873EC|H38AF10
-3873EC:lI47|H387404
-387404:lI99|H387424
-387424:lI108|H38744C
-38744C:lI101|H38747C
-38747C:lI97|H3874B4
-3874B4:lI114|H3874F4
-3874F4:lI99|H38753C
-38753C:lI97|H38758C
-38758C:lI115|H3875E4
-3875E4:lI101|H387644
-387644:lI47|H3876AC
-3876AC:lI111|H38771C
-38771C:lI116|H387794
-387794:lI112|H387814
-387814:lI47|H38789C
-38789C:lI101|H38792C
-38792C:lI114|H3879BC
-3879BC:lI116|H387A54
-387A54:lI115|H387AF4
-387AF4:lI47|H387B9C
-387B9C:lI108|H387C4C
-387C4C:lI105|H387D04
-387D04:lI98|H387DC4
-387DC4:lI47|H387E8C
-387E8C:lI107|H387F5C
-387F5C:lI101|H388034
-388034:lI114|H388114
-388114:lI110|H3881FC
-3881FC:lI101|H3882EC
-3882EC:lI108|H3883E4
-3883E4:lI47|H3884E4
-3884E4:lI101|H3885EC
-3885EC:lI98|H3886FC
-3886FC:lI105|H388814
-388814:lI110|N
-38AF10:lH38740C|H38AF48
-38740C:lI47|H38742C
-38742C:lI99|H387454
-387454:lI108|H387484
-387484:lI101|H3874BC
-3874BC:lI97|H3874FC
-3874FC:lI114|H387544
-387544:lI99|H387594
-387594:lI97|H3875EC
-3875EC:lI115|H38764C
-38764C:lI101|H3876B4
-3876B4:lI47|H387724
-387724:lI111|H38779C
-38779C:lI116|H38781C
-38781C:lI112|H3878A4
-3878A4:lI47|H387934
-387934:lI101|H3879C4
-3879C4:lI114|H387A5C
-387A5C:lI116|H387AFC
-387AFC:lI115|H387BA4
-387BA4:lI47|H387C54
-387C54:lI108|H387D0C
-387D0C:lI105|H387DCC
-387DCC:lI98|H387E94
-387E94:lI47|H387F64
-387F64:lI115|H38803C
-38803C:lI116|H38811C
-38811C:lI100|H388204
-388204:lI108|H3882F4
-3882F4:lI105|H3883EC
-3883EC:lI98|H3884EC
-3884EC:lI47|H3885F4
-3885F4:lI101|H388704
-388704:lI98|H38881C
-38881C:lI105|H38892C
-38892C:lI110|N
-38AF48:lH387434|H38AF70
-387434:lI47|H38745C
-38745C:lI99|H38748C
-38748C:lI108|H3874C4
-3874C4:lI101|H387504
-387504:lI97|H38754C
-38754C:lI114|H38759C
-38759C:lI99|H3875F4
-3875F4:lI97|H387654
-387654:lI115|H3876BC
-3876BC:lI101|H38772C
-38772C:lI47|H3877A4
-3877A4:lI111|H387824
-387824:lI116|H3878AC
-3878AC:lI112|H38793C
-38793C:lI47|H3879CC
-3879CC:lI101|H387A64
-387A64:lI114|H387B04
-387B04:lI116|H387BAC
-387BAC:lI115|H387C5C
-387C5C:lI47|H387D14
-387D14:lI108|H387DD4
-387DD4:lI105|H387E9C
-387E9C:lI98|H387F6C
-387F6C:lI47|H388044
-388044:lI119|H388124
-388124:lI101|H38820C
-38820C:lI98|H3882FC
-3882FC:lI116|H3883F4
-3883F4:lI111|H3884F4
-3884F4:lI111|H3885FC
-3885FC:lI108|H38870C
-38870C:lI47|H388824
-388824:lI101|H388934
-388934:lI98|H388A44
-388A44:lI105|H388B54
-388B54:lI110|N
-38AF70:lH387464|H38AF98
-387464:lI47|H387494
-387494:lI99|H3874CC
-3874CC:lI108|H38750C
-38750C:lI101|H387554
-387554:lI97|H3875A4
-3875A4:lI114|H3875FC
-3875FC:lI99|H38765C
-38765C:lI97|H3876C4
-3876C4:lI115|H387734
-387734:lI101|H3877AC
-3877AC:lI47|H38782C
-38782C:lI111|H3878B4
-3878B4:lI116|H387944
-387944:lI112|H3879D4
-3879D4:lI47|H387A6C
-387A6C:lI101|H387B0C
-387B0C:lI114|H387BB4
-387BB4:lI116|H387C64
-387C64:lI115|H387D1C
-387D1C:lI47|H387DDC
-387DDC:lI108|H387EA4
-387EA4:lI105|H387F74
-387F74:lI98|H38804C
-38804C:lI47|H38812C
-38812C:lI116|H388214
-388214:lI118|H388304
-388304:lI47|H3883FC
-3883FC:lI101|H3884FC
-3884FC:lI98|H388604
-388604:lI105|H388714
-388714:lI110|N
-38AF98:lH38749C|H38AFC0
-38749C:lI47|H3874D4
-3874D4:lI99|H387514
-387514:lI108|H38755C
-38755C:lI101|H3875AC
-3875AC:lI97|H387604
-387604:lI114|H387664
-387664:lI99|H3876CC
-3876CC:lI97|H38773C
-38773C:lI115|H3877B4
-3877B4:lI101|H387834
-387834:lI47|H3878BC
-3878BC:lI111|H38794C
-38794C:lI116|H3879DC
-3879DC:lI112|H387A74
-387A74:lI47|H387B14
-387B14:lI101|H387BBC
-387BBC:lI114|H387C6C
-387C6C:lI116|H387D24
-387D24:lI115|H387DE4
-387DE4:lI47|H387EAC
-387EAC:lI108|H387F7C
-387F7C:lI105|H388054
-388054:lI98|H388134
-388134:lI47|H38821C
-38821C:lI116|H38830C
-38830C:lI115|H388404
-388404:lI112|H388504
-388504:lI47|H38860C
-38860C:lI101|H38871C
-38871C:lI98|H38882C
-38882C:lI105|H38893C
-38893C:lI110|N
-38AFC0:lH3874DC|H38AFE8
-3874DC:lI47|H38751C
-38751C:lI99|H387564
-387564:lI108|H3875B4
-3875B4:lI101|H38760C
-38760C:lI97|H38766C
-38766C:lI114|H3876D4
-3876D4:lI99|H387744
-387744:lI97|H3877BC
-3877BC:lI115|H38783C
-38783C:lI101|H3878C4
-3878C4:lI47|H387954
-387954:lI111|H3879E4
-3879E4:lI116|H387A7C
-387A7C:lI112|H387B1C
-387B1C:lI47|H387BC4
-387BC4:lI101|H387C74
-387C74:lI114|H387D2C
-387D2C:lI116|H387DEC
-387DEC:lI115|H387EB4
-387EB4:lI47|H387F84
-387F84:lI108|H38805C
-38805C:lI105|H38813C
-38813C:lI98|H388224
-388224:lI47|H388314
-388314:lI116|H38840C
-38840C:lI111|H38850C
-38850C:lI111|H388614
-388614:lI108|H388724
-388724:lI115|H388834
-388834:lI47|H388944
-388944:lI101|H388A4C
-388A4C:lI98|H388B5C
-388B5C:lI105|H388C6C
-388C6C:lI110|N
-38AFE8:lH387524|H38B008
-387524:lI47|H38756C
-38756C:lI99|H3875BC
-3875BC:lI108|H387614
-387614:lI101|H387674
-387674:lI97|H3876DC
-3876DC:lI114|H38774C
-38774C:lI99|H3877C4
-3877C4:lI97|H387844
-387844:lI115|H3878CC
-3878CC:lI101|H38795C
-38795C:lI47|H3879EC
-3879EC:lI111|H387A84
-387A84:lI116|H387B24
-387B24:lI112|H387BCC
-387BCC:lI47|H387C7C
-387C7C:lI101|H387D34
-387D34:lI114|H387DF4
-387DF4:lI116|H387EBC
-387EBC:lI115|H387F8C
-387F8C:lI47|H388064
-388064:lI108|H388144
-388144:lI105|H38822C
-38822C:lI98|H38831C
-38831C:lI47|H388414
-388414:lI116|H388514
-388514:lI111|H38861C
-38861C:lI111|H38872C
-38872C:lI108|H38883C
-38883C:lI98|H38894C
-38894C:lI97|H388A54
-388A54:lI114|H388B64
-388B64:lI47|H388C74
-388C74:lI101|H388D84
-388D84:lI98|H388E9C
-388E9C:lI105|H388FB4
-388FB4:lI110|N
-38B008:lH387574|H38B018
-387574:lI47|H3875C4
-3875C4:lI99|H38761C
-38761C:lI108|H38767C
-38767C:lI101|H3876E4
-3876E4:lI97|H387754
-387754:lI114|H3877CC
-3877CC:lI99|H38784C
-38784C:lI97|H3878D4
-3878D4:lI115|H387964
-387964:lI101|H3879F4
-3879F4:lI47|H387A8C
-387A8C:lI111|H387B2C
-387B2C:lI116|H387BD4
-387BD4:lI112|H387C84
-387C84:lI47|H387D3C
-387D3C:lI101|H387DFC
-387DFC:lI114|H387EC4
-387EC4:lI116|H387F94
-387F94:lI115|H38806C
-38806C:lI47|H38814C
-38814C:lI108|H388234
-388234:lI105|H388324
-388324:lI98|H38841C
-38841C:lI47|H38851C
-38851C:lI116|H388624
-388624:lI101|H388734
-388734:lI115|H388844
-388844:lI116|H388954
-388954:lI95|H388A5C
-388A5C:lI115|H388B6C
-388B6C:lI101|H388C7C
-388C7C:lI114|H388D8C
-388D8C:lI118|H388EA4
-388EA4:lI101|H388FBC
-388FBC:lI114|H3890D4
-3890D4:lI47|H3891EC
-3891EC:lI101|H3892FC
-3892FC:lI98|H38940C
-38940C:lI105|H38951C
-38951C:lI110|N
-38B018:lH3875CC|H38AE7C
-3875CC:lI47|H387624
-387624:lI99|H387684
-387684:lI108|H3876EC
-3876EC:lI101|H38775C
-38775C:lI97|H3877D4
-3877D4:lI114|H387854
-387854:lI99|H3878DC
-3878DC:lI97|H38796C
-38796C:lI115|H3879FC
-3879FC:lI101|H387A94
-387A94:lI47|H387B34
-387B34:lI111|H387BDC
-387BDC:lI116|H387C8C
-387C8C:lI112|H387D44
-387D44:lI47|H387E04
-387E04:lI101|H387ECC
-387ECC:lI114|H387F9C
-387F9C:lI116|H388074
-388074:lI115|H388154
-388154:lI47|H38823C
-38823C:lI108|H38832C
-38832C:lI105|H388424
-388424:lI98|H388524
-388524:lI47|H38862C
-38862C:lI115|H38873C
-38873C:lI115|H38884C
-38884C:lI108|H38895C
-38895C:lI47|H388A64
-388A64:lI101|H388B74
-388B74:lI98|H388C84
-388C84:lI105|H388D94
-388D94:lI110|N
-38AE7C:lH38762C|H38AEB0
-38762C:lI47|H38768C
-38768C:lI99|H3876F4
-3876F4:lI108|H387764
-387764:lI101|H3877DC
-3877DC:lI97|H38785C
-38785C:lI114|H3878E4
-3878E4:lI99|H387974
-387974:lI97|H387A04
-387A04:lI115|H387A9C
-387A9C:lI101|H387B3C
-387B3C:lI47|H387BE4
-387BE4:lI111|H387C94
-387C94:lI116|H387D4C
-387D4C:lI112|H387E0C
-387E0C:lI47|H387ED4
-387ED4:lI101|H387FA4
-387FA4:lI114|H38807C
-38807C:lI116|H38815C
-38815C:lI115|H388244
-388244:lI47|H388334
-388334:lI108|H38842C
-38842C:lI105|H38852C
-38852C:lI98|H388634
-388634:lI47|H388744
-388744:lI115|H388854
-388854:lI110|H388964
-388964:lI109|H388A6C
-388A6C:lI112|H388B7C
-388B7C:lI47|H388C8C
-388C8C:lI101|H388D9C
-388D9C:lI98|H388EAC
-388EAC:lI105|H388FC4
-388FC4:lI110|N
-38AEB0:lH387694|H38AED8
-387694:lI47|H3876FC
-3876FC:lI99|H38776C
-38776C:lI108|H3877E4
-3877E4:lI101|H387864
-387864:lI97|H3878EC
-3878EC:lI114|H38797C
-38797C:lI99|H387A0C
-387A0C:lI97|H387AA4
-387AA4:lI115|H387B44
-387B44:lI101|H387BEC
-387BEC:lI47|H387C9C
-387C9C:lI111|H387D54
-387D54:lI116|H387E14
-387E14:lI112|H387EDC
-387EDC:lI47|H387FAC
-387FAC:lI101|H388084
-388084:lI114|H388164
-388164:lI116|H38824C
-38824C:lI115|H38833C
-38833C:lI47|H388434
-388434:lI108|H388534
-388534:lI105|H38863C
-38863C:lI98|H38874C
-38874C:lI47|H38885C
-38885C:lI115|H38896C
-38896C:lI97|H388A74
-388A74:lI115|H388B84
-388B84:lI108|H388C94
-388C94:lI47|H388DA4
-388DA4:lI101|H388EB4
-388EB4:lI98|H388FCC
-388FCC:lI105|H3890DC
-3890DC:lI110|N
-38AED8:lH387704|H38AF08
-387704:lI47|H387774
-387774:lI99|H3877EC
-3877EC:lI108|H38786C
-38786C:lI101|H3878F4
-3878F4:lI97|H387984
-387984:lI114|H387A14
-387A14:lI99|H387AAC
-387AAC:lI97|H387B4C
-387B4C:lI115|H387BF4
-387BF4:lI101|H387CA4
-387CA4:lI47|H387D5C
-387D5C:lI111|H387E1C
-387E1C:lI116|H387EE4
-387EE4:lI112|H387FB4
-387FB4:lI47|H38808C
-38808C:lI101|H38816C
-38816C:lI114|H388254
-388254:lI116|H388344
-388344:lI115|H38843C
-38843C:lI47|H38853C
-38853C:lI108|H388644
-388644:lI105|H388754
-388754:lI98|H388864
-388864:lI47|H388974
-388974:lI114|H388A7C
-388A7C:lI117|H388B8C
-388B8C:lI110|H388C9C
-388C9C:lI116|H388DAC
-388DAC:lI105|H388EBC
-388EBC:lI109|H388FD4
-388FD4:lI101|H3890E4
-3890E4:lI95|H3891F4
-3891F4:lI116|H389304
-389304:lI111|H389414
-389414:lI111|H389524
-389524:lI108|H389624
-389624:lI115|H38971C
-38971C:lI47|H389814
-389814:lI101|H38990C
-38990C:lI98|H389A04
-389A04:lI105|H389AE4
-389AE4:lI110|N
-38AF08:lH38777C|H38AF40
-38777C:lI47|H3877F4
-3877F4:lI99|H387874
-387874:lI108|H3878FC
-3878FC:lI101|H38798C
-38798C:lI97|H387A1C
-387A1C:lI114|H387AB4
-387AB4:lI99|H387B54
-387B54:lI97|H387BFC
-387BFC:lI115|H387CAC
-387CAC:lI101|H387D64
-387D64:lI47|H387E24
-387E24:lI111|H387EEC
-387EEC:lI116|H387FBC
-387FBC:lI112|H388094
-388094:lI47|H388174
-388174:lI101|H38825C
-38825C:lI114|H38834C
-38834C:lI116|H388444
-388444:lI115|H388544
-388544:lI47|H38864C
-38864C:lI108|H38875C
-38875C:lI105|H38886C
-38886C:lI98|H38897C
-38897C:lI47|H388A84
-388A84:lI114|H388B94
-388B94:lI115|H388CA4
-388CA4:lI104|H388DB4
-388DB4:lI101|H388EC4
-388EC4:lI108|H388FDC
-388FDC:lI108|H3890EC
-3890EC:lI47|H3891FC
-3891FC:lI101|H38930C
-38930C:lI98|H38941C
-38941C:lI105|H38952C
-38952C:lI110|N
-38AF40:lH3877FC|H38AF68
-3877FC:lI47|H38787C
-38787C:lI99|H387904
-387904:lI108|H387994
-387994:lI101|H387A24
-387A24:lI97|H387ABC
-387ABC:lI114|H387B5C
-387B5C:lI99|H387C04
-387C04:lI97|H387CB4
-387CB4:lI115|H387D6C
-387D6C:lI101|H387E2C
-387E2C:lI47|H387EF4
-387EF4:lI111|H387FC4
-387FC4:lI116|H38809C
-38809C:lI112|H38817C
-38817C:lI47|H388264
-388264:lI101|H388354
-388354:lI114|H38844C
-38844C:lI116|H38854C
-38854C:lI115|H388654
-388654:lI47|H388764
-388764:lI108|H388874
-388874:lI105|H388984
-388984:lI98|H388A8C
-388A8C:lI47|H388B9C
-388B9C:lI112|H388CAC
-388CAC:lI109|H388DBC
-388DBC:lI97|H388ECC
-388ECC:lI110|H388FE4
-388FE4:lI47|H3890F4
-3890F4:lI101|H389204
-389204:lI98|H389314
-389314:lI105|H389424
-389424:lI110|N
-38AF68:lH387884|H38AF90
-387884:lI47|H38790C
-38790C:lI99|H38799C
-38799C:lI108|H387A2C
-387A2C:lI101|H387AC4
-387AC4:lI97|H387B64
-387B64:lI114|H387C0C
-387C0C:lI99|H387CBC
-387CBC:lI97|H387D74
-387D74:lI115|H387E34
-387E34:lI101|H387EFC
-387EFC:lI47|H387FCC
-387FCC:lI111|H3880A4
-3880A4:lI116|H388184
-388184:lI112|H38826C
-38826C:lI47|H38835C
-38835C:lI101|H388454
-388454:lI114|H388554
-388554:lI116|H38865C
-38865C:lI115|H38876C
-38876C:lI47|H38887C
-38887C:lI108|H38898C
-38898C:lI105|H388A94
-388A94:lI98|H388BA4
-388BA4:lI47|H388CB4
-388CB4:lI112|H388DC4
-388DC4:lI97|H388ED4
-388ED4:lI114|H388FEC
-388FEC:lI115|H3890FC
-3890FC:lI101|H38920C
-38920C:lI116|H38931C
-38931C:lI111|H38942C
-38942C:lI111|H389534
-389534:lI108|H38962C
-38962C:lI115|H389724
-389724:lI47|H38981C
-38981C:lI101|H389914
-389914:lI98|H389A0C
-389A0C:lI105|H389AEC
-389AEC:lI110|N
-38AF90:lH387914|H38AFB8
-387914:lI47|H3879A4
-3879A4:lI99|H387A34
-387A34:lI108|H387ACC
-387ACC:lI101|H387B6C
-387B6C:lI97|H387C14
-387C14:lI114|H387CC4
-387CC4:lI99|H387D7C
-387D7C:lI97|H387E3C
-387E3C:lI115|H387F04
-387F04:lI101|H387FD4
-387FD4:lI47|H3880AC
-3880AC:lI111|H38818C
-38818C:lI116|H388274
-388274:lI112|H388364
-388364:lI47|H38845C
-38845C:lI101|H38855C
-38855C:lI114|H388664
-388664:lI116|H388774
-388774:lI115|H388884
-388884:lI47|H388994
-388994:lI108|H388A9C
-388A9C:lI105|H388BAC
-388BAC:lI98|H388CBC
-388CBC:lI47|H388DCC
-388DCC:lI111|H388EDC
-388EDC:lI116|H388FF4
-388FF4:lI112|H389104
-389104:lI95|H389214
-389214:lI109|H389324
-389324:lI105|H389434
-389434:lI98|H38953C
-38953C:lI115|H389634
-389634:lI47|H38972C
-38972C:lI101|H389824
-389824:lI98|H38991C
-38991C:lI105|H389A14
-389A14:lI110|N
-38AFB8:lH3879AC|H38AFE0
-3879AC:lI47|H387A3C
-387A3C:lI99|H387AD4
-387AD4:lI108|H387B74
-387B74:lI101|H387C1C
-387C1C:lI97|H387CCC
-387CCC:lI114|H387D84
-387D84:lI99|H387E44
-387E44:lI97|H387F0C
-387F0C:lI115|H387FDC
-387FDC:lI101|H3880B4
-3880B4:lI47|H388194
-388194:lI111|H38827C
-38827C:lI116|H38836C
-38836C:lI112|H388464
-388464:lI47|H388564
-388564:lI101|H38866C
-38866C:lI114|H38877C
-38877C:lI116|H38888C
-38888C:lI115|H38899C
-38899C:lI47|H388AA4
-388AA4:lI108|H388BB4
-388BB4:lI105|H388CC4
-388CC4:lI98|H388DD4
-388DD4:lI47|H388EE4
-388EE4:lI111|H388FFC
-388FFC:lI115|H38910C
-38910C:lI95|H38921C
-38921C:lI109|H38932C
-38932C:lI111|H38943C
-38943C:lI110|H389544
-389544:lI47|H38963C
-38963C:lI101|H389734
-389734:lI98|H38982C
-38982C:lI105|H389924
-389924:lI110|N
-38AFE0:lH387A44|H38B000
-387A44:lI47|H387ADC
-387ADC:lI99|H387B7C
-387B7C:lI108|H387C24
-387C24:lI101|H387CD4
-387CD4:lI97|H387D8C
-387D8C:lI114|H387E4C
-387E4C:lI99|H387F14
-387F14:lI97|H387FE4
-387FE4:lI115|H3880BC
-3880BC:lI101|H38819C
-38819C:lI47|H388284
-388284:lI111|H388374
-388374:lI116|H38846C
-38846C:lI112|H38856C
-38856C:lI47|H388674
-388674:lI101|H388784
-388784:lI114|H388894
-388894:lI116|H3889A4
-3889A4:lI115|H388AAC
-388AAC:lI47|H388BBC
-388BBC:lI108|H388CCC
-388CCC:lI105|H388DDC
-388DDC:lI98|H388EEC
-388EEC:lI47|H389004
-389004:lI111|H389114
-389114:lI114|H389224
-389224:lI98|H389334
-389334:lI101|H389444
-389444:lI114|H38954C
-38954C:lI47|H389644
-389644:lI101|H38973C
-38973C:lI98|H389834
-389834:lI105|H38992C
-38992C:lI110|N
-38B000:lH387AE4|H38B010
-387AE4:lI47|H387B84
-387B84:lI99|H387C2C
-387C2C:lI108|H387CDC
-387CDC:lI101|H387D94
-387D94:lI97|H387E54
-387E54:lI114|H387F1C
-387F1C:lI99|H387FEC
-387FEC:lI97|H3880C4
-3880C4:lI115|H3881A4
-3881A4:lI101|H38828C
-38828C:lI47|H38837C
-38837C:lI111|H388474
-388474:lI116|H388574
-388574:lI112|H38867C
-38867C:lI47|H38878C
-38878C:lI101|H38889C
-38889C:lI114|H3889AC
-3889AC:lI116|H388AB4
-388AB4:lI115|H388BC4
-388BC4:lI47|H388CD4
-388CD4:lI108|H388DE4
-388DE4:lI105|H388EF4
-388EF4:lI98|H38900C
-38900C:lI47|H38911C
-38911C:lI111|H38922C
-38922C:lI100|H38933C
-38933C:lI98|H38944C
-38944C:lI99|H389554
-389554:lI47|H38964C
-38964C:lI101|H389744
-389744:lI98|H38983C
-38983C:lI105|H389934
-389934:lI110|N
-38B010:lH387B8C|H38B020
-387B8C:lI47|H387C34
-387C34:lI99|H387CE4
-387CE4:lI108|H387D9C
-387D9C:lI101|H387E5C
-387E5C:lI97|H387F24
-387F24:lI114|H387FF4
-387FF4:lI99|H3880CC
-3880CC:lI97|H3881AC
-3881AC:lI115|H388294
-388294:lI101|H388384
-388384:lI47|H38847C
-38847C:lI111|H38857C
-38857C:lI116|H388684
-388684:lI112|H388794
-388794:lI47|H3888A4
-3888A4:lI101|H3889B4
-3889B4:lI114|H388ABC
-388ABC:lI116|H388BCC
-388BCC:lI115|H388CDC
-388CDC:lI47|H388DEC
-388DEC:lI108|H388EFC
-388EFC:lI105|H389014
-389014:lI98|H389124
-389124:lI47|H389234
-389234:lI111|H389344
-389344:lI98|H389454
-389454:lI115|H38955C
-38955C:lI101|H389654
-389654:lI114|H38974C
-38974C:lI118|H389844
-389844:lI101|H38993C
-38993C:lI114|H389A1C
-389A1C:lI47|H389AF4
-389AF4:lI101|H389BBC
-389BBC:lI98|H389C84
-389C84:lI105|H389D4C
-389D4C:lI110|N
-38B020:lH387C3C|H38B028
-387C3C:lI47|H387CEC
-387CEC:lI99|H387DA4
-387DA4:lI108|H387E64
-387E64:lI101|H387F2C
-387F2C:lI97|H387FFC
-387FFC:lI114|H3880D4
-3880D4:lI99|H3881B4
-3881B4:lI97|H38829C
-38829C:lI115|H38838C
-38838C:lI101|H388484
-388484:lI47|H388584
-388584:lI111|H38868C
-38868C:lI116|H38879C
-38879C:lI112|H3888AC
-3888AC:lI47|H3889BC
-3889BC:lI101|H388AC4
-388AC4:lI114|H388BD4
-388BD4:lI116|H388CE4
-388CE4:lI115|H388DF4
-388DF4:lI47|H388F04
-388F04:lI108|H38901C
-38901C:lI105|H38912C
-38912C:lI98|H38923C
-38923C:lI47|H38934C
-38934C:lI109|H38945C
-38945C:lI110|H389564
-389564:lI101|H38965C
-38965C:lI115|H389754
-389754:lI105|H38984C
-38984C:lI97|H389944
-389944:lI95|H389A24
-389A24:lI115|H389AFC
-389AFC:lI101|H389BC4
-389BC4:lI115|H389C8C
-389C8C:lI115|H389D54
-389D54:lI105|H389E14
-389E14:lI111|H389ECC
-389ECC:lI110|H389F7C
-389F7C:lI47|H38A01C
-38A01C:lI101|H38A0AC
-38A0AC:lI98|H38A12C
-38A12C:lI105|H38A19C
-38A19C:lI110|N
-38B028:lH387CF4|H38B030
-387CF4:lI47|H387DAC
-387DAC:lI99|H387E6C
-387E6C:lI108|H387F34
-387F34:lI101|H388004
-388004:lI97|H3880DC
-3880DC:lI114|H3881BC
-3881BC:lI99|H3882A4
-3882A4:lI97|H388394
-388394:lI115|H38848C
-38848C:lI101|H38858C
-38858C:lI47|H388694
-388694:lI111|H3887A4
-3887A4:lI116|H3888B4
-3888B4:lI112|H3889C4
-3889C4:lI47|H388ACC
-388ACC:lI101|H388BDC
-388BDC:lI114|H388CEC
-388CEC:lI116|H388DFC
-388DFC:lI115|H388F0C
-388F0C:lI47|H389024
-389024:lI108|H389134
-389134:lI105|H389244
-389244:lI98|H389354
-389354:lI47|H389464
-389464:lI109|H38956C
-38956C:lI110|H389664
-389664:lI101|H38975C
-38975C:lI115|H389854
-389854:lI105|H38994C
-38994C:lI97|H389A2C
-389A2C:lI47|H389B04
-389B04:lI101|H389BCC
-389BCC:lI98|H389C94
-389C94:lI105|H389D5C
-389D5C:lI110|N
-38B030:lH387DB4|H38B038
-387DB4:lI47|H387E74
-387E74:lI99|H387F3C
-387F3C:lI108|H38800C
-38800C:lI101|H3880E4
-3880E4:lI97|H3881C4
-3881C4:lI114|H3882AC
-3882AC:lI99|H38839C
-38839C:lI97|H388494
-388494:lI115|H388594
-388594:lI101|H38869C
-38869C:lI47|H3887AC
-3887AC:lI111|H3888BC
-3888BC:lI116|H3889CC
-3889CC:lI112|H388AD4
-388AD4:lI47|H388BE4
-388BE4:lI101|H388CF4
-388CF4:lI114|H388E04
-388E04:lI116|H388F14
-388F14:lI115|H38902C
-38902C:lI47|H38913C
-38913C:lI108|H38924C
-38924C:lI105|H38935C
-38935C:lI98|H38946C
-38946C:lI47|H389574
-389574:lI109|H38966C
-38966C:lI110|H389764
-389764:lI101|H38985C
-38985C:lI109|H389954
-389954:lI111|H389A34
-389A34:lI115|H389B0C
-389B0C:lI121|H389BD4
-389BD4:lI110|H389C9C
-389C9C:lI101|H389D64
-389D64:lI47|H389E1C
-389E1C:lI101|H389ED4
-389ED4:lI98|H389F84
-389F84:lI105|H38A024
-38A024:lI110|N
-38B038:lH387E7C|H38B040
-387E7C:lI47|H387F44
-387F44:lI99|H388014
-388014:lI108|H3880EC
-3880EC:lI101|H3881CC
-3881CC:lI97|H3882B4
-3882B4:lI114|H3883A4
-3883A4:lI99|H38849C
-38849C:lI97|H38859C
-38859C:lI115|H3886A4
-3886A4:lI101|H3887B4
-3887B4:lI47|H3888C4
-3888C4:lI111|H3889D4
-3889D4:lI116|H388ADC
-388ADC:lI112|H388BEC
-388BEC:lI47|H388CFC
-388CFC:lI101|H388E0C
-388E0C:lI114|H388F1C
-388F1C:lI116|H389034
-389034:lI115|H389144
-389144:lI47|H389254
-389254:lI108|H389364
-389364:lI105|H389474
-389474:lI98|H38957C
-38957C:lI47|H389674
-389674:lI109|H38976C
-38976C:lI101|H389864
-389864:lI103|H38995C
-38995C:lI97|H389A3C
-389A3C:lI99|H389B14
-389B14:lI111|H389BDC
-389BDC:lI47|H389CA4
-389CA4:lI101|H389D6C
-389D6C:lI98|H389E24
-389E24:lI105|H389EDC
-389EDC:lI110|N
-38B040:lH387F4C|H38B048
-387F4C:lI47|H38801C
-38801C:lI99|H3880F4
-3880F4:lI108|H3881D4
-3881D4:lI101|H3882BC
-3882BC:lI97|H3883AC
-3883AC:lI114|H3884A4
-3884A4:lI99|H3885A4
-3885A4:lI97|H3886AC
-3886AC:lI115|H3887BC
-3887BC:lI101|H3888CC
-3888CC:lI47|H3889DC
-3889DC:lI111|H388AE4
-388AE4:lI116|H388BF4
-388BF4:lI112|H388D04
-388D04:lI47|H388E14
-388E14:lI101|H388F24
-388F24:lI114|H38903C
-38903C:lI116|H38914C
-38914C:lI115|H38925C
-38925C:lI47|H38936C
-38936C:lI108|H38947C
-38947C:lI105|H389584
-389584:lI98|H38967C
-38967C:lI47|H389774
-389774:lI106|H38986C
-38986C:lI105|H389964
-389964:lI110|H389A44
-389A44:lI116|H389B1C
-389B1C:lI101|H389BE4
-389BE4:lI114|H389CAC
-389CAC:lI102|H389D74
-389D74:lI97|H389E2C
-389E2C:lI99|H389EE4
-389EE4:lI101|N
-38B048:lH388024|H38B050
-388024:lI47|H3880FC
-3880FC:lI99|H3881DC
-3881DC:lI108|H3882C4
-3882C4:lI101|H3883B4
-3883B4:lI97|H3884AC
-3884AC:lI114|H3885AC
-3885AC:lI99|H3886B4
-3886B4:lI97|H3887C4
-3887C4:lI115|H3888D4
-3888D4:lI101|H3889E4
-3889E4:lI47|H388AEC
-388AEC:lI111|H388BFC
-388BFC:lI116|H388D0C
-388D0C:lI112|H388E1C
-388E1C:lI47|H388F2C
-388F2C:lI101|H389044
-389044:lI114|H389154
-389154:lI116|H389264
-389264:lI115|H389374
-389374:lI47|H389484
-389484:lI108|H38958C
-38958C:lI105|H389684
-389684:lI98|H38977C
-38977C:lI47|H389874
-389874:lI105|H38996C
-38996C:lI110|H389A4C
-389A4C:lI101|H389B24
-389B24:lI116|H389BEC
-389BEC:lI115|H389CB4
-389CB4:lI47|H389D7C
-389D7C:lI101|H389E34
-389E34:lI98|H389EEC
-389EEC:lI105|H389F8C
-389F8C:lI110|N
-38B050:lH388104|H38B058
-388104:lI47|H3881E4
-3881E4:lI99|H3882CC
-3882CC:lI108|H3883BC
-3883BC:lI101|H3884B4
-3884B4:lI97|H3885B4
-3885B4:lI114|H3886BC
-3886BC:lI99|H3887CC
-3887CC:lI97|H3888DC
-3888DC:lI115|H3889EC
-3889EC:lI101|H388AF4
-388AF4:lI47|H388C04
-388C04:lI111|H388D14
-388D14:lI116|H388E24
-388E24:lI112|H388F34
-388F34:lI47|H38904C
-38904C:lI101|H38915C
-38915C:lI114|H38926C
-38926C:lI116|H38937C
-38937C:lI115|H38948C
-38948C:lI47|H389594
-389594:lI108|H38968C
-38968C:lI105|H389784
-389784:lI98|H38987C
-38987C:lI47|H389974
-389974:lI105|H389A54
-389A54:lI99|H389B2C
-389B2C:lI47|H389BF4
-389BF4:lI101|H389CBC
-389CBC:lI98|H389D84
-389D84:lI105|H389E3C
-389E3C:lI110|N
-38B058:lH3881EC|H38B060
-3881EC:lI47|H3882D4
-3882D4:lI99|H3883C4
-3883C4:lI108|H3884BC
-3884BC:lI101|H3885BC
-3885BC:lI97|H3886C4
-3886C4:lI114|H3887D4
-3887D4:lI99|H3888E4
-3888E4:lI97|H3889F4
-3889F4:lI115|H388AFC
-388AFC:lI101|H388C0C
-388C0C:lI47|H388D1C
-388D1C:lI111|H388E2C
-388E2C:lI116|H388F3C
-388F3C:lI112|H389054
-389054:lI47|H389164
-389164:lI101|H389274
-389274:lI114|H389384
-389384:lI116|H389494
-389494:lI115|H38959C
-38959C:lI47|H389694
-389694:lI108|H38978C
-38978C:lI105|H389884
-389884:lI98|H38997C
-38997C:lI47|H389A5C
-389A5C:lI104|H389B34
-389B34:lI105|H389BFC
-389BFC:lI112|H389CC4
-389CC4:lI101|H389D8C
-389D8C:lI47|H389E44
-389E44:lI101|H389EF4
-389EF4:lI98|H389F94
-389F94:lI105|H38A02C
-38A02C:lI110|N
-38B060:lH3882DC|H38B068
-3882DC:lI47|H3883CC
-3883CC:lI99|H3884C4
-3884C4:lI108|H3885C4
-3885C4:lI101|H3886CC
-3886CC:lI97|H3887DC
-3887DC:lI114|H3888EC
-3888EC:lI99|H3889FC
-3889FC:lI97|H388B04
-388B04:lI115|H388C14
-388C14:lI101|H388D24
-388D24:lI47|H388E34
-388E34:lI111|H388F44
-388F44:lI116|H38905C
-38905C:lI112|H38916C
-38916C:lI47|H38927C
-38927C:lI101|H38938C
-38938C:lI114|H38949C
-38949C:lI116|H3895A4
-3895A4:lI115|H38969C
-38969C:lI47|H389794
-389794:lI108|H38988C
-38988C:lI105|H389984
-389984:lI98|H389A64
-389A64:lI47|H389B3C
-389B3C:lI103|H389C04
-389C04:lI115|H389CCC
-389CCC:lI47|H389D94
-389D94:lI101|H389E4C
-389E4C:lI98|H389EFC
-389EFC:lI105|H389F9C
-389F9C:lI110|N
-38B068:lH3883D4|H38B070
-3883D4:lI47|H3884CC
-3884CC:lI99|H3885CC
-3885CC:lI108|H3886D4
-3886D4:lI101|H3887E4
-3887E4:lI97|H3888F4
-3888F4:lI114|H388A04
-388A04:lI99|H388B0C
-388B0C:lI97|H388C1C
-388C1C:lI115|H388D2C
-388D2C:lI101|H388E3C
-388E3C:lI47|H388F4C
-388F4C:lI111|H389064
-389064:lI116|H389174
-389174:lI112|H389284
-389284:lI47|H389394
-389394:lI101|H3894A4
-3894A4:lI114|H3895AC
-3895AC:lI116|H3896A4
-3896A4:lI115|H38979C
-38979C:lI47|H389894
-389894:lI108|H38998C
-38998C:lI105|H389A6C
-389A6C:lI98|H389B44
-389B44:lI47|H389C0C
-389C0C:lI101|H389CD4
-389CD4:lI118|H389D9C
-389D9C:lI97|H389E54
-389E54:lI47|H389F04
-389F04:lI101|H389FA4
-389FA4:lI98|H38A034
-38A034:lI105|H38A0B4
-38A0B4:lI110|N
-38B070:lH3884D4|H38B078
-3884D4:lI47|H3885D4
-3885D4:lI99|H3886DC
-3886DC:lI108|H3887EC
-3887EC:lI101|H3888FC
-3888FC:lI97|H388A0C
-388A0C:lI114|H388B14
-388B14:lI99|H388C24
-388C24:lI97|H388D34
-388D34:lI115|H388E44
-388E44:lI101|H388F54
-388F54:lI47|H38906C
-38906C:lI111|H38917C
-38917C:lI116|H38928C
-38928C:lI112|H38939C
-38939C:lI47|H3894AC
-3894AC:lI101|H3895B4
-3895B4:lI114|H3896AC
-3896AC:lI116|H3897A4
-3897A4:lI115|H38989C
-38989C:lI47|H389994
-389994:lI108|H389A74
-389A74:lI105|H389B4C
-389B4C:lI98|H389C14
-389C14:lI47|H389CDC
-389CDC:lI101|H389DA4
-389DA4:lI116|H389E5C
-389E5C:lI47|H389F0C
-389F0C:lI101|H389FAC
-389FAC:lI98|H38A03C
-38A03C:lI105|H38A0BC
-38A0BC:lI110|N
-38B078:lH3885DC|H38B080
-3885DC:lI47|H3886E4
-3886E4:lI99|H3887F4
-3887F4:lI108|H388904
-388904:lI101|H388A14
-388A14:lI97|H388B1C
-388B1C:lI114|H388C2C
-388C2C:lI99|H388D3C
-388D3C:lI97|H388E4C
-388E4C:lI115|H388F5C
-388F5C:lI101|H389074
-389074:lI47|H389184
-389184:lI111|H389294
-389294:lI116|H3893A4
-3893A4:lI112|H3894B4
-3894B4:lI47|H3895BC
-3895BC:lI101|H3896B4
-3896B4:lI114|H3897AC
-3897AC:lI116|H3898A4
-3898A4:lI115|H38999C
-38999C:lI47|H389A7C
-389A7C:lI108|H389B54
-389B54:lI105|H389C1C
-389C1C:lI98|H389CE4
-389CE4:lI47|H389DAC
-389DAC:lI101|H389E64
-389E64:lI114|H389F14
-389F14:lI108|H389FB4
-389FB4:lI95|H38A044
-38A044:lI105|H38A0C4
-38A0C4:lI110|H38A134
-38A134:lI116|H38A1A4
-38A1A4:lI101|H38A20C
-38A20C:lI114|H38A274
-38A274:lI102|H38A2DC
-38A2DC:lI97|H38A344
-38A344:lI99|H38A3AC
-38A3AC:lI101|N
-38B080:lH3886EC|H38B088
-3886EC:lI47|H3887FC
-3887FC:lI99|H38890C
-38890C:lI108|H388A1C
-388A1C:lI101|H388B24
-388B24:lI97|H388C34
-388C34:lI114|H388D44
-388D44:lI99|H388E54
-388E54:lI97|H388F64
-388F64:lI115|H38907C
-38907C:lI101|H38918C
-38918C:lI47|H38929C
-38929C:lI111|H3893AC
-3893AC:lI116|H3894BC
-3894BC:lI112|H3895C4
-3895C4:lI47|H3896BC
-3896BC:lI101|H3897B4
-3897B4:lI114|H3898AC
-3898AC:lI116|H3899A4
-3899A4:lI115|H389A84
-389A84:lI47|H389B5C
-389B5C:lI108|H389C24
-389C24:lI105|H389CEC
-389CEC:lI98|H389DB4
-389DB4:lI47|H389E6C
-389E6C:lI100|H389F1C
-389F1C:lI101|H389FBC
-389FBC:lI98|H38A04C
-38A04C:lI117|H38A0CC
-38A0CC:lI103|H38A13C
-38A13C:lI103|H38A1AC
-38A1AC:lI101|H38A214
-38A214:lI114|H38A27C
-38A27C:lI47|H38A2E4
-38A2E4:lI101|H38A34C
-38A34C:lI98|H38A3B4
-38A3B4:lI105|H38A414
-38A414:lI110|N
-38B088:lH388804|H38B090
-388804:lI47|H388914
-388914:lI99|H388A24
-388A24:lI108|H388B2C
-388B2C:lI101|H388C3C
-388C3C:lI97|H388D4C
-388D4C:lI114|H388E5C
-388E5C:lI99|H388F6C
-388F6C:lI97|H389084
-389084:lI115|H389194
-389194:lI101|H3892A4
-3892A4:lI47|H3893B4
-3893B4:lI111|H3894C4
-3894C4:lI116|H3895CC
-3895CC:lI112|H3896C4
-3896C4:lI47|H3897BC
-3897BC:lI101|H3898B4
-3898B4:lI114|H3899AC
-3899AC:lI116|H389A8C
-389A8C:lI115|H389B64
-389B64:lI47|H389C2C
-389C2C:lI108|H389CF4
-389CF4:lI105|H389DBC
-389DBC:lI98|H389E74
-389E74:lI47|H389F24
-389F24:lI99|H389FC4
-389FC4:lI114|H38A054
-38A054:lI121|H38A0D4
-38A0D4:lI112|H38A144
-38A144:lI116|H38A1B4
-38A1B4:lI111|H38A21C
-38A21C:lI47|H38A284
-38A284:lI101|H38A2EC
-38A2EC:lI98|H38A354
-38A354:lI105|H38A3BC
-38A3BC:lI110|N
-38B090:lH38891C|H38B098
-38891C:lI47|H388A2C
-388A2C:lI99|H388B34
-388B34:lI108|H388C44
-388C44:lI101|H388D54
-388D54:lI97|H388E64
-388E64:lI114|H388F74
-388F74:lI99|H38908C
-38908C:lI97|H38919C
-38919C:lI115|H3892AC
-3892AC:lI101|H3893BC
-3893BC:lI47|H3894CC
-3894CC:lI111|H3895D4
-3895D4:lI116|H3896CC
-3896CC:lI112|H3897C4
-3897C4:lI47|H3898BC
-3898BC:lI101|H3899B4
-3899B4:lI114|H389A94
-389A94:lI116|H389B6C
-389B6C:lI115|H389C34
-389C34:lI47|H389CFC
-389CFC:lI108|H389DC4
-389DC4:lI105|H389E7C
-389E7C:lI98|H389F2C
-389F2C:lI47|H389FCC
-389FCC:lI99|H38A05C
-38A05C:lI111|H38A0DC
-38A0DC:lI115|H38A14C
-38A14C:lI84|H38A1BC
-38A1BC:lI114|H38A224
-38A224:lI97|H38A28C
-38A28C:lI110|H38A2F4
-38A2F4:lI115|H38A35C
-38A35C:lI97|H38A3C4
-38A3C4:lI99|H38A41C
-38A41C:lI116|H38A46C
-38A46C:lI105|H38A4BC
-38A4BC:lI111|H38A50C
-38A50C:lI110|H38A554
-38A554:lI115|H38A59C
-38A59C:lI47|H38A5E4
-38A5E4:lI101|H38A62C
-38A62C:lI98|H38A66C
-38A66C:lI105|H38A6A4
-38A6A4:lI110|N
-38B098:lH388A34|H38B0A0
-388A34:lI47|H388B3C
-388B3C:lI99|H388C4C
-388C4C:lI108|H388D5C
-388D5C:lI101|H388E6C
-388E6C:lI97|H388F7C
-388F7C:lI114|H389094
-389094:lI99|H3891A4
-3891A4:lI97|H3892B4
-3892B4:lI115|H3893C4
-3893C4:lI101|H3894D4
-3894D4:lI47|H3895DC
-3895DC:lI111|H3896D4
-3896D4:lI116|H3897CC
-3897CC:lI112|H3898C4
-3898C4:lI47|H3899BC
-3899BC:lI101|H389A9C
-389A9C:lI114|H389B74
-389B74:lI116|H389C3C
-389C3C:lI115|H389D04
-389D04:lI47|H389DCC
-389DCC:lI108|H389E84
-389E84:lI105|H389F34
-389F34:lI98|H389FD4
-389FD4:lI47|H38A064
-38A064:lI99|H38A0E4
-38A0E4:lI111|H38A154
-38A154:lI115|H38A1C4
-38A1C4:lI84|H38A22C
-38A22C:lI105|H38A294
-38A294:lI109|H38A2FC
-38A2FC:lI101|H38A364
-38A364:lI47|H38A3CC
-38A3CC:lI101|H38A424
-38A424:lI98|H38A474
-38A474:lI105|H38A4C4
-38A4C4:lI110|N
-38B0A0:lH388B44|H38B0A8
-388B44:lI47|H388C54
-388C54:lI99|H388D64
-388D64:lI108|H388E74
-388E74:lI101|H388F84
-388F84:lI97|H38909C
-38909C:lI114|H3891AC
-3891AC:lI99|H3892BC
-3892BC:lI97|H3893CC
-3893CC:lI115|H3894DC
-3894DC:lI101|H3895E4
-3895E4:lI47|H3896DC
-3896DC:lI111|H3897D4
-3897D4:lI116|H3898CC
-3898CC:lI112|H3899C4
-3899C4:lI47|H389AA4
-389AA4:lI101|H389B7C
-389B7C:lI114|H389C44
-389C44:lI116|H389D0C
-389D0C:lI115|H389DD4
-389DD4:lI47|H389E8C
-389E8C:lI108|H389F3C
-389F3C:lI105|H389FDC
-389FDC:lI98|H38A06C
-38A06C:lI47|H38A0EC
-38A0EC:lI99|H38A15C
-38A15C:lI111|H38A1CC
-38A1CC:lI115|H38A234
-38A234:lI80|H38A29C
-38A29C:lI114|H38A304
-38A304:lI111|H38A36C
-38A36C:lI112|H38A3D4
-38A3D4:lI101|H38A42C
-38A42C:lI114|H38A47C
-38A47C:lI116|H38A4CC
-38A4CC:lI121|H38A514
-38A514:lI47|H38A55C
-38A55C:lI101|H38A5A4
-38A5A4:lI98|H38A5EC
-38A5EC:lI105|H38A634
-38A634:lI110|N
-38B0A8:lH388C5C|H38B0B0
-388C5C:lI47|H388D6C
-388D6C:lI99|H388E7C
-388E7C:lI108|H388F8C
-388F8C:lI101|H3890A4
-3890A4:lI97|H3891B4
-3891B4:lI114|H3892C4
-3892C4:lI99|H3893D4
-3893D4:lI97|H3894E4
-3894E4:lI115|H3895EC
-3895EC:lI101|H3896E4
-3896E4:lI47|H3897DC
-3897DC:lI111|H3898D4
-3898D4:lI116|H3899CC
-3899CC:lI112|H389AAC
-389AAC:lI47|H389B84
-389B84:lI101|H389C4C
-389C4C:lI114|H389D14
-389D14:lI116|H389DDC
-389DDC:lI115|H389E94
-389E94:lI47|H389F44
-389F44:lI108|H389FE4
-389FE4:lI105|H38A074
-38A074:lI98|H38A0F4
-38A0F4:lI47|H38A164
-38A164:lI99|H38A1D4
-38A1D4:lI111|H38A23C
-38A23C:lI115|H38A2A4
-38A2A4:lI78|H38A30C
-38A30C:lI111|H38A374
-38A374:lI116|H38A3DC
-38A3DC:lI105|H38A434
-38A434:lI102|H38A484
-38A484:lI105|H38A4D4
-38A4D4:lI99|H38A51C
-38A51C:lI97|H38A564
-38A564:lI116|H38A5AC
-38A5AC:lI105|H38A5F4
-38A5F4:lI111|H38A63C
-38A63C:lI110|H38A674
-38A674:lI47|H38A6AC
-38A6AC:lI101|H38A6D4
-38A6D4:lI98|H38A6EC
-38A6EC:lI105|H38A704
-38A704:lI110|N
-38B0B0:lH388D74|H38B0B8
-388D74:lI47|H388E84
-388E84:lI99|H388F94
-388F94:lI108|H3890AC
-3890AC:lI101|H3891BC
-3891BC:lI97|H3892CC
-3892CC:lI114|H3893DC
-3893DC:lI99|H3894EC
-3894EC:lI97|H3895F4
-3895F4:lI115|H3896EC
-3896EC:lI101|H3897E4
-3897E4:lI47|H3898DC
-3898DC:lI111|H3899D4
-3899D4:lI116|H389AB4
-389AB4:lI112|H389B8C
-389B8C:lI47|H389C54
-389C54:lI101|H389D1C
-389D1C:lI114|H389DE4
-389DE4:lI116|H389E9C
-389E9C:lI115|H389F4C
-389F4C:lI47|H389FEC
-389FEC:lI108|H38A07C
-38A07C:lI105|H38A0FC
-38A0FC:lI98|H38A16C
-38A16C:lI47|H38A1DC
-38A1DC:lI99|H38A244
-38A244:lI111|H38A2AC
-38A2AC:lI115|H38A314
-38A314:lI70|H38A37C
-38A37C:lI105|H38A3E4
-38A3E4:lI108|H38A43C
-38A43C:lI101|H38A48C
-38A48C:lI84|H38A4DC
-38A4DC:lI114|H38A524
-38A524:lI97|H38A56C
-38A56C:lI110|H38A5B4
-38A5B4:lI115|H38A5FC
-38A5FC:lI102|H38A644
-38A644:lI101|H38A67C
-38A67C:lI114|H38A6B4
-38A6B4:lI47|H38A6DC
-38A6DC:lI101|H38A6F4
-38A6F4:lI98|H38A70C
-38A70C:lI105|H38A71C
-38A71C:lI110|N
-38B0B8:lH388E8C|H38B0C0
-388E8C:lI47|H388F9C
-388F9C:lI99|H3890B4
-3890B4:lI108|H3891C4
-3891C4:lI101|H3892D4
-3892D4:lI97|H3893E4
-3893E4:lI114|H3894F4
-3894F4:lI99|H3895FC
-3895FC:lI97|H3896F4
-3896F4:lI115|H3897EC
-3897EC:lI101|H3898E4
-3898E4:lI47|H3899DC
-3899DC:lI111|H389ABC
-389ABC:lI116|H389B94
-389B94:lI112|H389C5C
-389C5C:lI47|H389D24
-389D24:lI101|H389DEC
-389DEC:lI114|H389EA4
-389EA4:lI116|H389F54
-389F54:lI115|H389FF4
-389FF4:lI47|H38A084
-38A084:lI108|H38A104
-38A104:lI105|H38A174
-38A174:lI98|H38A1E4
-38A1E4:lI47|H38A24C
-38A24C:lI99|H38A2B4
-38A2B4:lI111|H38A31C
-38A31C:lI115|H38A384
-38A384:lI69|H38A3EC
-38A3EC:lI118|H38A444
-38A444:lI101|H38A494
-38A494:lI110|H38A4E4
-38A4E4:lI116|H38A52C
-38A52C:lI68|H38A574
-38A574:lI111|H38A5BC
-38A5BC:lI109|H38A604
-38A604:lI97|H38A64C
-38A64C:lI105|H38A684
-38A684:lI110|H38A6BC
-38A6BC:lI47|H38A6E4
-38A6E4:lI101|H38A6FC
-38A6FC:lI98|H38A714
-38A714:lI105|H38A724
-38A724:lI110|N
-38B0C0:lH388FA4|H38B0C8
-388FA4:lI47|H3890BC
-3890BC:lI99|H3891CC
-3891CC:lI108|H3892DC
-3892DC:lI101|H3893EC
-3893EC:lI97|H3894FC
-3894FC:lI114|H389604
-389604:lI99|H3896FC
-3896FC:lI97|H3897F4
-3897F4:lI115|H3898EC
-3898EC:lI101|H3899E4
-3899E4:lI47|H389AC4
-389AC4:lI111|H389B9C
-389B9C:lI116|H389C64
-389C64:lI112|H389D2C
-389D2C:lI47|H389DF4
-389DF4:lI101|H389EAC
-389EAC:lI114|H389F5C
-389F5C:lI116|H389FFC
-389FFC:lI115|H38A08C
-38A08C:lI47|H38A10C
-38A10C:lI108|H38A17C
-38A17C:lI105|H38A1EC
-38A1EC:lI98|H38A254
-38A254:lI47|H38A2BC
-38A2BC:lI99|H38A324
-38A324:lI111|H38A38C
-38A38C:lI115|H38A3F4
-38A3F4:lI69|H38A44C
-38A44C:lI118|H38A49C
-38A49C:lI101|H38A4EC
-38A4EC:lI110|H38A534
-38A534:lI116|H38A57C
-38A57C:lI47|H38A5C4
-38A5C4:lI101|H38A60C
-38A60C:lI98|H38A654
-38A654:lI105|H38A68C
-38A68C:lI110|N
-38B0C8:lH3890C4|H38B0D0
-3890C4:lI47|H3891D4
-3891D4:lI99|H3892E4
-3892E4:lI108|H3893F4
-3893F4:lI101|H389504
-389504:lI97|H38960C
-38960C:lI114|H389704
-389704:lI99|H3897FC
-3897FC:lI97|H3898F4
-3898F4:lI115|H3899EC
-3899EC:lI101|H389ACC
-389ACC:lI47|H389BA4
-389BA4:lI111|H389C6C
-389C6C:lI116|H389D34
-389D34:lI112|H389DFC
-389DFC:lI47|H389EB4
-389EB4:lI101|H389F64
-389F64:lI114|H38A004
-38A004:lI116|H38A094
-38A094:lI115|H38A114
-38A114:lI47|H38A184
-38A184:lI108|H38A1F4
-38A1F4:lI105|H38A25C
-38A25C:lI98|H38A2C4
-38A2C4:lI47|H38A32C
-38A32C:lI99|H38A394
-38A394:lI111|H38A3FC
-38A3FC:lI109|H38A454
-38A454:lI112|H38A4A4
-38A4A4:lI105|H38A4F4
-38A4F4:lI108|H38A53C
-38A53C:lI101|H38A584
-38A584:lI114|H38A5CC
-38A5CC:lI47|H38A614
-38A614:lI101|H38A65C
-38A65C:lI98|H38A694
-38A694:lI105|H38A6C4
-38A6C4:lI110|N
-38B0D0:lH3891DC|H38B0D8
-3891DC:lI47|H3892EC
-3892EC:lI99|H3893FC
-3893FC:lI108|H38950C
-38950C:lI101|H389614
-389614:lI97|H38970C
-38970C:lI114|H389804
-389804:lI99|H3898FC
-3898FC:lI97|H3899F4
-3899F4:lI115|H389AD4
-389AD4:lI101|H389BAC
-389BAC:lI47|H389C74
-389C74:lI111|H389D3C
-389D3C:lI116|H389E04
-389E04:lI112|H389EBC
-389EBC:lI47|H389F6C
-389F6C:lI101|H38A00C
-38A00C:lI114|H38A09C
-38A09C:lI116|H38A11C
-38A11C:lI115|H38A18C
-38A18C:lI47|H38A1FC
-38A1FC:lI108|H38A264
-38A264:lI105|H38A2CC
-38A2CC:lI98|H38A334
-38A334:lI47|H38A39C
-38A39C:lI97|H38A404
-38A404:lI115|H38A45C
-38A45C:lI110|H38A4AC
-38A4AC:lI49|H38A4FC
-38A4FC:lI47|H38A544
-38A544:lI101|H38A58C
-38A58C:lI98|H38A5D4
-38A5D4:lI105|H38A61C
-38A61C:lI110|N
-38B0D8:lH3892F4|H38B0E0
-3892F4:lI47|H389404
-389404:lI99|H389514
-389514:lI108|H38961C
-38961C:lI101|H389714
-389714:lI97|H38980C
-38980C:lI114|H389904
-389904:lI99|H3899FC
-3899FC:lI97|H389ADC
-389ADC:lI115|H389BB4
-389BB4:lI101|H389C7C
-389C7C:lI47|H389D44
-389D44:lI111|H389E0C
-389E0C:lI116|H389EC4
-389EC4:lI112|H389F74
-389F74:lI47|H38A014
-38A014:lI101|H38A0A4
-38A0A4:lI114|H38A124
-38A124:lI116|H38A194
-38A194:lI115|H38A204
-38A204:lI47|H38A26C
-38A26C:lI108|H38A2D4
-38A2D4:lI105|H38A33C
-38A33C:lI98|H38A3A4
-38A3A4:lI47|H38A40C
-38A40C:lI97|H38A464
-38A464:lI112|H38A4B4
-38A4B4:lI112|H38A504
-38A504:lI109|H38A54C
-38A54C:lI111|H38A594
-38A594:lI110|H38A5DC
-38A5DC:lI47|H38A624
-38A624:lI101|H38A664
-38A664:lI98|H38A69C
-38A69C:lI105|H38A6CC
-38A6CC:lI110|N
-38B0E0:lH38AA88|H38B0E8
-38AA88:lI47|H38AA90
-38AA90:lI104|H38AA98
-38AA98:lI111|H38AAA0
-38AAA0:lI109|H38AAA8
-38AAA8:lI101|H38AAB0
-38AAB0:lI47|H38AAB8
-38AAB8:lI115|H38AAC0
-38AAC0:lI105|H38AAC8
-38AAC8:lI114|H38AAD0
-38AAD0:lI105|H38AAD8
-38AAD8:lI47|H38AAE0
-38AAE0:lI101|H38AAE8
-38AAE8:lI114|H38AAF0
-38AAF0:lI108|H38AAF8
-38AAF8:lI97|H38AB00
-38AB00:lI110|H38AB08
-38AB08:lI103|N
-38B0E8:lH38AB1C|H38B0F0
-38AB1C:lI47|H38AB2C
-38AB2C:lI104|H38AB4C
-38AB4C:lI111|H38AB74
-38AB74:lI109|H38ABA4
-38ABA4:lI101|H38ABC4
-38ABC4:lI47|H38ABE4
-38ABE4:lI115|H38AC04
-38AC04:lI105|H38AC24
-38AC24:lI114|H38AC3C
-38AC3C:lI105|H38AC44
-38AC44:lI47|H38AC4C
-38AC4C:lI116|H38AC54
-38AC54:lI111|H38AC5C
-38AC5C:lI111|H38AC64
-38AC64:lI108|H38AC6C
-38AC6C:lI115|H38AC74
-38AC74:lI47|H38AC7C
-38AC7C:lI100|H38AC84
-38AC84:lI105|H38AC8C
-38AC8C:lI115|H38AC94
-38AC94:lI116|H38AC9C
-38AC9C:lI101|H38ACA4
-38ACA4:lI108|H38ACAC
-38ACAC:lI47|H38ACB4
-38ACB4:lI101|H38ACBC
-38ACBC:lI98|H38ACC4
-38ACC4:lI105|H38ACCC
-38ACCC:lI110|N
-38B0F0:lH38B0F8|N
-38B0F8:lI47|H38B100
-38B100:lI104|H38B108
-38B108:lI111|H38B110
-38B110:lI109|H38B118
-38B118:lI101|H38B120
-38B120:lI47|H38B128
-38B128:lI115|H38B130
-38B130:lI105|H38B138
-38B138:lI114|H38B140
-38B140:lI105|H38B148
-38B148:lI47|H38B150
-38B150:lI79|H38B158
-38B158:lI84|H38B160
-38B160:lI80|H38B168
-38B168:lI47|H38B170
-38B170:lI103|H38B178
-38B178:lI112|H38B180
-38B180:lI114|H38B188
-38B188:lI115|H38B190
-38B190:lI95|H38B198
-38B198:lI116|H38B1A0
-38B1A0:lI114|H38B1A8
-38B1A8:lI97|H38B1B0
-38B1B0:lI99|H38B1B8
-38B1B8:lI101|H38B1C0
-38B1C0:lI47|H38B1C8
-38B1C8:lI106|H38B1D0
-38B1D0:lI97|H38B1D8
-38B1D8:lI110|N
-3873BC:lI47|H3873CC
-3873CC:lI99|H3873E4
-3873E4:lI108|H3873FC
-3873FC:lI101|H38741C
-38741C:lI97|H387444
-387444:lI114|H387474
-387474:lI99|H3874AC
-3874AC:lI97|H3874EC
-3874EC:lI115|H387534
-387534:lI101|H387584
-387584:lI47|H3875DC
-3875DC:lI111|H38763C
-38763C:lI116|H3876A4
-3876A4:lI112|H387714
-387714:lI47|H38778C
-38778C:lI101|H38780C
-38780C:lI114|H387894
-387894:lI116|H387924
-387924:lI115|N
-=proc_dictionary:<0.19.0>
-H370244
-H370250
-=proc_stack:<0.19.0>
-36b45c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36B17C
-y4:P<0.19.0>
-y5:P<0.9.0>
-36b478:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37025C
-=proc_heap:<0.19.0>
-36B17C:t5:A5:state,A8:user_sup,P<0.21.0>,P<0.21.0>,H370238
-370238:t2:P<0.19.0>,A8:user_sup
-37025C:lAA:gen_server|H37027C
-37027C:lP<0.9.0>|H37028C
-37028C:lP<0.9.0>|H370294
-370294:lA11:supervisor_bridge|H37029C
-37029C:lH3702A4|H3702AC
-3702A4:lA8:user_sup|H3702B4
-3702B4:lN|H3702BC
-3702BC:lA4:self|N
-3702AC:lN|N
-370244:t2:AD:$initial_call,H370264
-370264:t3:A3:gen,A7:init_it,H37025C
-370250:t2:AA:$ancestors,H370274
-370274:lAA:kernel_sup|H370284
-370284:lP<0.8.0>|N
-=proc_dictionary:<0.20.0>
-H36F8A8
-=proc_stack:<0.20.0>
-36a714:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:H36F8C4
-y3:P<0.21.0>
-y4:P<0.22.0>
-y5:p<0.72>
-y6:p<0.72>
-=proc_heap:<0.20.0>
-36F8C4:t4:I3,I2,P<0.22.0>,H36F8F0
-36F8F0:lH36F900|H36F910
-36F900:t3:I1,P<0.21.0>,H36F920
-36F920:t0:
-36F910:lH36F924|N
-36F924:t3:I2,P<0.22.0>,H36F93C
-36F93C:t3:A5:shell,A5:start,N
-36F8A8:t2:A3:eof,A5:false
-=proc_dictionary:<0.21.0>
-H3709DC
-H3709D0
-H3709F8
-=proc_stack:<0.21.0>
-370d1c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:A9:undefined
-y2:P<0.20.0>
-=proc_heap:<0.21.0>
-3709DC:t2:AB:line_buffer,N
-3709D0:t2:AB:kill_buffer,N
-3709F8:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.22.0>
-H370D44
-H370D60
-H370D7C
-H370D38
-=proc_stack:<0.22.0>
-374a88:SReturn addr 0x2CE718 (group:get_chars_loop/7 + 80)
-y0:N
-y1:N
-y2:A8:infinity
-y3:H374A00
-y4:P<0.20.0>
-y5:H374A28
-374aa4:SReturn addr 0x2CDC18 (group:io_request/5 + 48)
-y0:H37499C
-y1:A6:io_lib
-y2:A9:get_until
-y3:H3748B8
-y4:P<0.20.0>
-y5:A5:start
-374ac0:SReturn addr 0x2CDB2C (group:server_loop/3 + 372)
-y0:P<0.49.0>
-y1:P<0.22.0>
-374acc:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:P<0.25.0>
-y2:P<0.20.0>
-=proc_heap:<0.22.0>
-374A00:t4:A4:line,H37499C,H3749A4,A4:none
-3749A4:t2:N,N
-37499C:lI50|H374994
-374994:lI62|H37498C
-37498C:lI32|N
-374A28:t4:A5:stack,H370D58,H374A24,N
-374A24:t0:
-370D58:lH370D74|N
-370D74:lI99|H370D88
-370D88:lI114|H370D90
-370D90:lI97|H370D98
-370D98:lI115|H370DA0
-370DA0:lI104|H370DA8
-370DA8:lI100|H370DB0
-370DB0:lI117|H370DB8
-370DB8:lI109|H370DC0
-370DC0:lI112|H370DC8
-370DC8:lI95|H370DD0
-370DD0:lI118|H370DD8
-370DD8:lI105|H370DE0
-370DE0:lI101|H370DE8
-370DE8:lI119|H370DF0
-370DF0:lI101|H370DF8
-370DF8:lI114|H370E00
-370E00:lI58|H370E08
-370E08:lI115|H370E10
-370E10:lI116|H370E18
-370E18:lI97|H370E20
-370E20:lI114|H370E28
-370E28:lI116|H370E30
-370E30:lI40|H370E38
-370E38:lI41|H370E40
-370E40:lI46|H370E48
-370E48:lI10|N
-3748B8:t3:A8:erl_scan,A6:tokens,H3748B0
-3748B0:lI1|N
-370D44:t2:AB:line_buffer,H370D58
-370D60:t2:A5:shell,P<0.25.0>
-370D7C:t2:AB:kill_buffer,N
-370D38:t2:A9:read_mode,A4:list
-=proc_dictionary:<0.23.0>
-H376464
-H376448
-=proc_stack:<0.23.0>
-376754:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:kernel_config
-y3:N
-y4:P<0.23.0>
-y5:P<0.9.0>
-376770:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H376418
-=proc_heap:<0.23.0>
-376418:lAA:gen_server|H376410
-376410:lP<0.9.0>|H376408
-376408:lP<0.9.0>|H376400
-376400:lAD:kernel_config|H3763F8
-3763F8:lN|H3763F0
-3763F0:lN|N
-376464:t2:AD:$initial_call,H376454
-376454:t3:A3:gen,A7:init_it,H376418
-376448:t2:AA:$ancestors,H376440
-376440:lAA:kernel_sup|H376420
-376420:lP<0.8.0>|N
-=proc_dictionary:<0.24.0>
-H3705E0
-H3705EC
-=proc_stack:<0.24.0>
-36f38c:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F018
-y4:AF:kernel_safe_sup
-y5:P<0.9.0>
-36f3a8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H37063C
-=proc_heap:<0.24.0>
-36F018:tA:A5:state,H370644,AB:one_for_one,H36F044,N,I4,I3600,N,A6:kernel,A4:safe
-36F044:lH36F04C|N
-36F04C:t8:A5:child,P<0.31.0>,A17:inet_gethost_native_sup,H370650,A9:temporary,I1000,A6:worker,H370660
-370660:lA13:inet_gethost_native|N
-370650:t3:A13:inet_gethost_native,AA:start_link,N
-370644:t2:A5:local,AF:kernel_safe_sup
-37063C:lAA:gen_server|H3706AC
-3706AC:lP<0.9.0>|H3706BC
-3706BC:lP<0.9.0>|H3706C4
-3706C4:lH3706CC|H3706D8
-3706CC:t2:A5:local,AF:kernel_safe_sup
-3706D8:lAA:supervisor|H3706E0
-3706E0:lH3706E8|H3706F8
-3706E8:t3:H370644,A6:kernel,A4:safe
-3706F8:lN|N
-3705E0:t2:AD:$initial_call,H370668
-370668:t3:A3:gen,A7:init_it,H37063C
-3705EC:t2:AA:$ancestors,H370678
-370678:lAA:kernel_sup|H3706B4
-3706B4:lP<0.8.0>|N
-=proc_dictionary:<0.25.0>
-H36E304
-H36E31C
-=proc_stack:<0.25.0>
-36e610:SReturn addr 0x2E06FC (shell:server_loop/6 + 140)
-y0:N
-y1:N
-y2:P<0.27.0>
-y3:P<0.49.0>
-36e624:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:I2
-y3:I1
-y4:N
-y5:N
-y6:N
-y7:I20
-y8:I20
-=proc_heap:<0.25.0>
-36E304:t2:H36E2F8,H36E2A8
-36E2A8:lH36E2B0|N
-36E2B0:t4:A4:call,I1,H36E2C4,N
-36E2C4:t4:A6:remote,I1,H36E2D8,H36E2E8
-36E2E8:t3:A4:atom,I1,A5:start
-36E2D8:t3:A4:atom,I1,A10:crashdump_viewer
-36E2F8:t2:A7:command,I1
-36E31C:t2:H36E310,A2:ok
-36E310:t2:A6:result,I1
-=proc_stack:<0.27.0>
-3bda3c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:N
-y1:N
-y2:P<0.25.0>
-=proc_heap:<0.27.0>
-=proc_dictionary:<0.31.0>
-H36DA24
-H36DA08
-=proc_stack:<0.31.0>
-36dcd4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A11:supervisor_bridge
-y3:H36DB68
-y4:A17:inet_gethost_native_sup
-y5:P<0.24.0>
-36dcf0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36D9D0
-=proc_heap:<0.31.0>
-36DB68:t5:A5:state,A13:inet_gethost_native,P<0.32.0>,P<0.32.0>,H36D994
-36D994:t2:A5:local,A17:inet_gethost_native_sup
-36D9D0:lAA:gen_server|H36D9C8
-36D9C8:lP<0.24.0>|H36D9C0
-36D9C0:lP<0.24.0>|H36D970
-36D970:lH36D980|H36D9B8
-36D980:t2:A5:local,A17:inet_gethost_native_sup
-36D9B8:lA11:supervisor_bridge|H36D978
-36D978:lH36D9A8|H36D9B0
-36D9A8:lA13:inet_gethost_native|H36D9A0
-36D9A0:lN|H36D98C
-36D98C:lH36D994|N
-36D9B0:lN|N
-36DA24:t2:AD:$initial_call,H36DA14
-36DA14:t3:A3:gen,A7:init_it,H36D9D0
-36DA08:t2:AA:$ancestors,H36DA00
-36DA00:lAF:kernel_safe_sup|H36D9E0
-36D9E0:lAA:kernel_sup|H36D9D8
-36D9D8:lP<0.8.0>|N
-=proc_dictionary:<0.32.0>
-H36CFD4
-H36D0BC
-=proc_stack:<0.32.0>
-36d12c:SReturn addr 0x156F90 (<terminate process normally>)
-y0:H36CF18
-=proc_heap:<0.32.0>
-36CF18:t8:A5:state,p<0.105>,I8000,I11,I12,P<0.31.0>,I4,H36CEF0
-36CEF0:t9:AA:statistics,I0,I0,I0,I0,I0,I0,I0,I0
-36CFD4:t2:A3:rid,I1
-36D0BC:t2:AC:num_requests,I0
-=proc_dictionary:<0.33.0>
-H3905C4
-H3905D0
-=proc_stack:<0.33.0>
-3ceee4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A7:webtool
-y3:H3C8570
-y4:A8:web_tool
-y5:P<0.33.0>
-3cef00:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3905FC
-=proc_heap:<0.33.0>
-3C8570:t6:A5:state,H3905EC,I13,P<0.41.0>,H3905F4,H3C85D4
-3C85D4:lA10:crashdump_viewer|N
-3905F4:lH390650|H39065C
-390650:t2:A4:port,I8888
-39065C:lH3906C8|H3906D4
-3906C8:t2:AC:bind_address,H390760
-390760:t4:I127,I0,I0,I1
-3906D4:lH390774|H390780
-390774:t2:AB:server_name,H39082C
-39082C:lI108|H390908
-390908:lI111|H3909DC
-3909DC:lI99|H390AC0
-390AC0:lI97|H390B98
-390B98:lI108|H390C78
-390C78:lI104|H390D58
-390D58:lI111|H390E2C
-390E2C:lI115|H390F10
-390F10:lI116|N
-390780:lH390834|H390840
-390834:t2:AE:max_header_siz,I1024
-390840:lH390910|H39091C
-390910:t2:A11:max_header_action,A8:reply414
-39091C:lH3909E4|H3909F0
-3909E4:t2:A8:com_type,A7:ip_comm
-3909F0:lH390AC8|H390AD4
-390AC8:t2:A7:modules,H390BA0
-390BA0:lA9:mod_alias|H390C80
-390C80:lA8:mod_auth|H390D60
-390D60:lA7:mod_esi|H390E34
-390E34:lAB:mod_actions|H390F18
-390F18:lA7:mod_cgi|H390FF4
-390FF4:lAB:mod_include|H3910D8
-3910D8:lA7:mod_dir|H3911B4
-3911B4:lA7:mod_get|H3912A0
-3912A0:lA8:mod_head|H39139C
-39139C:lA7:mod_log|H3914A0
-3914A0:lAC:mod_disk_log|N
-390AD4:lH390BA8|H390BB4
-390BA8:t2:AF:directory_index,H390C88
-390C88:lH390D68|N
-390D68:lI105|H390E3C
-390E3C:lI110|H390F20
-390F20:lI100|H390FFC
-390FFC:lI101|H3910E0
-3910E0:lI120|H3911BC
-3911BC:lI46|H3912A8
-3912A8:lI104|H3913A4
-3913A4:lI116|H3914A8
-3914A8:lI109|H39159C
-39159C:lI108|N
-390BB4:lH390C90|N
-390C90:t2:AC:default_type,H390D70
-390D70:lI116|H390E44
-390E44:lI101|H390F28
-390F28:lI120|H391004
-391004:lI116|H3910E8
-3910E8:lI47|H3911C4
-3911C4:lI112|H3912B0
-3912B0:lI108|H3913AC
-3913AC:lI97|H3914B0
-3914B0:lI105|H3915A4
-3915A4:lI110|N
-3905EC:lI47|H390648
-390648:lI99|H3906C0
-3906C0:lI108|H390758
-390758:lI101|H390824
-390824:lI97|H390900
-390900:lI114|H3909D4
-3909D4:lI99|H390AB8
-390AB8:lI97|H390B90
-390B90:lI115|H390C70
-390C70:lI101|H390D50
-390D50:lI47|H390E24
-390E24:lI111|H390F08
-390F08:lI116|H390FEC
-390FEC:lI112|H3910D0
-3910D0:lI47|H3911AC
-3911AC:lI101|H391298
-391298:lI114|H391394
-391394:lI116|H391498
-391498:lI115|H391594
-391594:lI47|H391680
-391680:lI108|H39175C
-39175C:lI105|H391840
-391840:lI98|H391924
-391924:lI47|H3919F8
-3919F8:lI119|H391AC4
-391AC4:lI101|H391B90
-391B90:lI98|H391C54
-391C54:lI116|H391D18
-391D18:lI111|H391DD4
-391DD4:lI111|H391E90
-391E90:lI108|H391F5C
-391F5C:lI47|H392030
-392030:lI112|H3920EC
-3920EC:lI114|H3921A8
-3921A8:lI105|H392264
-392264:lI118|N
-3905FC:lAA:gen_server|H390664
-390664:lP<0.27.0>|H3906DC
-3906DC:lA4:self|H390788
-390788:lH390848|H390854
-390848:t2:A5:local,A8:web_tool
-390854:lA7:webtool|H390924
-390924:lH3909F8|H390A04
-3909F8:t2:H3905EC,H3905F4
-390A04:lN|N
-3905C4:t2:AD:$initial_call,H390614
-390614:t3:A3:gen,A7:init_it,H3905FC
-3905D0:t2:AA:$ancestors,H390624
-390624:lP<0.27.0>|N
-=proc_dictionary:<0.41.0>
-H36DF0C
-H36DF18
-=proc_stack:<0.41.0>
-36eda4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36EA3C
-y4:A6:websup
-y5:P<0.33.0>
-36edc0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36DF24
-=proc_heap:<0.41.0>
-36EA3C:tA:A5:state,H36DF2C,AB:one_for_one,H36EA68,N,I100,I10,N,AB:webtool_sup,N
-36EA68:lH36EA70|N
-36EA70:t8:A5:child,P<0.48.0>,H36DF38,H36DF44,A9:permanent,I100,A6:worker,H36DF54
-36DF54:lA10:crashdump_viewer|N
-36DF44:t3:A10:crashdump_viewer,AA:start_link,N
-36DF38:t2:A5:local,A17:crashdump_viewer_server
-36DF2C:t2:A5:local,A6:websup
-36DF24:lAA:gen_server|H36DF84
-36DF84:lP<0.33.0>|H36DF94
-36DF94:lP<0.33.0>|H36DF9C
-36DF9C:lH36DFA4|H36DFB0
-36DFA4:t2:A5:local,A6:websup
-36DFB0:lAA:supervisor|H36DFB8
-36DFB8:lH36DFC0|H36DFD0
-36DFC0:t3:H36DF2C,AB:webtool_sup,N
-36DFD0:lN|N
-36DF0C:t2:AD:$initial_call,H36DF6C
-36DF6C:t3:A3:gen,A7:init_it,H36DF24
-36DF18:t2:AA:$ancestors,H36DF7C
-36DF7C:lA8:web_tool|H36DF8C
-36DF8C:lP<0.27.0>|N
-=proc_dictionary:<0.43.0>
-H39D940
-H39D94C
-=proc_stack:<0.43.0>
-3a42ac:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H3A3E34
-y4:A1A:httpd_sup__127_0_0_1__8888
-y5:P<0.33.0>
-3a42c8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H39D9CC
-=proc_heap:<0.43.0>
-3A3E34:tA:A5:state,H39D960,AB:one_for_one,H3A3E20,N,I0,I1,N,A9:httpd_sup,H39DA88
-39DA88:lA9:undefined|H39DB18
-39DB18:lH39DB50|H39DB58
-39DB50:lH39DB88|H39DB94
-39DB88:t2:AB:server_root,H39DBD0
-39DBD0:lI47|H39DC0C
-39DC0C:lI99|H39DC50
-39DC50:lI108|H39DC84
-39DC84:lI101|H39DCC4
-39DCC4:lI97|H39DD28
-39DD28:lI114|H39DD90
-39DD90:lI99|H39DE00
-39DE00:lI97|H39DE78
-39DE78:lI115|H39DF00
-39DF00:lI101|H39DF90
-39DF90:lI47|H39E038
-39E038:lI111|H39E0E8
-39E0E8:lI116|H39E1AC
-39E1AC:lI112|H39E288
-39E288:lI47|H39E37C
-39E37C:lI101|H39E478
-39E478:lI114|H39E580
-39E580:lI116|H39E69C
-39E69C:lI115|H39E7B0
-39E7B0:lI47|H39E8C4
-39E8C4:lI108|H39E9D8
-39E9D8:lI105|H39EACC
-39EACC:lI98|H39EBC0
-39EBC0:lI47|H39ECB4
-39ECB4:lI119|H39EDA8
-39EDA8:lI101|H39EE7C
-39EE7C:lI98|H39EF50
-39EF50:lI116|H39F02C
-39F02C:lI111|H39F110
-39F110:lI111|H39F1E4
-39F1E4:lI108|H39F2B0
-39F2B0:lI47|H39F36C
-39F36C:lI112|H39F430
-39F430:lI114|H39F4FC
-39F4FC:lI105|H39F5C0
-39F5C0:lI118|H39F694
-39F694:lI47|H39F768
-39F768:lI114|H39F83C
-39F83C:lI111|H39F920
-39F920:lI111|H39F9FC
-39F9FC:lI116|N
-39DB94:lH39DBD8|H39DBE4
-39DBD8:t2:AD:document_root,H39DC14
-39DC14:lI47|H39DC58
-39DC58:lI99|H39DC8C
-39DC8C:lI108|H39DCCC
-39DCCC:lI101|H39DD30
-39DD30:lI97|H39DD98
-39DD98:lI114|H39DE08
-39DE08:lI99|H39DE80
-39DE80:lI97|H39DF08
-39DF08:lI115|H39DF98
-39DF98:lI101|H39E040
-39E040:lI47|H39E0F0
-39E0F0:lI111|H39E1B4
-39E1B4:lI116|H39E290
-39E290:lI112|H39E384
-39E384:lI47|H39E480
-39E480:lI101|H39E588
-39E588:lI114|H39E6A4
-39E6A4:lI116|H39E7B8
-39E7B8:lI115|H39E8CC
-39E8CC:lI47|H39E9E0
-39E9E0:lI108|H39EAD4
-39EAD4:lI105|H39EBC8
-39EBC8:lI98|H39ECBC
-39ECBC:lI47|H39EDB0
-39EDB0:lI119|H39EE84
-39EE84:lI101|H39EF58
-39EF58:lI98|H39F034
-39F034:lI116|H39F118
-39F118:lI111|H39F1EC
-39F1EC:lI111|H39F2B8
-39F2B8:lI108|H39F374
-39F374:lI47|H39F438
-39F438:lI112|H39F504
-39F504:lI114|H39F5C8
-39F5C8:lI105|H39F69C
-39F69C:lI118|H39F770
-39F770:lI47|H39F844
-39F844:lI114|H39F928
-39F928:lI111|H39FA04
-39FA04:lI111|H39FAD8
-39FAD8:lI116|H39FBB4
-39FBB4:lI47|H39FC80
-39FC80:lI100|H39FD44
-39FD44:lI111|H39FE10
-39FE10:lI99|N
-39DBE4:lH39DC1C|H39DC28
-39DC1C:t2:AA:mime_types,H39DC60
-39DC60:lH39DC94|H39DCA0
-39DC94:t2:H39DCD4,H39DCDC
-39DCDC:lI120|H39DD40
-39DD40:lI45|H39DDA8
-39DDA8:lI119|H39DE10
-39DE10:lI111|H39DE88
-39DE88:lI114|H39DF10
-39DF10:lI108|H39DFA0
-39DFA0:lI100|H39E048
-39E048:lI47|H39E0F8
-39E0F8:lI120|H39E1BC
-39E1BC:lI45|H39E298
-39E298:lI118|H39E38C
-39E38C:lI114|H39E488
-39E488:lI109|H39E590
-39E590:lI108|N
-39DCD4:lI119|H39DD38
-39DD38:lI114|H39DDA0
-39DDA0:lI108|N
-39DCA0:lH39DCE4|H39DCF0
-39DCE4:t2:H39DD48,H39DD50
-39DD50:lI120|H39DDB8
-39DDB8:lI45|H39DE20
-39DE20:lI119|H39DE98
-39DE98:lI111|H39DF18
-39DF18:lI114|H39DFA8
-39DFA8:lI108|H39E050
-39E050:lI100|H39E100
-39E100:lI47|H39E1C4
-39E1C4:lI120|H39E2A0
-39E2A0:lI45|H39E394
-39E394:lI118|H39E490
-39E490:lI114|H39E598
-39E598:lI109|H39E6AC
-39E6AC:lI108|N
-39DD48:lI118|H39DDB0
-39DDB0:lI114|H39DE18
-39DE18:lI109|H39DE90
-39DE90:lI108|N
-39DCF0:lH39DD58|H39DD64
-39DD58:t2:H39DDC0,H39DDC8
-39DDC8:lI120|H39DE30
-39DE30:lI45|H39DEA8
-39DEA8:lI99|H39DF20
-39DF20:lI111|H39DFB0
-39DFB0:lI110|H39E058
-39E058:lI102|H39E108
-39E108:lI101|H39E1CC
-39E1CC:lI114|H39E2A8
-39E2A8:lI101|H39E39C
-39E39C:lI110|H39E498
-39E498:lI99|H39E5A0
-39E5A0:lI101|H39E6B4
-39E6B4:lI47|H39E7C0
-39E7C0:lI120|H39E8D4
-39E8D4:lI45|H39E9E8
-39E9E8:lI99|H39EADC
-39EADC:lI111|H39EBD0
-39EBD0:lI111|H39ECC4
-39ECC4:lI108|H39EDB8
-39EDB8:lI116|H39EE8C
-39EE8C:lI97|H39EF60
-39EF60:lI108|H39F03C
-39F03C:lI107|N
-39DDC0:lI105|H39DE28
-39DE28:lI99|H39DEA0
-39DEA0:lI101|N
-39DD64:lH39DDD0|H39DDDC
-39DDD0:t2:H39DE38,H39DE40
-39DE40:lI118|H39DEB8
-39DEB8:lI105|H39DF30
-39DF30:lI100|H39DFC0
-39DFC0:lI101|H39E068
-39E068:lI111|H39E110
-39E110:lI47|H39E1D4
-39E1D4:lI120|H39E2B0
-39E2B0:lI45|H39E3A4
-39E3A4:lI115|H39E4A0
-39E4A0:lI103|H39E5A8
-39E5A8:lI105|H39E6BC
-39E6BC:lI45|H39E7C8
-39E7C8:lI109|H39E8DC
-39E8DC:lI111|H39E9F0
-39E9F0:lI118|H39EAE4
-39EAE4:lI105|H39EBD8
-39EBD8:lI101|N
-39DE38:lI109|H39DEB0
-39DEB0:lI111|H39DF28
-39DF28:lI118|H39DFB8
-39DFB8:lI105|H39E060
-39E060:lI101|N
-39DDDC:lH39DE48|H39DE54
-39DE48:t2:H39DEC0,H39DEC8
-39DEC8:lI118|H39DF40
-39DF40:lI105|H39DFD0
-39DFD0:lI100|H39E070
-39E070:lI101|H39E118
-39E118:lI111|H39E1DC
-39E1DC:lI47|H39E2B8
-39E2B8:lI120|H39E3AC
-39E3AC:lI45|H39E4A8
-39E4A8:lI109|H39E5B0
-39E5B0:lI115|H39E6C4
-39E6C4:lI118|H39E7D0
-39E7D0:lI105|H39E8E4
-39E8E4:lI100|H39E9F8
-39E9F8:lI101|H39EAEC
-39EAEC:lI111|N
-39DEC0:lI97|H39DF38
-39DF38:lI118|H39DFC8
-39DFC8:lI105|N
-39DE54:lH39DED0|H39DEDC
-39DED0:t2:H39DF48,H39DF50
-39DF50:lI118|H39DFE0
-39DFE0:lI105|H39E078
-39E078:lI100|H39E120
-39E120:lI101|H39E1E4
-39E1E4:lI111|H39E2C0
-39E2C0:lI47|H39E3B4
-39E3B4:lI113|H39E4B0
-39E4B0:lI117|H39E5B8
-39E5B8:lI105|H39E6CC
-39E6CC:lI99|H39E7D8
-39E7D8:lI107|H39E8EC
-39E8EC:lI116|H39EA00
-39EA00:lI105|H39EAF4
-39EAF4:lI109|H39EBE0
-39EBE0:lI101|N
-39DF48:lI113|H39DFD8
-39DFD8:lI116|N
-39DEDC:lH39DF58|H39DF64
-39DF58:t2:H39DFE8,H39DFF0
-39DFF0:lI118|H39E088
-39E088:lI105|H39E130
-39E130:lI100|H39E1EC
-39E1EC:lI101|H39E2C8
-39E2C8:lI111|H39E3BC
-39E3BC:lI47|H39E4B8
-39E4B8:lI113|H39E5C0
-39E5C0:lI117|H39E6D4
-39E6D4:lI105|H39E7E0
-39E7E0:lI99|H39E8F4
-39E8F4:lI107|H39EA08
-39EA08:lI116|H39EAFC
-39EAFC:lI105|H39EBE8
-39EBE8:lI109|H39ECCC
-39ECCC:lI101|N
-39DFE8:lI109|H39E080
-39E080:lI111|H39E128
-39E128:lI118|N
-39DF64:lH39DFF8|H39E004
-39DFF8:t2:H39E090,H39E098
-39E098:lI118|H39E140
-39E140:lI105|H39E1FC
-39E1FC:lI100|H39E2D8
-39E2D8:lI101|H39E3C4
-39E3C4:lI111|H39E4C0
-39E4C0:lI47|H39E5C8
-39E5C8:lI109|H39E6DC
-39E6DC:lI112|H39E7E8
-39E7E8:lI101|H39E8FC
-39E8FC:lI103|N
-39E090:lI109|H39E138
-39E138:lI112|H39E1F4
-39E1F4:lI101|H39E2D0
-39E2D0:lI103|N
-39E004:lH39E0A0|H39E0AC
-39E0A0:t2:H39E148,H39E150
-39E150:lI118|H39E20C
-39E20C:lI105|H39E2E8
-39E2E8:lI100|H39E3CC
-39E3CC:lI101|H39E4C8
-39E4C8:lI111|H39E5D0
-39E5D0:lI47|H39E6E4
-39E6E4:lI109|H39E7F0
-39E7F0:lI112|H39E904
-39E904:lI101|H39EA10
-39EA10:lI103|N
-39E148:lI109|H39E204
-39E204:lI112|H39E2E0
-39E2E0:lI103|N
-39E0AC:lH39E158|H39E164
-39E158:t2:H39E214,H39E21C
-39E21C:lI118|H39E2F8
-39E2F8:lI105|H39E3DC
-39E3DC:lI100|H39E4D0
-39E4D0:lI101|H39E5D8
-39E5D8:lI111|H39E6EC
-39E6EC:lI47|H39E7F8
-39E7F8:lI109|H39E90C
-39E90C:lI112|H39EA18
-39EA18:lI101|H39EB04
-39EB04:lI103|N
-39E214:lI109|H39E2F0
-39E2F0:lI112|H39E3D4
-39E3D4:lI101|N
-39E164:lH39E224|H39E230
-39E224:t2:H39E300,H39E308
-39E308:lI116|H39E3EC
-39E3EC:lI101|H39E4E0
-39E4E0:lI120|H39E5E8
-39E5E8:lI116|H39E6F4
-39E6F4:lI47|H39E800
-39E800:lI120|H39E914
-39E914:lI45|H39EA20
-39EA20:lI115|H39EB0C
-39EB0C:lI103|H39EBF0
-39EBF0:lI109|H39ECD4
-39ECD4:lI108|N
-39E300:lI115|H39E3E4
-39E3E4:lI103|H39E4D8
-39E4D8:lI109|H39E5E0
-39E5E0:lI108|N
-39E230:lH39E310|H39E31C
-39E310:t2:H39E3F4,H39E3FC
-39E3FC:lI116|H39E4F0
-39E4F0:lI101|H39E5F8
-39E5F8:lI120|H39E6FC
-39E6FC:lI116|H39E808
-39E808:lI47|H39E91C
-39E91C:lI120|H39EA28
-39EA28:lI45|H39EB14
-39EB14:lI115|H39EBF8
-39EBF8:lI103|H39ECDC
-39ECDC:lI109|H39EDC0
-39EDC0:lI108|N
-39E3F4:lI115|H39E4E8
-39E4E8:lI103|H39E5F0
-39E5F0:lI109|N
-39E31C:lH39E404|H39E410
-39E404:t2:H39E4F8,H39E500
-39E500:lI116|H39E608
-39E608:lI101|H39E70C
-39E70C:lI120|H39E810
-39E810:lI116|H39E924
-39E924:lI47|H39EA30
-39EA30:lI120|H39EB1C
-39EB1C:lI45|H39EC00
-39EC00:lI115|H39ECE4
-39ECE4:lI101|H39EDC8
-39EDC8:lI116|H39EE94
-39EE94:lI101|H39EF68
-39EF68:lI120|H39F044
-39F044:lI116|N
-39E4F8:lI101|H39E600
-39E600:lI116|H39E704
-39E704:lI120|N
-39E410:lH39E508|H39E514
-39E508:t2:H39E610,H39E618
-39E618:lI116|H39E71C
-39E71C:lI101|H39E820
-39E820:lI120|H39E92C
-39E92C:lI116|H39EA38
-39EA38:lI47|H39EB24
-39EB24:lI116|H39EC08
-39EC08:lI97|H39ECEC
-39ECEC:lI98|H39EDD0
-39EDD0:lI45|H39EE9C
-39EE9C:lI115|H39EF70
-39EF70:lI101|H39F04C
-39F04C:lI112|H39F120
-39F120:lI97|H39F1F4
-39F1F4:lI114|H39F2C0
-39F2C0:lI97|H39F37C
-39F37C:lI116|H39F440
-39F440:lI101|H39F50C
-39F50C:lI100|H39F5D0
-39F5D0:lI45|H39F6A4
-39F6A4:lI118|H39F778
-39F778:lI97|H39F84C
-39F84C:lI108|H39F930
-39F930:lI117|H39FA0C
-39FA0C:lI101|H39FAE0
-39FAE0:lI115|N
-39E610:lI116|H39E714
-39E714:lI115|H39E818
-39E818:lI118|N
-39E514:lH39E620|H39E62C
-39E620:t2:H39E724,H39E72C
-39E72C:lI116|H39E830
-39E830:lI101|H39E93C
-39E93C:lI120|H39EA40
-39EA40:lI116|H39EB2C
-39EB2C:lI47|H39EC10
-39EC10:lI114|H39ECF4
-39ECF4:lI105|H39EDD8
-39EDD8:lI99|H39EEA4
-39EEA4:lI104|H39EF78
-39EF78:lI116|H39F054
-39F054:lI101|H39F128
-39F128:lI120|H39F1FC
-39F1FC:lI116|N
-39E724:lI114|H39E828
-39E828:lI116|H39E934
-39E934:lI120|N
-39E62C:lH39E734|H39E740
-39E734:t2:H39E838,H39E840
-39E840:lI116|H39E94C
-39E94C:lI101|H39EA50
-39EA50:lI120|H39EB34
-39EB34:lI116|H39EC18
-39EC18:lI47|H39ECFC
-39ECFC:lI112|H39EDE0
-39EDE0:lI108|H39EEAC
-39EEAC:lI97|H39EF80
-39EF80:lI105|H39F05C
-39F05C:lI110|N
-39E838:lI116|H39E944
-39E944:lI120|H39EA48
-39EA48:lI116|N
-39E740:lH39E848|H39E854
-39E848:t2:H39E954,H39E95C
-39E95C:lI116|H39EA60
-39EA60:lI101|H39EB44
-39EB44:lI120|H39EC28
-39EC28:lI116|H39ED0C
-39ED0C:lI47|H39EDE8
-39EDE8:lI120|H39EEB4
-39EEB4:lI45|H39EF88
-39EF88:lI115|H39F064
-39F064:lI101|H39F130
-39F130:lI114|H39F204
-39F204:lI118|H39F2C8
-39F2C8:lI101|H39F384
-39F384:lI114|H39F448
-39F448:lI45|H39F514
-39F514:lI112|H39F5D8
-39F5D8:lI97|H39F6AC
-39F6AC:lI114|H39F780
-39F780:lI115|H39F854
-39F854:lI101|H39F938
-39F938:lI100|H39FA14
-39FA14:lI45|H39FAE8
-39FAE8:lI104|H39FBBC
-39FBBC:lI116|H39FC88
-39FC88:lI109|H39FD4C
-39FD4C:lI108|N
-39E954:lI115|H39EA58
-39EA58:lI104|H39EB3C
-39EB3C:lI116|H39EC20
-39EC20:lI109|H39ED04
-39ED04:lI108|N
-39E854:lH39E964|H39E970
-39E964:t2:H39EA68,H39EA70
-39EA70:lI116|H39EB54
-39EB54:lI101|H39EC38
-39EC38:lI120|H39ED1C
-39ED1C:lI116|H39EDF0
-39EDF0:lI47|H39EEBC
-39EEBC:lI104|H39EF90
-39EF90:lI116|H39F06C
-39F06C:lI109|H39F138
-39F138:lI108|N
-39EA68:lI104|H39EB4C
-39EB4C:lI116|H39EC30
-39EC30:lI109|H39ED14
-39ED14:lI108|N
-39E970:lH39EA78|H39EA84
-39EA78:t2:H39EB5C,H39EB64
-39EB64:lI116|H39EC48
-39EC48:lI101|H39ED2C
-39ED2C:lI120|H39EDF8
-39EDF8:lI116|H39EEC4
-39EEC4:lI47|H39EF98
-39EF98:lI104|H39F074
-39F074:lI116|H39F140
-39F140:lI109|H39F20C
-39F20C:lI108|N
-39EB5C:lI104|H39EC40
-39EC40:lI116|H39ED24
-39ED24:lI109|N
-39EA84:lH39EB6C|H39EB78
-39EB6C:t2:H39EC50,H39EC58
-39EC58:lI105|H39ED3C
-39ED3C:lI109|H39EE08
-39EE08:lI97|H39EECC
-39EECC:lI103|H39EFA0
-39EFA0:lI101|H39F07C
-39F07C:lI47|H39F148
-39F148:lI120|H39F214
-39F214:lI45|H39F2D0
-39F2D0:lI120|H39F38C
-39F38C:lI119|H39F450
-39F450:lI105|H39F51C
-39F51C:lI110|H39F5E0
-39F5E0:lI100|H39F6B4
-39F6B4:lI111|H39F788
-39F788:lI119|H39F85C
-39F85C:lI100|H39F940
-39F940:lI117|H39FA1C
-39FA1C:lI109|H39FAF0
-39FAF0:lI112|N
-39EC50:lI120|H39ED34
-39ED34:lI119|H39EE00
-39EE00:lI100|N
-39EB78:lH39EC60|H39EC6C
-39EC60:t2:H39ED44,H39ED4C
-39ED4C:lI105|H39EE18
-39EE18:lI109|H39EEDC
-39EEDC:lI97|H39EFA8
-39EFA8:lI103|H39F084
-39F084:lI101|H39F150
-39F150:lI47|H39F21C
-39F21C:lI120|H39F2D8
-39F2D8:lI45|H39F394
-39F394:lI120|H39F458
-39F458:lI112|H39F524
-39F524:lI105|H39F5E8
-39F5E8:lI120|H39F6BC
-39F6BC:lI109|H39F790
-39F790:lI97|H39F864
-39F864:lI112|N
-39ED44:lI120|H39EE10
-39EE10:lI112|H39EED4
-39EED4:lI109|N
-39EC6C:lH39ED54|H39ED60
-39ED54:t2:H39EE20,H39EE28
-39EE28:lI105|H39EEEC
-39EEEC:lI109|H39EFB8
-39EFB8:lI97|H39F08C
-39F08C:lI103|H39F158
-39F158:lI101|H39F224
-39F224:lI47|H39F2E0
-39F2E0:lI120|H39F39C
-39F39C:lI45|H39F460
-39F460:lI120|H39F52C
-39F52C:lI98|H39F5F0
-39F5F0:lI105|H39F6C4
-39F6C4:lI116|H39F798
-39F798:lI109|H39F86C
-39F86C:lI97|H39F948
-39F948:lI112|N
-39EE20:lI120|H39EEE4
-39EEE4:lI98|H39EFB0
-39EFB0:lI109|N
-39ED60:lH39EE30|H39EE3C
-39EE30:t2:H39EEF4,H39EEFC
-39EEFC:lI105|H39EFC8
-39EFC8:lI109|H39F09C
-39F09C:lI97|H39F160
-39F160:lI103|H39F22C
-39F22C:lI101|H39F2E8
-39F2E8:lI47|H39F3A4
-39F3A4:lI120|H39F468
-39F468:lI45|H39F534
-39F534:lI114|H39F5F8
-39F5F8:lI103|H39F6CC
-39F6CC:lI98|N
-39EEF4:lI114|H39EFC0
-39EFC0:lI103|H39F094
-39F094:lI98|N
-39EE3C:lH39EF04|H39EF10
-39EF04:t2:H39EFD0,H39EFD8
-39EFD8:lI105|H39F0AC
-39F0AC:lI109|H39F170
-39F170:lI97|H39F234
-39F234:lI103|H39F2F0
-39F2F0:lI101|H39F3AC
-39F3AC:lI47|H39F470
-39F470:lI120|H39F53C
-39F53C:lI45|H39F600
-39F600:lI112|H39F6D4
-39F6D4:lI111|H39F7A0
-39F7A0:lI114|H39F874
-39F874:lI116|H39F950
-39F950:lI97|H39FA24
-39FA24:lI98|H39FAF8
-39FAF8:lI108|H39FBC4
-39FBC4:lI101|H39FC90
-39FC90:lI45|H39FD54
-39FD54:lI112|H39FE18
-39FE18:lI105|H39FECC
-39FECC:lI120|H39FF88
-39FF88:lI109|H3A003C
-3A003C:lI97|H3A00E8
-3A00E8:lI112|N
-39EFD0:lI112|H39F0A4
-39F0A4:lI112|H39F168
-39F168:lI109|N
-39EF10:lH39EFE0|H39EFEC
-39EFE0:t2:H39F0B4,H39F0BC
-39F0BC:lI105|H39F180
-39F180:lI109|H39F244
-39F244:lI97|H39F2F8
-39F2F8:lI103|H39F3B4
-39F3B4:lI101|H39F478
-39F478:lI47|H39F544
-39F544:lI120|H39F608
-39F608:lI45|H39F6DC
-39F6DC:lI112|H39F7A8
-39F7A8:lI111|H39F87C
-39F87C:lI114|H39F958
-39F958:lI116|H39FA2C
-39FA2C:lI97|H39FB00
-39FB00:lI98|H39FBCC
-39FBCC:lI108|H39FC98
-39FC98:lI101|H39FD5C
-39FD5C:lI45|H39FE20
-39FE20:lI103|H39FED4
-39FED4:lI114|H39FF90
-39FF90:lI97|H3A0044
-3A0044:lI121|H3A00F0
-3A00F0:lI109|H3A0194
-3A0194:lI97|H3A0248
-3A0248:lI112|N
-39F0B4:lI112|H39F178
-39F178:lI103|H39F23C
-39F23C:lI109|N
-39EFEC:lH39F0C4|H39F0D0
-39F0C4:t2:H39F188,H39F190
-39F190:lI105|H39F254
-39F254:lI109|H39F308
-39F308:lI97|H39F3BC
-39F3BC:lI103|H39F480
-39F480:lI101|H39F54C
-39F54C:lI47|H39F610
-39F610:lI120|H39F6E4
-39F6E4:lI45|H39F7B0
-39F7B0:lI112|H39F884
-39F884:lI111|H39F960
-39F960:lI114|H39FA34
-39FA34:lI116|H39FB08
-39FB08:lI97|H39FBD4
-39FBD4:lI98|H39FCA0
-39FCA0:lI108|H39FD64
-39FD64:lI101|H39FE28
-39FE28:lI45|H39FEDC
-39FEDC:lI98|H39FF98
-39FF98:lI105|H3A004C
-3A004C:lI116|H3A00F8
-3A00F8:lI109|H3A019C
-3A019C:lI97|H3A0250
-3A0250:lI112|N
-39F188:lI112|H39F24C
-39F24C:lI98|H39F300
-39F300:lI109|N
-39F0D0:lH39F198|H39F1A4
-39F198:t2:H39F25C,H39F264
-39F264:lI105|H39F318
-39F318:lI109|H39F3CC
-39F3CC:lI97|H39F488
-39F488:lI103|H39F554
-39F554:lI101|H39F618
-39F618:lI47|H39F6EC
-39F6EC:lI120|H39F7B8
-39F7B8:lI45|H39F88C
-39F88C:lI112|H39F968
-39F968:lI111|H39FA3C
-39FA3C:lI114|H39FB10
-39FB10:lI116|H39FBDC
-39FBDC:lI97|H39FCA8
-39FCA8:lI98|H39FD6C
-39FD6C:lI108|H39FE30
-39FE30:lI101|H39FEE4
-39FEE4:lI45|H39FFA0
-39FFA0:lI97|H3A0054
-3A0054:lI110|H3A0100
-3A0100:lI121|H3A01A4
-3A01A4:lI109|H3A0258
-3A0258:lI97|H3A0304
-3A0304:lI112|N
-39F25C:lI112|H39F310
-39F310:lI110|H39F3C4
-39F3C4:lI109|N
-39F1A4:lH39F26C|H39F278
-39F26C:t2:H39F320,H39F328
-39F328:lI105|H39F3DC
-39F3DC:lI109|H39F498
-39F498:lI97|H39F55C
-39F55C:lI103|H39F620
-39F620:lI101|H39F6F4
-39F6F4:lI47|H39F7C0
-39F7C0:lI120|H39F894
-39F894:lI45|H39F970
-39F970:lI99|H39FA44
-39FA44:lI109|H39FB18
-39FB18:lI117|H39FBE4
-39FBE4:lI45|H39FCB0
-39FCB0:lI114|H39FD74
-39FD74:lI97|H39FE38
-39FE38:lI115|H39FEEC
-39FEEC:lI116|H39FFA8
-39FFA8:lI101|H3A005C
-3A005C:lI114|N
-39F320:lI114|H39F3D4
-39F3D4:lI97|H39F490
-39F490:lI115|N
-39F278:lH39F330|H39F33C
-39F330:t2:H39F3E4,H39F3EC
-39F3EC:lI105|H39F4A8
-39F4A8:lI109|H39F56C
-39F56C:lI97|H39F630
-39F630:lI103|H39F6FC
-39F6FC:lI101|H39F7C8
-39F7C8:lI47|H39F89C
-39F89C:lI116|H39F978
-39F978:lI105|H39FA4C
-39FA4C:lI102|H39FB20
-39FB20:lI102|N
-39F3E4:lI116|H39F4A0
-39F4A0:lI105|H39F564
-39F564:lI102|H39F628
-39F628:lI102|N
-39F33C:lH39F3F4|H39F400
-39F3F4:t2:H39F4B0,H39F4B8
-39F4B8:lI105|H39F57C
-39F57C:lI109|H39F640
-39F640:lI97|H39F704
-39F704:lI103|H39F7D0
-39F7D0:lI101|H39F8A4
-39F8A4:lI47|H39F980
-39F980:lI116|H39FA54
-39FA54:lI105|H39FB28
-39FB28:lI102|H39FBEC
-39FBEC:lI102|N
-39F4B0:lI116|H39F574
-39F574:lI105|H39F638
-39F638:lI102|N
-39F400:lH39F4C0|H39F4CC
-39F4C0:t2:H39F584,H39F58C
-39F58C:lI105|H39F650
-39F650:lI109|H39F714
-39F714:lI97|H39F7D8
-39F7D8:lI103|H39F8AC
-39F8AC:lI101|H39F988
-39F988:lI47|H39FA5C
-39FA5C:lI112|H39FB30
-39FB30:lI110|H39FBF4
-39FBF4:lI103|N
-39F584:lI112|H39F648
-39F648:lI110|H39F70C
-39F70C:lI103|N
-39F4CC:lH39F594|H39F5A0
-39F594:t2:H39F658,H39F660
-39F660:lI105|H39F724
-39F724:lI109|H39F7E8
-39F7E8:lI97|H39F8BC
-39F8BC:lI103|H39F990
-39F990:lI101|H39FA64
-39FA64:lI47|H39FB38
-39FB38:lI106|H39FBFC
-39FBFC:lI112|H39FCB8
-39FCB8:lI101|H39FD7C
-39FD7C:lI103|N
-39F658:lI106|H39F71C
-39F71C:lI112|H39F7E0
-39F7E0:lI101|H39F8B4
-39F8B4:lI103|N
-39F5A0:lH39F668|H39F674
-39F668:t2:H39F72C,H39F734
-39F734:lI105|H39F7F8
-39F7F8:lI109|H39F8CC
-39F8CC:lI97|H39F998
-39F998:lI103|H39FA6C
-39FA6C:lI101|H39FB40
-39FB40:lI47|H39FC04
-39FC04:lI106|H39FCC0
-39FCC0:lI112|H39FD84
-39FD84:lI101|H39FE40
-39FE40:lI103|N
-39F72C:lI106|H39F7F0
-39F7F0:lI112|H39F8C4
-39F8C4:lI103|N
-39F674:lH39F73C|H39F748
-39F73C:t2:H39F800,H39F808
-39F808:lI105|H39F8DC
-39F8DC:lI109|H39F9A8
-39F9A8:lI97|H39FA74
-39FA74:lI103|H39FB48
-39FB48:lI101|H39FC0C
-39FC0C:lI47|H39FCC8
-39FCC8:lI106|H39FD8C
-39FD8C:lI112|H39FE48
-39FE48:lI101|H39FEF4
-39FEF4:lI103|N
-39F800:lI106|H39F8D4
-39F8D4:lI112|H39F9A0
-39F9A0:lI101|N
-39F748:lH39F810|H39F81C
-39F810:t2:H39F8E4,H39F8EC
-39F8EC:lI105|H39F9B8
-39F9B8:lI109|H39FA84
-39FA84:lI97|H39FB50
-39FB50:lI103|H39FC14
-39FC14:lI101|H39FCD0
-39FCD0:lI47|H39FD94
-39FD94:lI105|H39FE50
-39FE50:lI101|H39FEFC
-39FEFC:lI102|N
-39F8E4:lI105|H39F9B0
-39F9B0:lI101|H39FA7C
-39FA7C:lI102|N
-39F81C:lH39F8F4|H39F900
-39F8F4:t2:H39F9C0,H39F9C8
-39F9C8:lI105|H39FA94
-39FA94:lI109|H39FB60
-39FB60:lI97|H39FC1C
-39FC1C:lI103|H39FCD8
-39FCD8:lI101|H39FD9C
-39FD9C:lI47|H39FE58
-39FE58:lI103|H39FF04
-39FF04:lI105|H39FFB0
-39FFB0:lI102|N
-39F9C0:lI103|H39FA8C
-39FA8C:lI105|H39FB58
-39FB58:lI102|N
-39F900:lH39F9D0|H39F9DC
-39F9D0:t2:H39FA9C,H39FAA4
-39FAA4:lI99|H39FB70
-39FB70:lI104|H39FC2C
-39FC2C:lI101|H39FCE0
-39FCE0:lI109|H39FDA4
-39FDA4:lI105|H39FE60
-39FE60:lI99|H39FF0C
-39FF0C:lI97|H39FFB8
-39FFB8:lI108|H3A0064
-3A0064:lI47|H3A0108
-3A0108:lI120|H3A01AC
-3A01AC:lI45|H3A0260
-3A0260:lI112|H3A030C
-3A030C:lI100|H3A03B8
-3A03B8:lI98|N
-39FA9C:lI112|H39FB68
-39FB68:lI100|H39FC24
-39FC24:lI98|N
-39F9DC:lH39FAAC|H39FAB8
-39FAAC:t2:H39FB78,H39FB80
-39FB80:lI99|H39FC3C
-39FC3C:lI104|H39FCF0
-39FCF0:lI101|H39FDAC
-39FDAC:lI109|H39FE68
-39FE68:lI105|H39FF14
-39FF14:lI99|H39FFC0
-39FFC0:lI97|H3A006C
-3A006C:lI108|H3A0110
-3A0110:lI47|H3A01B4
-3A01B4:lI120|H3A0268
-3A0268:lI45|H3A0314
-3A0314:lI112|H3A03C0
-3A03C0:lI100|H3A0454
-3A0454:lI98|N
-39FB78:lI120|H39FC34
-39FC34:lI121|H39FCE8
-39FCE8:lI122|N
-39FAB8:lH39FB88|H39FB94
-39FB88:t2:H39FC44,H39FC4C
-39FC4C:lI97|H39FD00
-39FD00:lI117|H39FDBC
-39FDBC:lI100|H39FE70
-39FE70:lI105|H39FF1C
-39FF1C:lI111|H39FFC8
-39FFC8:lI47|H3A0074
-3A0074:lI120|H3A0118
-3A0118:lI45|H3A01BC
-3A01BC:lI119|H3A0270
-3A0270:lI97|H3A031C
-3A031C:lI118|N
-39FC44:lI119|H39FCF8
-39FCF8:lI97|H39FDB4
-39FDB4:lI118|N
-39FB94:lH39FC54|H39FC60
-39FC54:t2:H39FD08,H39FD10
-39FD10:lI97|H39FDCC
-39FDCC:lI117|H39FE78
-39FE78:lI100|H39FF24
-39FF24:lI105|H39FFD0
-39FFD0:lI111|H3A007C
-3A007C:lI47|H3A0120
-3A0120:lI120|H3A01C4
-3A01C4:lI45|H3A0278
-3A0278:lI114|H3A0324
-3A0324:lI101|H3A03C8
-3A03C8:lI97|H3A045C
-3A045C:lI108|H3A04F8
-3A04F8:lI97|H3A059C
-3A059C:lI117|H3A0648
-3A0648:lI100|H3A06F4
-3A06F4:lI105|H3A07A0
-3A07A0:lI111|N
-39FD08:lI114|H39FDC4
-39FDC4:lI97|N
-39FC60:lH39FD18|H39FD24
-39FD18:t2:H39FDD4,H39FDDC
-39FDDC:lI97|H39FE88
-39FE88:lI117|H39FF34
-39FF34:lI100|H39FFD8
-39FFD8:lI105|H3A0084
-3A0084:lI111|H3A0128
-3A0128:lI47|H3A01CC
-3A01CC:lI120|H3A0280
-3A0280:lI45|H3A032C
-3A032C:lI112|H3A03D0
-3A03D0:lI110|H3A0464
-3A0464:lI45|H3A0500
-3A0500:lI114|H3A05A4
-3A05A4:lI101|H3A0650
-3A0650:lI97|H3A06FC
-3A06FC:lI108|H3A07A8
-3A07A8:lI97|H3A0844
-3A0844:lI117|H3A08D0
-3A08D0:lI100|H3A0964
-3A0964:lI105|H3A09F8
-3A09F8:lI111|H3A0A94
-3A0A94:lI45|H3A0B40
-3A0B40:lI112|H3A0BEC
-3A0BEC:lI108|H3A0CA8
-3A0CA8:lI117|H3A0D64
-3A0D64:lI103|H3A0E18
-3A0E18:lI105|H3A0ECC
-3A0ECC:lI110|N
-39FDD4:lI114|H39FE80
-39FE80:lI112|H39FF2C
-39FF2C:lI109|N
-39FD24:lH39FDE4|H39FDF0
-39FDE4:t2:H39FE90,H39FE98
-39FE98:lI97|H39FF44
-39FF44:lI117|H39FFE8
-39FFE8:lI100|H3A008C
-3A008C:lI105|H3A0130
-3A0130:lI111|H3A01D4
-3A01D4:lI47|H3A0288
-3A0288:lI120|H3A0334
-3A0334:lI45|H3A03D8
-3A03D8:lI112|H3A046C
-3A046C:lI110|H3A0508
-3A0508:lI45|H3A05AC
-3A05AC:lI114|H3A0658
-3A0658:lI101|H3A0704
-3A0704:lI97|H3A07B0
-3A07B0:lI108|H3A084C
-3A084C:lI97|H3A08D8
-3A08D8:lI117|H3A096C
-3A096C:lI100|H3A0A00
-3A0A00:lI105|H3A0A9C
-3A0A9C:lI111|N
-39FE90:lI114|H39FF3C
-39FF3C:lI97|H39FFE0
-39FFE0:lI109|N
-39FDF0:lH39FEA0|H39FEAC
-39FEA0:t2:H39FF4C,H39FF54
-39FF54:lI97|H39FFF8
-39FFF8:lI117|H3A009C
-3A009C:lI100|H3A0138
-3A0138:lI105|H3A01DC
-3A01DC:lI111|H3A0290
-3A0290:lI47|H3A033C
-3A033C:lI120|H3A03E0
-3A03E0:lI45|H3A0474
-3A0474:lI97|H3A0510
-3A0510:lI105|H3A05B4
-3A05B4:lI102|H3A0660
-3A0660:lI102|N
-39FF4C:lI97|H39FFF0
-39FFF0:lI105|H3A0094
-3A0094:lI102|N
-39FEAC:lH39FF5C|H39FF68
-39FF5C:t2:H3A0000,H3A0008
-3A0008:lI97|H3A00AC
-3A00AC:lI117|H3A0148
-3A0148:lI100|H3A01EC
-3A01EC:lI105|H3A0298
-3A0298:lI111|H3A0344
-3A0344:lI47|H3A03E8
-3A03E8:lI120|H3A047C
-3A047C:lI45|H3A0518
-3A0518:lI97|H3A05BC
-3A05BC:lI105|H3A0668
-3A0668:lI102|H3A070C
-3A070C:lI102|N
-3A0000:lI97|H3A00A4
-3A00A4:lI105|H3A0140
-3A0140:lI102|H3A01E4
-3A01E4:lI102|N
-39FF68:lH3A0010|H3A001C
-3A0010:t2:H3A00B4,H3A00BC
-3A00BC:lI97|H3A0158
-3A0158:lI117|H3A01FC
-3A01FC:lI100|H3A02A8
-3A02A8:lI105|H3A034C
-3A034C:lI111|H3A03F0
-3A03F0:lI47|H3A0484
-3A0484:lI120|H3A0520
-3A0520:lI45|H3A05C4
-3A05C4:lI97|H3A0670
-3A0670:lI105|H3A0714
-3A0714:lI102|H3A07B8
-3A07B8:lI102|N
-3A00B4:lI97|H3A0150
-3A0150:lI105|H3A01F4
-3A01F4:lI102|H3A02A0
-3A02A0:lI99|N
-3A001C:lH3A00C4|H3A00D0
-3A00C4:t2:H3A0160,H3A0168
-3A0168:lI97|H3A020C
-3A020C:lI117|H3A02B8
-3A02B8:lI100|H3A035C
-3A035C:lI105|H3A03F8
-3A03F8:lI111|H3A048C
-3A048C:lI47|H3A0528
-3A0528:lI109|H3A05CC
-3A05CC:lI112|H3A0678
-3A0678:lI101|H3A071C
-3A071C:lI103|N
-3A0160:lI109|H3A0204
-3A0204:lI112|H3A02B0
-3A02B0:lI103|H3A0354
-3A0354:lI97|N
-3A00D0:lH3A0170|H3A017C
-3A0170:t2:H3A0214,H3A021C
-3A021C:lI97|H3A02C8
-3A02C8:lI117|H3A036C
-3A036C:lI100|H3A0400
-3A0400:lI105|H3A0494
-3A0494:lI111|H3A0530
-3A0530:lI47|H3A05D4
-3A05D4:lI109|H3A0680
-3A0680:lI112|H3A0724
-3A0724:lI101|H3A07C0
-3A07C0:lI103|N
-3A0214:lI109|H3A02C0
-3A02C0:lI112|H3A0364
-3A0364:lI50|N
-3A017C:lH3A0224|H3A0230
-3A0224:t2:H3A02D0,H3A02D8
-3A02D8:lI97|H3A037C
-3A037C:lI117|H3A0408
-3A0408:lI100|H3A049C
-3A049C:lI105|H3A0538
-3A0538:lI111|H3A05DC
-3A05DC:lI47|H3A0688
-3A0688:lI98|H3A072C
-3A072C:lI97|H3A07C8
-3A07C8:lI115|H3A0854
-3A0854:lI105|H3A08E0
-3A08E0:lI99|N
-3A02D0:lI97|H3A0374
-3A0374:lI117|N
-3A0230:lH3A02E0|H3A02EC
-3A02E0:t2:H3A0384,H3A038C
-3A038C:lI97|H3A0418
-3A0418:lI117|H3A04AC
-3A04AC:lI100|H3A0540
-3A0540:lI105|H3A05E4
-3A05E4:lI111|H3A0690
-3A0690:lI47|H3A0734
-3A0734:lI98|H3A07D0
-3A07D0:lI97|H3A085C
-3A085C:lI115|H3A08E8
-3A08E8:lI105|H3A0974
-3A0974:lI99|N
-3A0384:lI115|H3A0410
-3A0410:lI110|H3A04A4
-3A04A4:lI100|N
-3A02EC:lH3A0394|H3A03A0
-3A0394:t2:H3A0420,H3A0428
-3A0428:lI97|H3A04BC
-3A04BC:lI112|H3A0550
-3A0550:lI112|H3A05EC
-3A05EC:lI108|H3A0698
-3A0698:lI105|H3A073C
-3A073C:lI99|H3A07D8
-3A07D8:lI97|H3A0864
-3A0864:lI116|H3A08F0
-3A08F0:lI105|H3A097C
-3A097C:lI111|H3A0A08
-3A0A08:lI110|H3A0AA4
-3A0AA4:lI47|H3A0B48
-3A0B48:lI122|H3A0BF4
-3A0BF4:lI105|H3A0CB0
-3A0CB0:lI112|N
-3A0420:lI122|H3A04B4
-3A04B4:lI105|H3A0548
-3A0548:lI112|N
-3A03A0:lH3A0430|H3A043C
-3A0430:t2:H3A04C4,H3A04CC
-3A04CC:lI97|H3A0560
-3A0560:lI112|H3A05FC
-3A05FC:lI112|H3A06A0
-3A06A0:lI108|H3A0744
-3A0744:lI105|H3A07E0
-3A07E0:lI99|H3A086C
-3A086C:lI97|H3A08F8
-3A08F8:lI116|H3A0984
-3A0984:lI105|H3A0A10
-3A0A10:lI111|H3A0AAC
-3A0AAC:lI110|H3A0B50
-3A0B50:lI47|H3A0BFC
-3A0BFC:lI120|H3A0CB8
-3A0CB8:lI45|H3A0D6C
-3A0D6C:lI119|H3A0E20
-3A0E20:lI97|H3A0ED4
-3A0ED4:lI105|H3A0F90
-3A0F90:lI115|H3A105C
-3A105C:lI45|H3A1130
-3A1130:lI115|H3A1204
-3A1204:lI111|H3A12D0
-3A12D0:lI117|H3A13A4
-3A13A4:lI114|H3A1480
-3A1480:lI99|H3A1564
-3A1564:lI101|N
-3A04C4:lI115|H3A0558
-3A0558:lI114|H3A05F4
-3A05F4:lI99|N
-3A043C:lH3A04D4|H3A04E0
-3A04D4:t2:H3A0568,H3A0570
-3A0570:lI97|H3A060C
-3A060C:lI112|H3A06B0
-3A06B0:lI112|H3A0754
-3A0754:lI108|H3A07F0
-3A07F0:lI105|H3A0874
-3A0874:lI99|H3A0900
-3A0900:lI97|H3A098C
-3A098C:lI116|H3A0A18
-3A0A18:lI105|H3A0AB4
-3A0AB4:lI111|H3A0B58
-3A0B58:lI110|H3A0C04
-3A0C04:lI47|H3A0CC0
-3A0CC0:lI120|H3A0D74
-3A0D74:lI45|H3A0E28
-3A0E28:lI117|H3A0EDC
-3A0EDC:lI115|H3A0F98
-3A0F98:lI116|H3A1064
-3A1064:lI97|H3A1138
-3A1138:lI114|N
-3A0568:lI117|H3A0604
-3A0604:lI115|H3A06A8
-3A06A8:lI116|H3A074C
-3A074C:lI97|H3A07E8
-3A07E8:lI114|N
-3A04E0:lH3A0578|H3A0584
-3A0578:t2:H3A0614,H3A061C
-3A061C:lI97|H3A06C0
-3A06C0:lI112|H3A075C
-3A075C:lI112|H3A07F8
-3A07F8:lI108|H3A087C
-3A087C:lI105|H3A0908
-3A0908:lI99|H3A0994
-3A0994:lI97|H3A0A20
-3A0A20:lI116|H3A0ABC
-3A0ABC:lI105|H3A0B60
-3A0B60:lI111|H3A0C0C
-3A0C0C:lI110|H3A0CC8
-3A0CC8:lI47|H3A0D7C
-3A0D7C:lI120|H3A0E30
-3A0E30:lI45|H3A0EE4
-3A0EE4:lI116|H3A0FA0
-3A0FA0:lI114|H3A106C
-3A106C:lI111|H3A1140
-3A1140:lI102|H3A120C
-3A120C:lI102|H3A12D8
-3A12D8:lI45|H3A13AC
-3A13AC:lI109|H3A1488
-3A1488:lI115|N
-3A0614:lI109|H3A06B8
-3A06B8:lI115|N
-3A0584:lH3A0624|H3A0630
-3A0624:t2:H3A06C8,H3A06D0
-3A06D0:lI97|H3A076C
-3A076C:lI112|H3A0800
-3A0800:lI112|H3A0884
-3A0884:lI108|H3A0910
-3A0910:lI105|H3A099C
-3A099C:lI99|H3A0A28
-3A0A28:lI97|H3A0AC4
-3A0AC4:lI116|H3A0B68
-3A0B68:lI105|H3A0C14
-3A0C14:lI111|H3A0CD0
-3A0CD0:lI110|H3A0D84
-3A0D84:lI47|H3A0E38
-3A0E38:lI120|H3A0EEC
-3A0EEC:lI45|H3A0FA8
-3A0FA8:lI116|H3A1074
-3A1074:lI114|H3A1148
-3A1148:lI111|H3A1214
-3A1214:lI102|H3A12E0
-3A12E0:lI102|H3A13B4
-3A13B4:lI45|H3A1490
-3A1490:lI109|H3A156C
-3A156C:lI101|N
-3A06C8:lI109|H3A0764
-3A0764:lI101|N
-3A0630:lH3A06D8|H3A06E4
-3A06D8:t2:H3A0774,H3A077C
-3A077C:lI97|H3A0810
-3A0810:lI112|H3A0894
-3A0894:lI112|H3A0918
-3A0918:lI108|H3A09A4
-3A09A4:lI105|H3A0A30
-3A0A30:lI99|H3A0ACC
-3A0ACC:lI97|H3A0B70
-3A0B70:lI116|H3A0C1C
-3A0C1C:lI105|H3A0CD8
-3A0CD8:lI111|H3A0D8C
-3A0D8C:lI110|H3A0E40
-3A0E40:lI47|H3A0EF4
-3A0EF4:lI120|H3A0FB0
-3A0FB0:lI45|H3A107C
-3A107C:lI116|H3A1150
-3A1150:lI114|H3A121C
-3A121C:lI111|H3A12E8
-3A12E8:lI102|H3A13BC
-3A13BC:lI102|H3A1498
-3A1498:lI45|H3A1574
-3A1574:lI109|H3A1648
-3A1648:lI97|H3A171C
-3A171C:lI110|N
-3A0774:lI109|H3A0808
-3A0808:lI97|H3A088C
-3A088C:lI110|N
-3A06E4:lH3A0784|H3A0790
-3A0784:t2:H3A0818,H3A0820
-3A0820:lI97|H3A089C
-3A089C:lI112|H3A0920
-3A0920:lI112|H3A09AC
-3A09AC:lI108|H3A0A38
-3A0A38:lI105|H3A0AD4
-3A0AD4:lI99|H3A0B78
-3A0B78:lI97|H3A0C24
-3A0C24:lI116|H3A0CE0
-3A0CE0:lI105|H3A0D94
-3A0D94:lI111|H3A0E48
-3A0E48:lI110|H3A0EFC
-3A0EFC:lI47|H3A0FB8
-3A0FB8:lI120|H3A1084
-3A1084:lI45|H3A1158
-3A1158:lI116|H3A1224
-3A1224:lI114|H3A12F0
-3A12F0:lI111|H3A13C4
-3A13C4:lI102|H3A14A0
-3A14A0:lI102|N
-3A0818:lI116|N
-3A0790:lH3A0828|H3A0834
-3A0828:t2:H3A08A4,H3A08AC
-3A08AC:lI97|H3A0930
-3A0930:lI112|H3A09B4
-3A09B4:lI112|H3A0A40
-3A0A40:lI108|H3A0ADC
-3A0ADC:lI105|H3A0B80
-3A0B80:lI99|H3A0C2C
-3A0C2C:lI97|H3A0CE8
-3A0CE8:lI116|H3A0D9C
-3A0D9C:lI105|H3A0E50
-3A0E50:lI111|H3A0F04
-3A0F04:lI110|H3A0FC0
-3A0FC0:lI47|H3A108C
-3A108C:lI120|H3A1160
-3A1160:lI45|H3A122C
-3A122C:lI116|H3A12F8
-3A12F8:lI114|H3A13CC
-3A13CC:lI111|H3A14A8
-3A14A8:lI102|H3A157C
-3A157C:lI102|N
-3A08A4:lI116|H3A0928
-3A0928:lI114|N
-3A0834:lH3A08B4|H3A08C0
-3A08B4:t2:H3A0938,H3A0940
-3A0940:lI97|H3A09C4
-3A09C4:lI112|H3A0A50
-3A0A50:lI112|H3A0AEC
-3A0AEC:lI108|H3A0B88
-3A0B88:lI105|H3A0C34
-3A0C34:lI99|H3A0CF0
-3A0CF0:lI97|H3A0DA4
-3A0DA4:lI116|H3A0E58
-3A0E58:lI105|H3A0F0C
-3A0F0C:lI111|H3A0FC8
-3A0FC8:lI110|H3A1094
-3A1094:lI47|H3A1168
-3A1168:lI120|H3A1234
-3A1234:lI45|H3A1300
-3A1300:lI116|H3A13D4
-3A13D4:lI114|H3A14B0
-3A14B0:lI111|H3A1584
-3A1584:lI102|H3A1650
-3A1650:lI102|N
-3A0938:lI114|H3A09BC
-3A09BC:lI111|H3A0A48
-3A0A48:lI102|H3A0AE4
-3A0AE4:lI102|N
-3A08C0:lH3A0948|H3A0954
-3A0948:t2:H3A09CC,H3A09D4
-3A09D4:lI97|H3A0A60
-3A0A60:lI112|H3A0AFC
-3A0AFC:lI112|H3A0B98
-3A0B98:lI108|H3A0C44
-3A0C44:lI105|H3A0D00
-3A0D00:lI99|H3A0DB4
-3A0DB4:lI97|H3A0E60
-3A0E60:lI116|H3A0F14
-3A0F14:lI105|H3A0FD0
-3A0FD0:lI111|H3A109C
-3A109C:lI110|H3A1170
-3A1170:lI47|H3A123C
-3A123C:lI120|H3A1308
-3A1308:lI45|H3A13DC
-3A13DC:lI116|H3A14B8
-3A14B8:lI101|H3A158C
-3A158C:lI120|H3A1658
-3A1658:lI105|H3A1724
-3A1724:lI110|H3A17E8
-3A17E8:lI102|H3A18AC
-3A18AC:lI111|N
-3A09CC:lI116|H3A0A58
-3A0A58:lI101|H3A0AF4
-3A0AF4:lI120|H3A0B90
-3A0B90:lI105|H3A0C3C
-3A0C3C:lI110|H3A0CF8
-3A0CF8:lI102|H3A0DAC
-3A0DAC:lI111|N
-3A0954:lH3A09DC|H3A09E8
-3A09DC:t2:H3A0A68,H3A0A70
-3A0A70:lI97|H3A0B0C
-3A0B0C:lI112|H3A0BA8
-3A0BA8:lI112|H3A0C54
-3A0C54:lI108|H3A0D08
-3A0D08:lI105|H3A0DBC
-3A0DBC:lI99|H3A0E68
-3A0E68:lI97|H3A0F1C
-3A0F1C:lI116|H3A0FD8
-3A0FD8:lI105|H3A10A4
-3A10A4:lI111|H3A1178
-3A1178:lI110|H3A1244
-3A1244:lI47|H3A1310
-3A1310:lI120|H3A13E4
-3A13E4:lI45|H3A14C0
-3A14C0:lI116|H3A1594
-3A1594:lI101|H3A1660
-3A1660:lI120|H3A172C
-3A172C:lI105|H3A17F0
-3A17F0:lI110|H3A18B4
-3A18B4:lI102|H3A1970
-3A1970:lI111|N
-3A0A68:lI116|H3A0B04
-3A0B04:lI101|H3A0BA0
-3A0BA0:lI120|H3A0C4C
-3A0C4C:lI105|N
-3A09E8:lH3A0A78|H3A0A84
-3A0A78:t2:H3A0B14,H3A0B1C
-3A0B1C:lI97|H3A0BB8
-3A0BB8:lI112|H3A0C64
-3A0C64:lI112|H3A0D10
-3A0D10:lI108|H3A0DC4
-3A0DC4:lI105|H3A0E70
-3A0E70:lI99|H3A0F24
-3A0F24:lI97|H3A0FE0
-3A0FE0:lI116|H3A10AC
-3A10AC:lI105|H3A1180
-3A1180:lI111|H3A124C
-3A124C:lI110|H3A1318
-3A1318:lI47|H3A13EC
-3A13EC:lI120|H3A14C8
-3A14C8:lI45|H3A159C
-3A159C:lI116|H3A1668
-3A1668:lI101|H3A1734
-3A1734:lI120|N
-3A0B14:lI116|H3A0BB0
-3A0BB0:lI101|H3A0C5C
-3A0C5C:lI120|N
-3A0A84:lH3A0B24|H3A0B30
-3A0B24:t2:H3A0BC0,H3A0BC8
-3A0BC8:lI97|H3A0C74
-3A0C74:lI112|H3A0D20
-3A0D20:lI112|H3A0DCC
-3A0DCC:lI108|H3A0E78
-3A0E78:lI105|H3A0F2C
-3A0F2C:lI99|H3A0FE8
-3A0FE8:lI97|H3A10B4
-3A10B4:lI116|H3A1188
-3A1188:lI105|H3A1254
-3A1254:lI111|H3A1320
-3A1320:lI110|H3A13F4
-3A13F4:lI47|H3A14D0
-3A14D0:lI120|H3A15A4
-3A15A4:lI45|H3A1670
-3A1670:lI116|H3A173C
-3A173C:lI99|H3A17F8
-3A17F8:lI108|N
-3A0BC0:lI116|H3A0C6C
-3A0C6C:lI99|H3A0D18
-3A0D18:lI108|N
-3A0B30:lH3A0BD0|H3A0BDC
-3A0BD0:t2:H3A0C7C,H3A0C84
-3A0C84:lI97|H3A0D30
-3A0D30:lI112|H3A0DDC
-3A0DDC:lI112|H3A0E80
-3A0E80:lI108|H3A0F34
-3A0F34:lI105|H3A0FF0
-3A0FF0:lI99|H3A10BC
-3A10BC:lI97|H3A1190
-3A1190:lI116|H3A125C
-3A125C:lI105|H3A1328
-3A1328:lI111|H3A13FC
-3A13FC:lI110|H3A14D8
-3A14D8:lI47|H3A15AC
-3A15AC:lI120|H3A1678
-3A1678:lI45|H3A1744
-3A1744:lI116|H3A1800
-3A1800:lI97|H3A18BC
-3A18BC:lI114|N
-3A0C7C:lI116|H3A0D28
-3A0D28:lI97|H3A0DD4
-3A0DD4:lI114|N
-3A0BDC:lH3A0C8C|H3A0C98
-3A0C8C:t2:H3A0D38,H3A0D40
-3A0D40:lI97|H3A0DEC
-3A0DEC:lI112|H3A0E90
-3A0E90:lI112|H3A0F44
-3A0F44:lI108|H3A1000
-3A1000:lI105|H3A10CC
-3A10CC:lI99|H3A1198
-3A1198:lI97|H3A1264
-3A1264:lI116|H3A1330
-3A1330:lI105|H3A1404
-3A1404:lI111|H3A14E0
-3A14E0:lI110|H3A15B4
-3A15B4:lI47|H3A1680
-3A1680:lI120|H3A174C
-3A174C:lI45|H3A1808
-3A1808:lI115|H3A18C4
-3A18C4:lI118|H3A1978
-3A1978:lI52|H3A1A2C
-3A1A2C:lI99|H3A1AE0
-3A1AE0:lI114|H3A1BA4
-3A1BA4:lI99|N
-3A0D38:lI115|H3A0DE4
-3A0DE4:lI118|H3A0E88
-3A0E88:lI52|H3A0F3C
-3A0F3C:lI99|H3A0FF8
-3A0FF8:lI114|H3A10C4
-3A10C4:lI99|N
-3A0C98:lH3A0D48|H3A0D54
-3A0D48:t2:H3A0DF4,H3A0DFC
-3A0DFC:lI97|H3A0EA0
-3A0EA0:lI112|H3A0F54
-3A0F54:lI112|H3A1010
-3A1010:lI108|H3A10DC
-3A10DC:lI105|H3A11A8
-3A11A8:lI99|H3A1274
-3A1274:lI97|H3A1338
-3A1338:lI116|H3A140C
-3A140C:lI105|H3A14E8
-3A14E8:lI111|H3A15BC
-3A15BC:lI110|H3A1688
-3A1688:lI47|H3A1754
-3A1754:lI120|H3A1810
-3A1810:lI45|H3A18CC
-3A18CC:lI115|H3A1980
-3A1980:lI118|H3A1A34
-3A1A34:lI52|H3A1AE8
-3A1AE8:lI99|H3A1BAC
-3A1BAC:lI112|H3A1C78
-3A1C78:lI105|H3A1D3C
-3A1D3C:lI111|N
-3A0DF4:lI115|H3A0E98
-3A0E98:lI118|H3A0F4C
-3A0F4C:lI52|H3A1008
-3A1008:lI99|H3A10D4
-3A10D4:lI112|H3A11A0
-3A11A0:lI105|H3A126C
-3A126C:lI111|N
-3A0D54:lH3A0E04|H3A0E10
-3A0E04:t2:H3A0EA8,H3A0EB0
-3A0EB0:lI97|H3A0F64
-3A0F64:lI112|H3A1020
-3A1020:lI112|H3A10E4
-3A10E4:lI108|H3A11B0
-3A11B0:lI105|H3A127C
-3A127C:lI99|H3A1340
-3A1340:lI97|H3A1414
-3A1414:lI116|H3A14F0
-3A14F0:lI105|H3A15C4
-3A15C4:lI111|H3A1690
-3A1690:lI110|H3A175C
-3A175C:lI47|H3A1818
-3A1818:lI120|H3A18D4
-3A18D4:lI45|H3A1988
-3A1988:lI115|H3A1A3C
-3A1A3C:lI116|H3A1AF0
-3A1AF0:lI117|H3A1BB4
-3A1BB4:lI102|H3A1C80
-3A1C80:lI102|H3A1D44
-3A1D44:lI105|H3A1E00
-3A1E00:lI116|N
-3A0EA8:lI115|H3A0F5C
-3A0F5C:lI105|H3A1018
-3A1018:lI116|N
-3A0E10:lH3A0EB8|H3A0EC4
-3A0EB8:t2:H3A0F6C,H3A0F74
-3A0F74:lI97|H3A1030
-3A1030:lI112|H3A10F4
-3A10F4:lI112|H3A11C0
-3A11C0:lI108|H3A1284
-3A1284:lI105|H3A1348
-3A1348:lI99|H3A141C
-3A141C:lI97|H3A14F8
-3A14F8:lI116|H3A15CC
-3A15CC:lI105|H3A1698
-3A1698:lI111|H3A1764
-3A1764:lI110|H3A1820
-3A1820:lI47|H3A18DC
-3A18DC:lI120|H3A1990
-3A1990:lI45|H3A1A44
-3A1A44:lI115|H3A1AF8
-3A1AF8:lI104|H3A1BBC
-3A1BBC:lI97|H3A1C88
-3A1C88:lI114|N
-3A0F6C:lI115|H3A1028
-3A1028:lI104|H3A10EC
-3A10EC:lI97|H3A11B8
-3A11B8:lI114|N
-3A0EC4:lH3A0F7C|H3A0F88
-3A0F7C:t2:H3A1038,H3A1040
-3A1040:lI97|H3A1104
-3A1104:lI112|H3A11C8
-3A11C8:lI112|H3A128C
-3A128C:lI108|H3A1350
-3A1350:lI105|H3A1424
-3A1424:lI99|H3A1500
-3A1500:lI97|H3A15D4
-3A15D4:lI116|H3A16A0
-3A16A0:lI105|H3A176C
-3A176C:lI111|H3A1828
-3A1828:lI110|H3A18E4
-3A18E4:lI47|H3A1998
-3A1998:lI120|H3A1A4C
-3A1A4C:lI45|H3A1B00
-3A1B00:lI115|H3A1BC4
-3A1BC4:lI104|N
-3A1038:lI115|H3A10FC
-3A10FC:lI104|N
-3A0F88:lH3A1048|H3A1054
-3A1048:t2:H3A110C,H3A1114
-3A1114:lI97|H3A11D8
-3A11D8:lI112|H3A1294
-3A1294:lI112|H3A1358
-3A1358:lI108|H3A142C
-3A142C:lI105|H3A1508
-3A1508:lI99|H3A15DC
-3A15DC:lI97|H3A16A8
-3A16A8:lI116|H3A1774
-3A1774:lI105|H3A1830
-3A1830:lI111|H3A18EC
-3A18EC:lI110|H3A19A0
-3A19A0:lI47|H3A1A54
-3A1A54:lI120|H3A1B08
-3A1B08:lI45|H3A1BCC
-3A1BCC:lI110|H3A1C90
-3A1C90:lI101|H3A1D4C
-3A1D4C:lI116|H3A1E08
-3A1E08:lI99|H3A1EC4
-3A1EC4:lI100|H3A1F88
-3A1F88:lI102|N
-3A110C:lI110|H3A11D0
-3A11D0:lI99|N
-3A1054:lH3A111C|H3A1128
-3A111C:t2:H3A11E0,H3A11E8
-3A11E8:lI97|H3A12A4
-3A12A4:lI112|H3A1368
-3A1368:lI112|H3A1434
-3A1434:lI108|H3A1510
-3A1510:lI105|H3A15E4
-3A15E4:lI99|H3A16B0
-3A16B0:lI97|H3A177C
-3A177C:lI116|H3A1838
-3A1838:lI105|H3A18F4
-3A18F4:lI111|H3A19A8
-3A19A8:lI110|H3A1A5C
-3A1A5C:lI47|H3A1B10
-3A1B10:lI120|H3A1BD4
-3A1BD4:lI45|H3A1C98
-3A1C98:lI110|H3A1D54
-3A1D54:lI101|H3A1E10
-3A1E10:lI116|H3A1ECC
-3A1ECC:lI99|H3A1F90
-3A1F90:lI100|H3A2044
-3A2044:lI102|N
-3A11E0:lI99|H3A129C
-3A129C:lI100|H3A1360
-3A1360:lI102|N
-3A1128:lH3A11F0|H3A11FC
-3A11F0:t2:H3A12AC,H3A12B4
-3A12B4:lI97|H3A1378
-3A1378:lI112|H3A1444
-3A1444:lI112|H3A1518
-3A1518:lI108|H3A15EC
-3A15EC:lI105|H3A16B8
-3A16B8:lI99|H3A1784
-3A1784:lI97|H3A1840
-3A1840:lI116|H3A18FC
-3A18FC:lI105|H3A19B0
-3A19B0:lI111|H3A1A64
-3A1A64:lI110|H3A1B18
-3A1B18:lI47|H3A1BDC
-3A1BDC:lI120|H3A1CA0
-3A1CA0:lI45|H3A1D5C
-3A1D5C:lI109|H3A1E18
-3A1E18:lI105|H3A1ED4
-3A1ED4:lI102|N
-3A12AC:lI109|H3A1370
-3A1370:lI105|H3A143C
-3A143C:lI102|N
-3A11FC:lH3A12BC|H3A12C8
-3A12BC:t2:H3A1380,H3A1388
-3A1388:lI97|H3A1454
-3A1454:lI112|H3A1528
-3A1528:lI112|H3A15FC
-3A15FC:lI108|H3A16C8
-3A16C8:lI105|H3A178C
-3A178C:lI99|H3A1848
-3A1848:lI97|H3A1904
-3A1904:lI116|H3A19B8
-3A19B8:lI105|H3A1A6C
-3A1A6C:lI111|H3A1B20
-3A1B20:lI110|H3A1BE4
-3A1BE4:lI47|H3A1CA8
-3A1CA8:lI120|H3A1D64
-3A1D64:lI45|H3A1E20
-3A1E20:lI108|H3A1EDC
-3A1EDC:lI97|H3A1F98
-3A1F98:lI116|H3A204C
-3A204C:lI101|H3A2108
-3A2108:lI120|N
-3A1380:lI108|H3A144C
-3A144C:lI97|H3A1520
-3A1520:lI116|H3A15F4
-3A15F4:lI101|H3A16C0
-3A16C0:lI120|N
-3A12C8:lH3A1390|H3A139C
-3A1390:t2:H3A145C,H3A1464
-3A1464:lI97|H3A1538
-3A1538:lI112|H3A160C
-3A160C:lI112|H3A16D0
-3A16D0:lI108|H3A1794
-3A1794:lI105|H3A1850
-3A1850:lI99|H3A190C
-3A190C:lI97|H3A19C0
-3A19C0:lI116|H3A1A74
-3A1A74:lI105|H3A1B28
-3A1B28:lI111|H3A1BEC
-3A1BEC:lI110|H3A1CB0
-3A1CB0:lI47|H3A1D6C
-3A1D6C:lI120|H3A1E28
-3A1E28:lI45|H3A1EE4
-3A1EE4:lI107|H3A1FA0
-3A1FA0:lI111|H3A2054
-3A2054:lI97|H3A2110
-3A2110:lI110|N
-3A145C:lI115|H3A1530
-3A1530:lI107|H3A1604
-3A1604:lI112|N
-3A139C:lH3A146C|H3A1478
-3A146C:t2:H3A1540,H3A1548
-3A1548:lI97|H3A161C
-3A161C:lI112|H3A16E0
-3A16E0:lI112|H3A179C
-3A179C:lI108|H3A1858
-3A1858:lI105|H3A1914
-3A1914:lI99|H3A19C8
-3A19C8:lI97|H3A1A7C
-3A1A7C:lI116|H3A1B30
-3A1B30:lI105|H3A1BF4
-3A1BF4:lI111|H3A1CB8
-3A1CB8:lI110|H3A1D74
-3A1D74:lI47|H3A1E30
-3A1E30:lI120|H3A1EEC
-3A1EEC:lI45|H3A1FA8
-3A1FA8:lI107|H3A205C
-3A205C:lI111|H3A2118
-3A2118:lI97|H3A21CC
-3A21CC:lI110|N
-3A1540:lI115|H3A1614
-3A1614:lI107|H3A16D8
-3A16D8:lI100|N
-3A1478:lH3A1550|H3A155C
-3A1550:t2:H3A1624,H3A162C
-3A162C:lI97|H3A16F0
-3A16F0:lI112|H3A17AC
-3A17AC:lI112|H3A1860
-3A1860:lI108|H3A191C
-3A191C:lI105|H3A19D0
-3A19D0:lI99|H3A1A84
-3A1A84:lI97|H3A1B38
-3A1B38:lI116|H3A1BFC
-3A1BFC:lI105|H3A1CC0
-3A1CC0:lI111|H3A1D7C
-3A1D7C:lI110|H3A1E38
-3A1E38:lI47|H3A1EF4
-3A1EF4:lI120|H3A1FB0
-3A1FB0:lI45|H3A2064
-3A2064:lI107|H3A2120
-3A2120:lI111|H3A21D4
-3A21D4:lI97|H3A2288
-3A2288:lI110|N
-3A1624:lI115|H3A16E8
-3A16E8:lI107|H3A17A4
-3A17A4:lI116|N
-3A155C:lH3A1634|H3A1640
-3A1634:t2:H3A16F8,H3A1700
-3A1700:lI97|H3A17BC
-3A17BC:lI112|H3A1870
-3A1870:lI112|H3A1924
-3A1924:lI108|H3A19D8
-3A19D8:lI105|H3A1A8C
-3A1A8C:lI99|H3A1B40
-3A1B40:lI97|H3A1C04
-3A1C04:lI116|H3A1CC8
-3A1CC8:lI105|H3A1D84
-3A1D84:lI111|H3A1E40
-3A1E40:lI110|H3A1EFC
-3A1EFC:lI47|H3A1FB8
-3A1FB8:lI120|H3A206C
-3A206C:lI45|H3A2128
-3A2128:lI107|H3A21DC
-3A21DC:lI111|H3A2290
-3A2290:lI97|H3A234C
-3A234C:lI110|N
-3A16F8:lI115|H3A17B4
-3A17B4:lI107|H3A1868
-3A1868:lI109|N
-3A1640:lH3A1708|H3A1714
-3A1708:t2:H3A17C4,H3A17CC
-3A17CC:lI97|H3A1880
-3A1880:lI112|H3A1934
-3A1934:lI112|H3A19E0
-3A19E0:lI108|H3A1A94
-3A1A94:lI105|H3A1B48
-3A1B48:lI99|H3A1C0C
-3A1C0C:lI97|H3A1CD0
-3A1CD0:lI116|H3A1D8C
-3A1D8C:lI105|H3A1E48
-3A1E48:lI111|H3A1F04
-3A1F04:lI110|H3A1FC0
-3A1FC0:lI47|H3A2074
-3A2074:lI120|H3A2130
-3A2130:lI45|H3A21E4
-3A21E4:lI104|H3A2298
-3A2298:lI116|H3A2354
-3A2354:lI116|H3A2410
-3A2410:lI112|H3A24C4
-3A24C4:lI100|H3A2580
-3A2580:lI45|H3A263C
-3A263C:lI99|H3A2700
-3A2700:lI103|H3A27BC
-3A27BC:lI105|N
-3A17C4:lI99|H3A1878
-3A1878:lI103|H3A192C
-3A192C:lI105|N
-3A1714:lH3A17D4|H3A17E0
-3A17D4:t2:H3A1888,H3A1890
-3A1890:lI97|H3A1944
-3A1944:lI112|H3A19F0
-3A19F0:lI112|H3A1A9C
-3A1A9C:lI108|H3A1B50
-3A1B50:lI105|H3A1C14
-3A1C14:lI99|H3A1CD8
-3A1CD8:lI97|H3A1D94
-3A1D94:lI116|H3A1E50
-3A1E50:lI105|H3A1F0C
-3A1F0C:lI111|H3A1FC8
-3A1FC8:lI110|H3A207C
-3A207C:lI47|H3A2138
-3A2138:lI120|H3A21EC
-3A21EC:lI45|H3A22A0
-3A22A0:lI104|H3A235C
-3A235C:lI100|H3A2418
-3A2418:lI102|N
-3A1888:lI104|H3A193C
-3A193C:lI100|H3A19E8
-3A19E8:lI102|N
-3A17E0:lH3A1898|H3A18A4
-3A1898:t2:H3A194C,H3A1954
-3A1954:lI97|H3A1A00
-3A1A00:lI112|H3A1AA4
-3A1AA4:lI112|H3A1B58
-3A1B58:lI108|H3A1C1C
-3A1C1C:lI105|H3A1CE0
-3A1CE0:lI99|H3A1D9C
-3A1D9C:lI97|H3A1E58
-3A1E58:lI116|H3A1F14
-3A1F14:lI105|H3A1FD0
-3A1FD0:lI111|H3A2084
-3A2084:lI110|H3A2140
-3A2140:lI47|H3A21F4
-3A21F4:lI120|H3A22A8
-3A22A8:lI45|H3A2364
-3A2364:lI103|H3A2420
-3A2420:lI122|H3A24CC
-3A24CC:lI105|H3A2588
-3A2588:lI112|N
-3A194C:lI103|H3A19F8
-3A19F8:lI122|N
-3A18A4:lH3A195C|H3A1968
-3A195C:t2:H3A1A08,H3A1A10
-3A1A10:lI97|H3A1AB4
-3A1AB4:lI112|H3A1B68
-3A1B68:lI112|H3A1C2C
-3A1C2C:lI108|H3A1CE8
-3A1CE8:lI105|H3A1DA4
-3A1DA4:lI99|H3A1E60
-3A1E60:lI97|H3A1F1C
-3A1F1C:lI116|H3A1FD8
-3A1FD8:lI105|H3A208C
-3A208C:lI111|H3A2148
-3A2148:lI110|H3A21FC
-3A21FC:lI47|H3A22B0
-3A22B0:lI120|H3A236C
-3A236C:lI45|H3A2428
-3A2428:lI103|H3A24D4
-3A24D4:lI116|H3A2590
-3A2590:lI97|H3A2644
-3A2644:lI114|N
-3A1A08:lI103|H3A1AAC
-3A1AAC:lI116|H3A1B60
-3A1B60:lI97|H3A1C24
-3A1C24:lI114|N
-3A1968:lH3A1A18|H3A1A24
-3A1A18:t2:H3A1ABC,H3A1AC4
-3A1AC4:lI97|H3A1B78
-3A1B78:lI112|H3A1C3C
-3A1C3C:lI112|H3A1CF0
-3A1CF0:lI108|H3A1DAC
-3A1DAC:lI105|H3A1E68
-3A1E68:lI99|H3A1F24
-3A1F24:lI97|H3A1FE0
-3A1FE0:lI116|H3A2094
-3A2094:lI105|H3A2150
-3A2150:lI111|H3A2204
-3A2204:lI110|H3A22B8
-3A22B8:lI47|H3A2374
-3A2374:lI120|H3A2430
-3A2430:lI45|H3A24DC
-3A24DC:lI100|H3A2598
-3A2598:lI118|H3A264C
-3A264C:lI105|N
-3A1ABC:lI100|H3A1B70
-3A1B70:lI118|H3A1C34
-3A1C34:lI105|N
-3A1A24:lH3A1ACC|H3A1AD8
-3A1ACC:t2:H3A1B80,H3A1B88
-3A1B88:lI97|H3A1C4C
-3A1C4C:lI112|H3A1D00
-3A1D00:lI112|H3A1DB4
-3A1DB4:lI108|H3A1E70
-3A1E70:lI105|H3A1F2C
-3A1F2C:lI99|H3A1FE8
-3A1FE8:lI97|H3A209C
-3A209C:lI116|H3A2158
-3A2158:lI105|H3A220C
-3A220C:lI111|H3A22C0
-3A22C0:lI110|H3A237C
-3A237C:lI47|H3A2438
-3A2438:lI120|H3A24E4
-3A24E4:lI45|H3A25A0
-3A25A0:lI100|H3A2654
-3A2654:lI105|H3A2708
-3A2708:lI114|H3A27C4
-3A27C4:lI101|H3A2880
-3A2880:lI99|H3A2944
-3A2944:lI116|H3A2A10
-3A2A10:lI111|H3A2ADC
-3A2ADC:lI114|N
-3A1B80:lI100|H3A1C44
-3A1C44:lI99|H3A1CF8
-3A1CF8:lI114|N
-3A1AD8:lH3A1B90|H3A1B9C
-3A1B90:t2:H3A1C54,H3A1C5C
-3A1C5C:lI97|H3A1D10
-3A1D10:lI112|H3A1DC4
-3A1DC4:lI112|H3A1E78
-3A1E78:lI108|H3A1F34
-3A1F34:lI105|H3A1FF0
-3A1FF0:lI99|H3A20A4
-3A20A4:lI97|H3A2160
-3A2160:lI116|H3A2214
-3A2214:lI105|H3A22C8
-3A22C8:lI111|H3A2384
-3A2384:lI110|H3A2440
-3A2440:lI47|H3A24EC
-3A24EC:lI120|H3A25A8
-3A25A8:lI45|H3A265C
-3A265C:lI100|H3A2710
-3A2710:lI105|H3A27CC
-3A27CC:lI114|H3A2888
-3A2888:lI101|H3A294C
-3A294C:lI99|H3A2A18
-3A2A18:lI116|H3A2AE4
-3A2AE4:lI111|H3A2BB0
-3A2BB0:lI114|N
-3A1C54:lI100|H3A1D08
-3A1D08:lI105|H3A1DBC
-3A1DBC:lI114|N
-3A1B9C:lH3A1C64|H3A1C70
-3A1C64:t2:H3A1D18,H3A1D20
-3A1D20:lI97|H3A1DD4
-3A1DD4:lI112|H3A1E88
-3A1E88:lI112|H3A1F3C
-3A1F3C:lI108|H3A1FF8
-3A1FF8:lI105|H3A20AC
-3A20AC:lI99|H3A2168
-3A2168:lI97|H3A221C
-3A221C:lI116|H3A22D0
-3A22D0:lI105|H3A238C
-3A238C:lI111|H3A2448
-3A2448:lI110|H3A24F4
-3A24F4:lI47|H3A25B0
-3A25B0:lI120|H3A2664
-3A2664:lI45|H3A2718
-3A2718:lI100|H3A27D4
-3A27D4:lI105|H3A2890
-3A2890:lI114|H3A2954
-3A2954:lI101|H3A2A20
-3A2A20:lI99|H3A2AEC
-3A2AEC:lI116|H3A2BB8
-3A2BB8:lI111|H3A2C74
-3A2C74:lI114|N
-3A1D18:lI100|H3A1DCC
-3A1DCC:lI120|H3A1E80
-3A1E80:lI114|N
-3A1C70:lH3A1D28|H3A1D34
-3A1D28:t2:H3A1DDC,H3A1DE4
-3A1DE4:lI97|H3A1E98
-3A1E98:lI112|H3A1F4C
-3A1F4C:lI112|H3A2000
-3A2000:lI108|H3A20B4
-3A20B4:lI105|H3A2170
-3A2170:lI99|H3A2224
-3A2224:lI97|H3A22D8
-3A22D8:lI116|H3A2394
-3A2394:lI105|H3A2450
-3A2450:lI111|H3A24FC
-3A24FC:lI110|H3A25B8
-3A25B8:lI47|H3A266C
-3A266C:lI120|H3A2720
-3A2720:lI45|H3A27DC
-3A27DC:lI99|H3A2898
-3A2898:lI115|H3A295C
-3A295C:lI104|N
-3A1DDC:lI99|H3A1E90
-3A1E90:lI115|H3A1F44
-3A1F44:lI104|N
-3A1D34:lH3A1DEC|H3A1DF8
-3A1DEC:t2:H3A1EA0,H3A1EA8
-3A1EA8:lI97|H3A1F5C
-3A1F5C:lI112|H3A2010
-3A2010:lI112|H3A20C4
-3A20C4:lI108|H3A2178
-3A2178:lI105|H3A222C
-3A222C:lI99|H3A22E0
-3A22E0:lI97|H3A239C
-3A239C:lI116|H3A2458
-3A2458:lI105|H3A2504
-3A2504:lI111|H3A25C0
-3A25C0:lI110|H3A2674
-3A2674:lI47|H3A2728
-3A2728:lI120|H3A27E4
-3A27E4:lI45|H3A28A0
-3A28A0:lI99|H3A2964
-3A2964:lI112|H3A2A28
-3A2A28:lI105|H3A2AF4
-3A2AF4:lI111|N
-3A1EA0:lI99|H3A1F54
-3A1F54:lI112|H3A2008
-3A2008:lI105|H3A20BC
-3A20BC:lI111|N
-3A1DF8:lH3A1EB0|H3A1EBC
-3A1EB0:t2:H3A1F64,H3A1F6C
-3A1F6C:lI97|H3A2018
-3A2018:lI112|H3A20CC
-3A20CC:lI112|H3A2180
-3A2180:lI108|H3A2234
-3A2234:lI105|H3A22E8
-3A22E8:lI99|H3A23A4
-3A23A4:lI97|H3A2460
-3A2460:lI116|H3A250C
-3A250C:lI105|H3A25C8
-3A25C8:lI111|H3A267C
-3A267C:lI110|H3A2730
-3A2730:lI47|H3A27EC
-3A27EC:lI120|H3A28A8
-3A28A8:lI45|H3A296C
-3A296C:lI99|H3A2A30
-3A2A30:lI111|H3A2AFC
-3A2AFC:lI109|H3A2BC0
-3A2BC0:lI112|H3A2C7C
-3A2C7C:lI114|H3A2D2C
-3A2D2C:lI101|H3A2DD4
-3A2DD4:lI115|H3A2E6C
-3A2E6C:lI115|N
-3A1F64:lI90|N
-3A1EBC:lH3A1F74|H3A1F80
-3A1F74:t2:H3A2020,H3A2028
-3A2028:lI97|H3A20DC
-3A20DC:lI112|H3A2190
-3A2190:lI112|H3A223C
-3A223C:lI108|H3A22F0
-3A22F0:lI105|H3A23AC
-3A23AC:lI99|H3A2468
-3A2468:lI97|H3A2514
-3A2514:lI116|H3A25D0
-3A25D0:lI105|H3A2684
-3A2684:lI111|H3A2738
-3A2738:lI110|H3A27F4
-3A27F4:lI47|H3A28B0
-3A28B0:lI120|H3A2974
-3A2974:lI45|H3A2A38
-3A2A38:lI99|H3A2B04
-3A2B04:lI100|H3A2BC8
-3A2BC8:lI108|H3A2C84
-3A2C84:lI105|H3A2D34
-3A2D34:lI110|H3A2DDC
-3A2DDC:lI107|N
-3A2020:lI118|H3A20D4
-3A20D4:lI99|H3A2188
-3A2188:lI100|N
-3A1F80:lH3A2030|H3A203C
-3A2030:t2:H3A20E4,H3A20EC
-3A20EC:lI97|H3A21A0
-3A21A0:lI112|H3A224C
-3A224C:lI112|H3A2300
-3A2300:lI108|H3A23BC
-3A23BC:lI105|H3A2470
-3A2470:lI99|H3A251C
-3A251C:lI97|H3A25D8
-3A25D8:lI116|H3A268C
-3A268C:lI105|H3A2740
-3A2740:lI111|H3A27FC
-3A27FC:lI110|H3A28B8
-3A28B8:lI47|H3A297C
-3A297C:lI120|H3A2A40
-3A2A40:lI45|H3A2B0C
-3A2B0C:lI98|H3A2BD0
-3A2BD0:lI99|H3A2C8C
-3A2C8C:lI112|H3A2D3C
-3A2D3C:lI105|H3A2DE4
-3A2DE4:lI111|N
-3A20E4:lI98|H3A2198
-3A2198:lI99|H3A2244
-3A2244:lI112|H3A22F8
-3A22F8:lI105|H3A23B4
-3A23B4:lI111|N
-3A203C:lH3A20F4|H3A2100
-3A20F4:t2:H3A21A8,H3A21B0
-3A21B0:lI97|H3A225C
-3A225C:lI112|H3A2310
-3A2310:lI112|H3A23C4
-3A23C4:lI108|H3A2478
-3A2478:lI105|H3A2524
-3A2524:lI99|H3A25E0
-3A25E0:lI97|H3A2694
-3A2694:lI116|H3A2748
-3A2748:lI105|H3A2804
-3A2804:lI111|H3A28C0
-3A28C0:lI110|H3A2984
-3A2984:lI47|H3A2A48
-3A2A48:lI114|H3A2B14
-3A2B14:lI116|H3A2BD8
-3A2BD8:lI102|N
-3A21A8:lI114|H3A2254
-3A2254:lI116|H3A2308
-3A2308:lI102|N
-3A2100:lH3A21B8|H3A21C4
-3A21B8:t2:H3A2264,H3A226C
-3A226C:lI97|H3A2320
-3A2320:lI112|H3A23D4
-3A23D4:lI112|H3A2480
-3A2480:lI108|H3A252C
-3A252C:lI105|H3A25E8
-3A25E8:lI99|H3A269C
-3A269C:lI97|H3A2750
-3A2750:lI116|H3A280C
-3A280C:lI105|H3A28C8
-3A28C8:lI111|H3A298C
-3A298C:lI110|H3A2A50
-3A2A50:lI47|H3A2B1C
-3A2B1C:lI112|H3A2BE0
-3A2BE0:lI111|H3A2C94
-3A2C94:lI119|H3A2D44
-3A2D44:lI101|H3A2DEC
-3A2DEC:lI114|H3A2E74
-3A2E74:lI112|H3A2EEC
-3A2EEC:lI111|H3A2F64
-3A2F64:lI105|H3A2FD4
-3A2FD4:lI110|H3A303C
-3A303C:lI116|N
-3A2264:lI112|H3A2318
-3A2318:lI112|H3A23CC
-3A23CC:lI116|N
-3A21C4:lH3A2274|H3A2280
-3A2274:t2:H3A2328,H3A2330
-3A2330:lI97|H3A23E4
-3A23E4:lI112|H3A2488
-3A2488:lI112|H3A2534
-3A2534:lI108|H3A25F0
-3A25F0:lI105|H3A26A4
-3A26A4:lI99|H3A2758
-3A2758:lI97|H3A2814
-3A2814:lI116|H3A28D0
-3A28D0:lI105|H3A2994
-3A2994:lI111|H3A2A58
-3A2A58:lI110|H3A2B24
-3A2B24:lI47|H3A2BE8
-3A2BE8:lI112|H3A2C9C
-3A2C9C:lI111|H3A2D4C
-3A2D4C:lI115|H3A2DF4
-3A2DF4:lI116|H3A2E7C
-3A2E7C:lI115|H3A2EF4
-3A2EF4:lI99|H3A2F6C
-3A2F6C:lI114|H3A2FDC
-3A2FDC:lI105|H3A3044
-3A3044:lI112|H3A30A4
-3A30A4:lI116|N
-3A2328:lI97|H3A23DC
-3A23DC:lI105|N
-3A2280:lH3A2338|H3A2344
-3A2338:t2:H3A23EC,H3A23F4
-3A23F4:lI97|H3A2498
-3A2498:lI112|H3A2544
-3A2544:lI112|H3A25F8
-3A25F8:lI108|H3A26AC
-3A26AC:lI105|H3A2760
-3A2760:lI99|H3A281C
-3A281C:lI97|H3A28D8
-3A28D8:lI116|H3A299C
-3A299C:lI105|H3A2A60
-3A2A60:lI111|H3A2B2C
-3A2B2C:lI110|H3A2BF0
-3A2BF0:lI47|H3A2CA4
-3A2CA4:lI112|H3A2D54
-3A2D54:lI111|H3A2DFC
-3A2DFC:lI115|H3A2E84
-3A2E84:lI116|H3A2EFC
-3A2EFC:lI115|H3A2F74
-3A2F74:lI99|H3A2FE4
-3A2FE4:lI114|H3A304C
-3A304C:lI105|H3A30AC
-3A30AC:lI112|H3A3104
-3A3104:lI116|N
-3A23EC:lI101|H3A2490
-3A2490:lI112|H3A253C
-3A253C:lI115|N
-3A2344:lH3A23FC|H3A2408
-3A23FC:t2:H3A24A0,H3A24A8
-3A24A8:lI97|H3A2554
-3A2554:lI112|H3A2600
-3A2600:lI112|H3A26B4
-3A26B4:lI108|H3A2768
-3A2768:lI105|H3A2824
-3A2824:lI99|H3A28E0
-3A28E0:lI97|H3A29A4
-3A29A4:lI116|H3A2A68
-3A2A68:lI105|H3A2B34
-3A2B34:lI111|H3A2BF8
-3A2BF8:lI110|H3A2CAC
-3A2CAC:lI47|H3A2D5C
-3A2D5C:lI112|H3A2E04
-3A2E04:lI111|H3A2E8C
-3A2E8C:lI115|H3A2F04
-3A2F04:lI116|H3A2F7C
-3A2F7C:lI115|H3A2FEC
-3A2FEC:lI99|H3A3054
-3A3054:lI114|H3A30B4
-3A30B4:lI105|H3A310C
-3A310C:lI112|H3A315C
-3A315C:lI116|N
-3A24A0:lI112|H3A254C
-3A254C:lI115|N
-3A2408:lH3A24B0|H3A24BC
-3A24B0:t2:H3A255C,H3A2564
-3A2564:lI97|H3A2610
-3A2610:lI112|H3A26C4
-3A26C4:lI112|H3A2770
-3A2770:lI108|H3A282C
-3A282C:lI105|H3A28E8
-3A28E8:lI99|H3A29AC
-3A29AC:lI97|H3A2A70
-3A2A70:lI116|H3A2B3C
-3A2B3C:lI105|H3A2C00
-3A2C00:lI111|H3A2CB4
-3A2CB4:lI110|H3A2D64
-3A2D64:lI47|H3A2E0C
-3A2E0C:lI112|H3A2E94
-3A2E94:lI100|H3A2F0C
-3A2F0C:lI102|N
-3A255C:lI112|H3A2608
-3A2608:lI100|H3A26BC
-3A26BC:lI102|N
-3A24BC:lH3A256C|H3A2578
-3A256C:t2:H3A2618,H3A2620
-3A2620:lI97|H3A26D4
-3A26D4:lI112|H3A2780
-3A2780:lI112|H3A2834
-3A2834:lI108|H3A28F0
-3A28F0:lI105|H3A29B4
-3A29B4:lI99|H3A2A78
-3A2A78:lI97|H3A2B44
-3A2B44:lI116|H3A2C08
-3A2C08:lI105|H3A2CBC
-3A2CBC:lI111|H3A2D6C
-3A2D6C:lI110|H3A2E14
-3A2E14:lI47|H3A2E9C
-3A2E9C:lI111|H3A2F14
-3A2F14:lI100|H3A2F84
-3A2F84:lI97|N
-3A2618:lI111|H3A26CC
-3A26CC:lI100|H3A2778
-3A2778:lI97|N
-3A2578:lH3A2628|H3A2634
-3A2628:t2:H3A26DC,H3A26E4
-3A26E4:lI97|H3A2790
-3A2790:lI112|H3A2844
-3A2844:lI112|H3A28F8
-3A28F8:lI108|H3A29BC
-3A29BC:lI105|H3A2A80
-3A2A80:lI99|H3A2B4C
-3A2B4C:lI97|H3A2C10
-3A2C10:lI116|H3A2CC4
-3A2CC4:lI105|H3A2D74
-3A2D74:lI111|H3A2E1C
-3A2E1C:lI110|H3A2EA4
-3A2EA4:lI47|H3A2F1C
-3A2F1C:lI111|H3A2F8C
-3A2F8C:lI99|H3A2FF4
-3A2FF4:lI116|H3A305C
-3A305C:lI101|H3A30BC
-3A30BC:lI116|H3A3114
-3A3114:lI45|H3A3164
-3A3164:lI115|H3A31AC
-3A31AC:lI116|H3A31F4
-3A31F4:lI114|H3A323C
-3A323C:lI101|H3A3284
-3A3284:lI97|H3A32CC
-3A32CC:lI109|N
-3A26DC:lI98|H3A2788
-3A2788:lI105|H3A283C
-3A283C:lI110|N
-3A2634:lH3A26EC|H3A26F8
-3A26EC:t2:H3A2798,H3A27A0
-3A27A0:lI97|H3A2854
-3A2854:lI112|H3A2908
-3A2908:lI112|H3A29C4
-3A29C4:lI108|H3A2A88
-3A2A88:lI105|H3A2B54
-3A2B54:lI99|H3A2C18
-3A2C18:lI97|H3A2CCC
-3A2CCC:lI116|H3A2D7C
-3A2D7C:lI105|H3A2E24
-3A2E24:lI111|H3A2EAC
-3A2EAC:lI110|H3A2F24
-3A2F24:lI47|H3A2F94
-3A2F94:lI111|H3A2FFC
-3A2FFC:lI99|H3A3064
-3A3064:lI116|H3A30C4
-3A30C4:lI101|H3A311C
-3A311C:lI116|H3A316C
-3A316C:lI45|H3A31B4
-3A31B4:lI115|H3A31FC
-3A31FC:lI116|H3A3244
-3A3244:lI114|H3A328C
-3A328C:lI101|H3A32D4
-3A32D4:lI97|H3A3314
-3A3314:lI109|N
-3A2798:lI100|H3A284C
-3A284C:lI109|H3A2900
-3A2900:lI115|N
-3A26F8:lH3A27A8|H3A27B4
-3A27A8:t2:H3A285C,H3A2864
-3A2864:lI97|H3A2918
-3A2918:lI112|H3A29D4
-3A29D4:lI112|H3A2A90
-3A2A90:lI108|H3A2B5C
-3A2B5C:lI105|H3A2C20
-3A2C20:lI99|H3A2CD4
-3A2CD4:lI97|H3A2D84
-3A2D84:lI116|H3A2E2C
-3A2E2C:lI105|H3A2EB4
-3A2EB4:lI111|H3A2F2C
-3A2F2C:lI110|H3A2F9C
-3A2F9C:lI47|H3A3004
-3A3004:lI111|H3A306C
-3A306C:lI99|H3A30CC
-3A30CC:lI116|H3A3124
-3A3124:lI101|H3A3174
-3A3174:lI116|H3A31BC
-3A31BC:lI45|H3A3204
-3A3204:lI115|H3A324C
-3A324C:lI116|H3A3294
-3A3294:lI114|H3A32DC
-3A32DC:lI101|H3A331C
-3A331C:lI97|H3A334C
-3A334C:lI109|N
-3A285C:lI108|H3A2910
-3A2910:lI104|H3A29CC
-3A29CC:lI97|N
-3A27B4:lH3A286C|H3A2878
-3A286C:t2:H3A2920,H3A2928
-3A2928:lI97|H3A29E4
-3A29E4:lI112|H3A2AA0
-3A2AA0:lI112|H3A2B64
-3A2B64:lI108|H3A2C28
-3A2C28:lI105|H3A2CDC
-3A2CDC:lI99|H3A2D8C
-3A2D8C:lI97|H3A2E34
-3A2E34:lI116|H3A2EBC
-3A2EBC:lI105|H3A2F34
-3A2F34:lI111|H3A2FA4
-3A2FA4:lI110|H3A300C
-3A300C:lI47|H3A3074
-3A3074:lI111|H3A30D4
-3A30D4:lI99|H3A312C
-3A312C:lI116|H3A317C
-3A317C:lI101|H3A31C4
-3A31C4:lI116|H3A320C
-3A320C:lI45|H3A3254
-3A3254:lI115|H3A329C
-3A329C:lI116|H3A32E4
-3A32E4:lI114|H3A3324
-3A3324:lI101|H3A3354
-3A3354:lI97|H3A337C
-3A337C:lI109|N
-3A2920:lI108|H3A29DC
-3A29DC:lI122|H3A2A98
-3A2A98:lI104|N
-3A2878:lH3A2930|H3A293C
-3A2930:t2:H3A29EC,H3A29F4
-3A29F4:lI97|H3A2AB0
-3A2AB0:lI112|H3A2B74
-3A2B74:lI112|H3A2C30
-3A2C30:lI108|H3A2CE4
-3A2CE4:lI105|H3A2D94
-3A2D94:lI99|H3A2E3C
-3A2E3C:lI97|H3A2EC4
-3A2EC4:lI116|H3A2F3C
-3A2F3C:lI105|H3A2FAC
-3A2FAC:lI111|H3A3014
-3A3014:lI110|H3A307C
-3A307C:lI47|H3A30DC
-3A30DC:lI111|H3A3134
-3A3134:lI99|H3A3184
-3A3184:lI116|H3A31CC
-3A31CC:lI101|H3A3214
-3A3214:lI116|H3A325C
-3A325C:lI45|H3A32A4
-3A32A4:lI115|H3A32EC
-3A32EC:lI116|H3A332C
-3A332C:lI114|H3A335C
-3A335C:lI101|H3A3384
-3A3384:lI97|H3A33A4
-3A33A4:lI109|N
-3A29EC:lI101|H3A2AA8
-3A2AA8:lI120|H3A2B6C
-3A2B6C:lI101|N
-3A293C:lH3A29FC|H3A2A08
-3A29FC:t2:H3A2AB8,H3A2AC0
-3A2AC0:lI97|H3A2B84
-3A2B84:lI112|H3A2C40
-3A2C40:lI112|H3A2CF4
-3A2CF4:lI108|H3A2DA4
-3A2DA4:lI105|H3A2E44
-3A2E44:lI99|H3A2ECC
-3A2ECC:lI97|H3A2F44
-3A2F44:lI116|H3A2FB4
-3A2FB4:lI105|H3A301C
-3A301C:lI111|H3A3084
-3A3084:lI110|H3A30E4
-3A30E4:lI47|H3A313C
-3A313C:lI111|H3A318C
-3A318C:lI99|H3A31D4
-3A31D4:lI116|H3A321C
-3A321C:lI101|H3A3264
-3A3264:lI116|H3A32AC
-3A32AC:lI45|H3A32F4
-3A32F4:lI115|H3A3334
-3A3334:lI116|H3A3364
-3A3364:lI114|H3A338C
-3A338C:lI101|H3A33AC
-3A33AC:lI97|H3A33C4
-3A33C4:lI109|N
-3A2AB8:lI99|H3A2B7C
-3A2B7C:lI108|H3A2C38
-3A2C38:lI97|H3A2CEC
-3A2CEC:lI115|H3A2D9C
-3A2D9C:lI115|N
-3A2A08:lH3A2AC8|H3A2AD4
-3A2AC8:t2:H3A2B8C,H3A2B94
-3A2B94:lI97|H3A2C50
-3A2C50:lI112|H3A2D04
-3A2D04:lI112|H3A2DAC
-3A2DAC:lI108|H3A2E4C
-3A2E4C:lI105|H3A2ED4
-3A2ED4:lI99|H3A2F4C
-3A2F4C:lI97|H3A2FBC
-3A2FBC:lI116|H3A3024
-3A3024:lI105|H3A308C
-3A308C:lI111|H3A30EC
-3A30EC:lI110|H3A3144
-3A3144:lI47|H3A3194
-3A3194:lI109|H3A31DC
-3A31DC:lI115|H3A3224
-3A3224:lI119|H3A326C
-3A326C:lI111|H3A32B4
-3A32B4:lI114|H3A32FC
-3A32FC:lI100|N
-3A2B8C:lI100|H3A2C48
-3A2C48:lI111|H3A2CFC
-3A2CFC:lI99|N
-3A2AD4:lH3A2B9C|H3A2BA8
-3A2B9C:t2:H3A2C58,H3A2C60
-3A2C60:lI97|H3A2D14
-3A2D14:lI112|H3A2DBC
-3A2DBC:lI112|H3A2E54
-3A2E54:lI108|H3A2EDC
-3A2EDC:lI105|H3A2F54
-3A2F54:lI99|H3A2FC4
-3A2FC4:lI97|H3A302C
-3A302C:lI116|H3A3094
-3A3094:lI105|H3A30F4
-3A30F4:lI111|H3A314C
-3A314C:lI110|H3A319C
-3A319C:lI47|H3A31E4
-3A31E4:lI109|H3A322C
-3A322C:lI97|H3A3274
-3A3274:lI99|H3A32BC
-3A32BC:lI45|H3A3304
-3A3304:lI99|H3A333C
-3A333C:lI111|H3A336C
-3A336C:lI109|H3A3394
-3A3394:lI112|H3A33B4
-3A33B4:lI97|H3A33CC
-3A33CC:lI99|H3A33DC
-3A33DC:lI116|H3A33EC
-3A33EC:lI112|H3A33FC
-3A33FC:lI114|H3A340C
-3A340C:lI111|N
-3A2C58:lI99|H3A2D0C
-3A2D0C:lI112|H3A2DB4
-3A2DB4:lI116|N
-3A2BA8:lH3A2C68|N
-3A2C68:t2:H3A2D1C,H3A2D24
-3A2D24:lI97|H3A2DCC
-3A2DCC:lI112|H3A2E64
-3A2E64:lI112|H3A2EE4
-3A2EE4:lI108|H3A2F5C
-3A2F5C:lI105|H3A2FCC
-3A2FCC:lI99|H3A3034
-3A3034:lI97|H3A309C
-3A309C:lI116|H3A30FC
-3A30FC:lI105|H3A3154
-3A3154:lI111|H3A31A4
-3A31A4:lI110|H3A31EC
-3A31EC:lI47|H3A3234
-3A3234:lI109|H3A327C
-3A327C:lI97|H3A32C4
-3A32C4:lI99|H3A330C
-3A330C:lI45|H3A3344
-3A3344:lI98|H3A3374
-3A3374:lI105|H3A339C
-3A339C:lI110|H3A33BC
-3A33BC:lI104|H3A33D4
-3A33D4:lI101|H3A33E4
-3A33E4:lI120|H3A33F4
-3A33F4:lI52|H3A3404
-3A3404:lI48|N
-3A2D1C:lI104|H3A2DC4
-3A2DC4:lI113|H3A2E5C
-3A2E5C:lI120|N
-39DC28:lH39DC68|H39DC74
-39DC68:t2:A4:port,I8888
-39DC74:lH39DCA8|H39DCB4
-39DCA8:t2:AC:bind_address,H39DCF8
-39DCF8:t4:I127,I0,I0,I1
-39DCB4:lH39DD0C|H39DD18
-39DD0C:t2:AB:server_name,H39DD6C
-39DD6C:lI108|H39DDE4
-39DDE4:lI111|H39DE5C
-39DE5C:lI99|H39DEE4
-39DEE4:lI97|H39DF6C
-39DF6C:lI108|H39E00C
-39E00C:lI104|H39E0B4
-39E0B4:lI111|H39E16C
-39E16C:lI115|H39E238
-39E238:lI116|N
-39DD18:lH39DD74|H39DD80
-39DD74:t2:AE:max_header_siz,I1024
-39DD80:lH39DDEC|H39DDF8
-39DDEC:t2:A11:max_header_action,A8:reply414
-39DDF8:lH39DE64|H39DE70
-39DE64:t2:A8:com_type,A7:ip_comm
-39DE70:lH39DEEC|H39DEF8
-39DEEC:t2:A7:modules,H39DF74
-39DF74:lA9:mod_alias|H39E014
-39E014:lA8:mod_auth|H39E0BC
-39E0BC:lA7:mod_esi|H39E174
-39E174:lAB:mod_actions|H39E240
-39E240:lA7:mod_cgi|H39E324
-39E324:lAB:mod_include|H39E418
-39E418:lA7:mod_dir|H39E51C
-39E51C:lA7:mod_get|H39E634
-39E634:lA8:mod_head|H39E748
-39E748:lA7:mod_log|H39E85C
-39E85C:lAC:mod_disk_log|N
-39DEF8:lH39DF7C|H39DF88
-39DF7C:t2:AF:directory_index,H39E01C
-39E01C:lH39E0C4|N
-39E0C4:lI105|H39E17C
-39E17C:lI110|H39E248
-39E248:lI100|H39E32C
-39E32C:lI101|H39E420
-39E420:lI120|H39E524
-39E524:lI46|H39E63C
-39E63C:lI104|H39E750
-39E750:lI116|H39E864
-39E864:lI109|H39E978
-39E978:lI108|N
-39DF88:lH39E024|H39E030
-39E024:t2:AC:default_type,H39E0CC
-39E0CC:lI116|H39E184
-39E184:lI101|H39E250
-39E250:lI120|H39E334
-39E334:lI116|H39E428
-39E428:lI47|H39E52C
-39E52C:lI112|H39E644
-39E644:lI108|H39E758
-39E758:lI97|H39E86C
-39E86C:lI105|H39E980
-39E980:lI110|N
-39E030:lH39E0D4|H39E0E0
-39E0D4:t2:A10:erl_script_alias,H39E18C
-39E18C:t2:H39E258,H39E260
-39E260:lH39E344|N
-39E344:lI119|H39E438
-39E438:lI101|H39E53C
-39E53C:lI98|H39E654
-39E654:lI116|H39E768
-39E768:lI111|H39E87C
-39E87C:lI111|H39E990
-39E990:lI108|N
-39E258:lI47|H39E33C
-39E33C:lI119|H39E430
-39E430:lI101|H39E534
-39E534:lI98|H39E64C
-39E64C:lI116|H39E760
-39E760:lI111|H39E874
-39E874:lI111|H39E988
-39E988:lI108|N
-39E0E0:lH39E198|H39E1A4
-39E198:t2:A5:alias,H39E268
-39E268:t2:H39E34C,H39E354
-39E354:lI47|H39E448
-39E448:lI99|H39E54C
-39E54C:lI108|H39E664
-39E664:lI101|H39E778
-39E778:lI97|H39E88C
-39E88C:lI114|H39E9A0
-39E9A0:lI99|H39EA94
-39EA94:lI97|H39EB88
-39EB88:lI115|H39EC7C
-39EC7C:lI101|H39ED70
-39ED70:lI47|H39EE4C
-39EE4C:lI111|H39EF20
-39EF20:lI116|H39EFFC
-39EFFC:lI112|H39F0E0
-39F0E0:lI47|H39F1B4
-39F1B4:lI101|H39F288
-39F288:lI114|H39F344
-39F344:lI116|H39F408
-39F408:lI115|H39F4D4
-39F4D4:lI47|H39F5A8
-39F5A8:lI108|H39F67C
-39F67C:lI105|H39F750
-39F750:lI98|H39F824
-39F824:lI47|H39F908
-39F908:lI111|H39F9E4
-39F9E4:lI98|H39FAC0
-39FAC0:lI115|H39FB9C
-39FB9C:lI101|H39FC68
-39FC68:lI114|H39FD2C
-39FD2C:lI118|H39FDF8
-39FDF8:lI101|H39FEB4
-39FEB4:lI114|H39FF70
-39FF70:lI47|H3A0024
-3A0024:lI112|H3A00D8
-3A00D8:lI114|H3A0184
-3A0184:lI105|H3A0238
-3A0238:lI118|H3A02F4
-3A02F4:lI47|H3A03A8
-3A03A8:lI99|H3A0444
-3A0444:lI114|H3A04E8
-3A04E8:lI97|H3A058C
-3A058C:lI115|H3A0638
-3A0638:lI104|H3A06EC
-3A06EC:lI100|H3A0798
-3A0798:lI117|H3A083C
-3A083C:lI109|H3A08C8
-3A08C8:lI112|H3A095C
-3A095C:lI95|H3A09F0
-3A09F0:lI118|H3A0A8C
-3A0A8C:lI105|H3A0B38
-3A0B38:lI101|H3A0BE4
-3A0BE4:lI119|H3A0CA0
-3A0CA0:lI101|H3A0D5C
-3A0D5C:lI114|N
-39E34C:lI47|H39E440
-39E440:lI99|H39E544
-39E544:lI114|H39E65C
-39E65C:lI97|H39E770
-39E770:lI115|H39E884
-39E884:lI104|H39E998
-39E998:lI100|H39EA8C
-39EA8C:lI117|H39EB80
-39EB80:lI109|H39EC74
-39EC74:lI112|H39ED68
-39ED68:lI95|H39EE44
-39EE44:lI118|H39EF18
-39EF18:lI105|H39EFF4
-39EFF4:lI101|H39F0D8
-39F0D8:lI119|H39F1AC
-39F1AC:lI101|H39F280
-39F280:lI114|N
-39E1A4:lH39E274|H39E280
-39E274:t2:A5:alias,H39E35C
-39E35C:t2:H39E450,H39E458
-39E458:lI47|H39E55C
-39E55C:lI99|H39E674
-39E674:lI108|H39E788
-39E788:lI101|H39E89C
-39E89C:lI97|H39E9B0
-39E9B0:lI114|H39EAA4
-39EAA4:lI99|H39EB98
-39EB98:lI97|H39EC8C
-39EC8C:lI115|H39ED80
-39ED80:lI101|H39EE5C
-39EE5C:lI47|H39EF30
-39EF30:lI111|H39F00C
-39F00C:lI116|H39F0F0
-39F0F0:lI112|H39F1C4
-39F1C4:lI47|H39F298
-39F298:lI101|H39F354
-39F354:lI114|H39F418
-39F418:lI116|H39F4E4
-39F4E4:lI115|H39F5B0
-39F5B0:lI47|H39F684
-39F684:lI101|H39F758
-39F758:lI114|H39F82C
-39F82C:lI116|H39F910
-39F910:lI115|H39F9EC
-39F9EC:lI47|H39FAC8
-39FAC8:lI100|H39FBA4
-39FBA4:lI111|H39FC70
-39FC70:lI99|H39FD34
-39FD34:lI47|H39FE00
-39FE00:lI104|H39FEBC
-39FEBC:lI116|H39FF78
-39FF78:lI109|H3A002C
-3A002C:lI108|N
-39E450:lI47|H39E554
-39E554:lI99|H39E66C
-39E66C:lI114|H39E780
-39E780:lI97|H39E894
-39E894:lI115|H39E9A8
-39E9A8:lI104|H39EA9C
-39EA9C:lI100|H39EB90
-39EB90:lI117|H39EC84
-39EC84:lI109|H39ED78
-39ED78:lI112|H39EE54
-39EE54:lI95|H39EF28
-39EF28:lI101|H39F004
-39F004:lI114|H39F0E8
-39F0E8:lI116|H39F1BC
-39F1BC:lI115|H39F290
-39F290:lI95|H39F34C
-39F34C:lI100|H39F410
-39F410:lI111|H39F4DC
-39F4DC:lI99|N
-39E280:lH39E368|H39E374
-39E368:t2:A5:alias,H39E460
-39E460:t2:H39E564,H39E56C
-39E56C:lI47|H39E684
-39E684:lI99|H39E798
-39E798:lI108|H39E8AC
-39E8AC:lI101|H39E9C0
-39E9C0:lI97|H39EAB4
-39EAB4:lI114|H39EBA8
-39EBA8:lI99|H39EC9C
-39EC9C:lI97|H39ED90
-39ED90:lI115|H39EE6C
-39EE6C:lI101|H39EF40
-39EF40:lI47|H39F01C
-39F01C:lI111|H39F100
-39F100:lI116|H39F1D4
-39F1D4:lI112|H39F2A0
-39F2A0:lI47|H39F35C
-39F35C:lI101|H39F420
-39F420:lI114|H39F4EC
-39F4EC:lI116|H39F5B8
-39F5B8:lI115|H39F68C
-39F68C:lI47|H39F760
-39F760:lI108|H39F834
-39F834:lI105|H39F918
-39F918:lI98|H39F9F4
-39F9F4:lI47|H39FAD0
-39FAD0:lI111|H39FBAC
-39FBAC:lI98|H39FC78
-39FC78:lI115|H39FD3C
-39FD3C:lI101|H39FE08
-39FE08:lI114|H39FEC4
-39FEC4:lI118|H39FF80
-39FF80:lI101|H3A0034
-3A0034:lI114|H3A00E0
-3A00E0:lI47|H3A018C
-3A018C:lI100|H3A0240
-3A0240:lI111|H3A02FC
-3A02FC:lI99|H3A03B0
-3A03B0:lI47|H3A044C
-3A044C:lI104|H3A04F0
-3A04F0:lI116|H3A0594
-3A0594:lI109|H3A0640
-3A0640:lI108|N
-39E564:lI47|H39E67C
-39E67C:lI99|H39E790
-39E790:lI114|H39E8A4
-39E8A4:lI97|H39E9B8
-39E9B8:lI115|H39EAAC
-39EAAC:lI104|H39EBA0
-39EBA0:lI100|H39EC94
-39EC94:lI117|H39ED88
-39ED88:lI109|H39EE64
-39EE64:lI112|H39EF38
-39EF38:lI95|H39F014
-39F014:lI100|H39F0F8
-39F0F8:lI111|H39F1CC
-39F1CC:lI99|N
-39E374:lH39E46C|N
-39E46C:t2:A10:erl_script_alias,H39E574
-39E574:t2:H39E68C,H39E694
-39E694:lH39E7A8|N
-39E7A8:lI99|H39E8BC
-39E8BC:lI114|H39E9D0
-39E9D0:lI97|H39EAC4
-39EAC4:lI115|H39EBB8
-39EBB8:lI104|H39ECAC
-39ECAC:lI100|H39EDA0
-39EDA0:lI117|H39EE74
-39EE74:lI109|H39EF48
-39EF48:lI112|H39F024
-39F024:lI95|H39F108
-39F108:lI118|H39F1DC
-39F1DC:lI105|H39F2A8
-39F2A8:lI101|H39F364
-39F364:lI119|H39F428
-39F428:lI101|H39F4F4
-39F4F4:lI114|N
-39E68C:lI47|H39E7A0
-39E7A0:lI99|H39E8B4
-39E8B4:lI100|H39E9C8
-39E9C8:lI118|H39EABC
-39EABC:lI95|H39EBB0
-39EBB0:lI101|H39ECA4
-39ECA4:lI114|H39ED98
-39ED98:lI108|N
-39DB58:lN|H39DB9C
-39DB9C:lH39D9FC|H39DBEC
-39D9FC:t4:I127,I0,I0,I1
-39DBEC:lI8888|N
-3A3E20:lH3A3DFC|H3A3704
-3A3DFC:t8:A5:child,P<0.46.0>,H39DAC8,H39DAD8,A9:permanent,I2000,A6:worker,H39DAE8
-39DAE8:lAD:httpd_manager|H39DB38
-39DB38:lAA:gen_server|N
-39DAD8:t3:AD:httpd_manager,AA:start_link,H39DB30
-39DB30:lA9:undefined|H39DB78
-39DB78:lH39DB50|H39DBC0
-39DBC0:lN|N
-39DAC8:t3:AD:httpd_manager,H39D9FC,I8888
-3A3704:lH3A36E0|H39D998
-3A36E0:t8:A5:child,P<0.45.0>,H39DA18,H39DA28,A9:permanent,I2000,AA:supervisor,H39DA38
-39DA38:lAE:httpd_misc_sup|H39DAC0
-39DAC0:lAA:supervisor|N
-39DA28:t3:AE:httpd_misc_sup,A5:start,H39D958
-39D958:lH39D9FC|H39DA10
-39DA10:lI8888|H39DAB8
-39DAB8:lA7:silence|N
-39DA18:t3:AE:httpd_misc_sup,H39D9FC,I8888
-39D998:lH39DA64|N
-39DA64:t8:A5:child,P<0.44.0>,H39DAF0,H39DB00,A9:permanent,I2000,AA:supervisor,H39DB10
-39DB10:lA12:httpd_acceptor_sup|H39DB48
-39DB48:lAA:supervisor|N
-39DB00:t3:A12:httpd_acceptor_sup,A5:start,H39DB40
-39DB40:lH39D9FC|H39DB80
-39DB80:lI8888|H39DBC8
-39DBC8:lA7:silence|N
-39DAF0:t3:A12:httpd_acceptor_sup,H39D9FC,I8888
-39D960:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39D9CC:lAA:gen_server|H39DA90
-39DA90:lP<0.33.0>|H39DB20
-39DB20:lP<0.33.0>|H39DB60
-39DB60:lH39DBA4|H39DBB0
-39DBA4:t2:A5:local,A1A:httpd_sup__127_0_0_1__8888
-39DBB0:lAA:supervisor|H39DBF4
-39DBF4:lH39DC30|H39DC40
-39DC30:t3:H39D960,A9:httpd_sup,H39DA88
-39DC40:lN|N
-39D940:t2:AD:$initial_call,H39D9E4
-39D9E4:t3:A3:gen,A7:init_it,H39D9CC
-39D94C:t2:AA:$ancestors,H39D9F4
-39D9F4:lA8:web_tool|H39DAB0
-39DAB0:lP<0.27.0>|N
-=proc_dictionary:<0.44.0>
-H3756A8
-H3756B4
-H3756C0
-H3756CC
-=proc_stack:<0.44.0>
-36c194:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36C030
-y4:A1E:httpd_acc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36c1b0:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H375710
-=proc_heap:<0.44.0>
-36C030:tA:A5:state,H3756D8,AB:one_for_one,H36C028,N,I500,I100,N,A12:httpd_acceptor_sup,H375730
-375730:lA7:silence|N
-36C028:lH36C004|N
-36C004:t8:A5:child,P<0.47.0>,H36BE80,H36BE90,A9:permanent,I1000,A6:worker,H36BEA0
-36BEA0:lAE:httpd_acceptor|N
-36BE90:t3:AE:httpd_acceptor,AA:start_link,H36BEE8
-36BEE8:lP<0.46.0>|H36BEF0
-36BEF0:lA7:ip_comm|H36BEF8
-36BEF8:lH36BF00|H36BF14
-36BF00:t4:I127,I0,I0,I1
-36BF14:lI8888|H36BF1C
-36BF1C:lA1B:httpd_conf__127_0_0_1__8888|H36BF24
-36BF24:lA7:silence|N
-36BE80:t3:AE:httpd_acceptor,H36BED4,I8888
-36BED4:t4:I127,I0,I0,I1
-3756D8:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-375710:lAA:gen_server|H375738
-375738:lP<0.43.0>|H375748
-375748:lP<0.43.0>|H375758
-375758:lH375760|H37576C
-375760:t2:A5:local,A1E:httpd_acc_sup__127_0_0_1__8888
-37576C:lAA:supervisor|H375774
-375774:lH37577C|H37578C
-37577C:t3:H3756D8,A12:httpd_acceptor_sup,H375730
-37578C:lN|N
-3756A8:t2:AD:$initial_call,H375718
-375718:t3:A3:gen,A7:init_it,H375710
-3756B4:t2:A9:verbosity,A7:silence
-3756C0:t2:AA:$ancestors,H375728
-375728:lA1A:httpd_sup__127_0_0_1__8888|H375740
-375740:lA8:web_tool|H375750
-375750:lP<0.27.0>|N
-3756CC:t2:A5:sname,A7:acc_sup
-=proc_dictionary:<0.45.0>
-H36F484
-H36F4F4
-H36F468
-H36F500
-=proc_stack:<0.45.0>
-36f734:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AA:supervisor
-y3:H36F5D0
-y4:A1F:httpd_misc_sup__127_0_0_1__8888
-y5:P<0.43.0>
-36f750:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H36F430
-=proc_heap:<0.45.0>
-36F5D0:tA:A5:state,H36F3FC,AB:one_for_one,N,N,I0,I1,N,AE:httpd_misc_sup,H36F408
-36F408:lA7:silence|N
-36F3FC:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F430:lAA:gen_server|H36F428
-36F428:lP<0.43.0>|H36F420
-36F420:lP<0.43.0>|H36F3D0
-36F3D0:lH36F3E0|H36F418
-36F3E0:t2:A5:local,A1F:httpd_misc_sup__127_0_0_1__8888
-36F418:lAA:supervisor|H36F3D8
-36F3D8:lH36F3EC|H36F410
-36F3EC:t3:H36F3FC,AE:httpd_misc_sup,H36F408
-36F410:lN|N
-36F484:t2:AD:$initial_call,H36F474
-36F474:t3:A3:gen,A7:init_it,H36F430
-36F4F4:t2:A9:verbosity,A7:silence
-36F468:t2:AA:$ancestors,H36F460
-36F460:lA1A:httpd_sup__127_0_0_1__8888|H36F440
-36F440:lA8:web_tool|H36F438
-36F438:lP<0.27.0>|N
-36F500:t2:A5:sname,A8:misc_sup
-=proc_dictionary:<0.46.0>
-H3BDA50
-H3BDA5C
-H3BDAC8
-H3BDB28
-H3BDB9C
-H3BDC00
-H3BDADC
-H3BDB3C
-=proc_stack:<0.46.0>
-39d8f4:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:AD:httpd_manager
-y3:H39D5A4
-y4:A16:httpd__127_0_0_1__8888
-y5:P<0.43.0>
-39d910:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H3BDAB0
-=proc_heap:<0.46.0>
-39D5A4:t9:A5:state,A7:ip_comm,A9:undefined,A1B:httpd_conf__127_0_0_1__8888,N,A9:unblocked,A9:undefined,A9:undefined,H39D430
-39D430:lH39BF40|H39D428
-39BF40:t2:A8:max_conn,I1
-39D428:lH39BC80|H39D420
-39BC80:t2:AF:last_heavy_load,A5:never
-39D420:lH39D414|N
-39D414:t2:AF:last_connection,H39D408
-39D408:t2:H39D3E8,H39D3F8
-39D3F8:t3:I11,I22,I34
-39D3E8:t3:I2004,I4,I21
-3BDAB0:lAA:gen_server|H3BDB20
-3BDB20:lP<0.43.0>|H3BDB94
-3BDB94:lP<0.43.0>|H3BDBF8
-3BDBF8:lH3BDC48|H3BDC54
-3BDC48:t2:A5:local,A16:httpd__127_0_0_1__8888
-3BDC54:lAD:httpd_manager|H3BDCAC
-3BDCAC:lH3BDD14|H3BDD1C
-3BDD14:lA9:undefined|H3BDD9C
-3BDD9C:lH3BDA84|H3BDE2C
-3BDA84:lH3BDAF0|H3BDAFC
-3BDAF0:t2:AB:server_root,H3BDB48
-3BDB48:lI47|H3BDBB0
-3BDBB0:lI99|H3BDC0C
-3BDC0C:lI108|H3BDC64
-3BDC64:lI101|H3BDCBC
-3BDCBC:lI97|H3BDD2C
-3BDD2C:lI114|H3BDDA4
-3BDDA4:lI99|H3BDE34
-3BDE34:lI97|H3BDED4
-3BDED4:lI115|H3BDF90
-3BDF90:lI101|H3BE054
-3BE054:lI47|H3BE128
-3BE128:lI111|H3BE204
-3BE204:lI116|H3BE2EC
-3BE2EC:lI112|H3BE3E0
-3BE3E0:lI47|H3BE4E4
-3BE4E4:lI101|H3BE5E8
-3BE5E8:lI114|H3BE6EC
-3BE6EC:lI116|H3BE7E0
-3BE7E0:lI115|H3BE8CC
-3BE8CC:lI47|H3BE9B8
-3BE9B8:lI108|H3BEAAC
-3BEAAC:lI105|H3BEB98
-3BEB98:lI98|H3BEC84
-3BEC84:lI47|H3BED70
-3BED70:lI119|H3BEE5C
-3BEE5C:lI101|H3BEF30
-3BEF30:lI98|H3BEFFC
-3BEFFC:lI116|H3BF0C8
-3BF0C8:lI111|H3BF19C
-3BF19C:lI111|H3BF260
-3BF260:lI108|H3BF314
-3BF314:lI47|H3BF3C0
-3BF3C0:lI112|H3BF474
-3BF474:lI114|H3BF530
-3BF530:lI105|H3BF5F4
-3BF5F4:lI118|H3BF6C8
-3BF6C8:lI47|H3BF79C
-3BF79C:lI114|H3BF870
-3BF870:lI111|H3BF954
-3BF954:lI111|H3BFA30
-3BFA30:lI116|N
-3BDAFC:lH3BDB50|H3BDB5C
-3BDB50:t2:AD:document_root,H3BDBB8
-3BDBB8:lI47|H3BDC14
-3BDC14:lI99|H3BDC6C
-3BDC6C:lI108|H3BDCC4
-3BDCC4:lI101|H3BDD34
-3BDD34:lI97|H3BDDAC
-3BDDAC:lI114|H3BDE3C
-3BDE3C:lI99|H3BDEDC
-3BDEDC:lI97|H3BDF98
-3BDF98:lI115|H3BE05C
-3BE05C:lI101|H3BE130
-3BE130:lI47|H3BE20C
-3BE20C:lI111|H3BE2F4
-3BE2F4:lI116|H3BE3E8
-3BE3E8:lI112|H3BE4EC
-3BE4EC:lI47|H3BE5F0
-3BE5F0:lI101|H3BE6F4
-3BE6F4:lI114|H3BE7E8
-3BE7E8:lI116|H3BE8D4
-3BE8D4:lI115|H3BE9C0
-3BE9C0:lI47|H3BEAB4
-3BEAB4:lI108|H3BEBA0
-3BEBA0:lI105|H3BEC8C
-3BEC8C:lI98|H3BED78
-3BED78:lI47|H3BEE64
-3BEE64:lI119|H3BEF38
-3BEF38:lI101|H3BF004
-3BF004:lI98|H3BF0D0
-3BF0D0:lI116|H3BF1A4
-3BF1A4:lI111|H3BF268
-3BF268:lI111|H3BF31C
-3BF31C:lI108|H3BF3C8
-3BF3C8:lI47|H3BF47C
-3BF47C:lI112|H3BF538
-3BF538:lI114|H3BF5FC
-3BF5FC:lI105|H3BF6D0
-3BF6D0:lI118|H3BF7A4
-3BF7A4:lI47|H3BF878
-3BF878:lI114|H3BF95C
-3BF95C:lI111|H3BFA38
-3BFA38:lI111|H3BFB0C
-3BFB0C:lI116|H3BFBE8
-3BFBE8:lI47|H3BFCB4
-3BFCB4:lI100|H3BFD78
-3BFD78:lI111|H3BFE3C
-3BFE3C:lI99|N
-3BDB5C:lH3BDBC0|H3BDBCC
-3BDBC0:t2:AA:mime_types,H3BDC1C
-3BDC1C:lH3BDC74|H3BDC80
-3BDC74:t2:H3BDCCC,H3BDCD4
-3BDCD4:lI120|H3BDD44
-3BDD44:lI45|H3BDDBC
-3BDDBC:lI119|H3BDE44
-3BDE44:lI111|H3BDEE4
-3BDEE4:lI114|H3BDFA0
-3BDFA0:lI108|H3BE064
-3BE064:lI100|H3BE138
-3BE138:lI47|H3BE214
-3BE214:lI120|H3BE2FC
-3BE2FC:lI45|H3BE3F0
-3BE3F0:lI118|H3BE4F4
-3BE4F4:lI114|H3BE5F8
-3BE5F8:lI109|H3BE6FC
-3BE6FC:lI108|N
-3BDCCC:lI119|H3BDD3C
-3BDD3C:lI114|H3BDDB4
-3BDDB4:lI108|N
-3BDC80:lH3BDCDC|H3BDCE8
-3BDCDC:t2:H3BDD4C,H3BDD54
-3BDD54:lI120|H3BDDCC
-3BDDCC:lI45|H3BDE54
-3BDE54:lI119|H3BDEF4
-3BDEF4:lI111|H3BDFA8
-3BDFA8:lI114|H3BE06C
-3BE06C:lI108|H3BE140
-3BE140:lI100|H3BE21C
-3BE21C:lI47|H3BE304
-3BE304:lI120|H3BE3F8
-3BE3F8:lI45|H3BE4FC
-3BE4FC:lI118|H3BE600
-3BE600:lI114|H3BE704
-3BE704:lI109|H3BE7F0
-3BE7F0:lI108|N
-3BDD4C:lI118|H3BDDC4
-3BDDC4:lI114|H3BDE4C
-3BDE4C:lI109|H3BDEEC
-3BDEEC:lI108|N
-3BDCE8:lH3BDD5C|H3BDD68
-3BDD5C:t2:H3BDDD4,H3BDDDC
-3BDDDC:lI120|H3BDE64
-3BDE64:lI45|H3BDF04
-3BDF04:lI99|H3BDFB0
-3BDFB0:lI111|H3BE074
-3BE074:lI110|H3BE148
-3BE148:lI102|H3BE224
-3BE224:lI101|H3BE30C
-3BE30C:lI114|H3BE400
-3BE400:lI101|H3BE504
-3BE504:lI110|H3BE608
-3BE608:lI99|H3BE70C
-3BE70C:lI101|H3BE7F8
-3BE7F8:lI47|H3BE8DC
-3BE8DC:lI120|H3BE9C8
-3BE9C8:lI45|H3BEABC
-3BEABC:lI99|H3BEBA8
-3BEBA8:lI111|H3BEC94
-3BEC94:lI111|H3BED80
-3BED80:lI108|H3BEE6C
-3BEE6C:lI116|H3BEF40
-3BEF40:lI97|H3BF00C
-3BF00C:lI108|H3BF0D8
-3BF0D8:lI107|N
-3BDDD4:lI105|H3BDE5C
-3BDE5C:lI99|H3BDEFC
-3BDEFC:lI101|N
-3BDD68:lH3BDDE4|H3BDDF0
-3BDDE4:t2:H3BDE6C,H3BDE74
-3BDE74:lI118|H3BDF14
-3BDF14:lI105|H3BDFC0
-3BDFC0:lI100|H3BE084
-3BE084:lI101|H3BE158
-3BE158:lI111|H3BE22C
-3BE22C:lI47|H3BE314
-3BE314:lI120|H3BE408
-3BE408:lI45|H3BE50C
-3BE50C:lI115|H3BE610
-3BE610:lI103|H3BE714
-3BE714:lI105|H3BE800
-3BE800:lI45|H3BE8E4
-3BE8E4:lI109|H3BE9D0
-3BE9D0:lI111|H3BEAC4
-3BEAC4:lI118|H3BEBB0
-3BEBB0:lI105|H3BEC9C
-3BEC9C:lI101|N
-3BDE6C:lI109|H3BDF0C
-3BDF0C:lI111|H3BDFB8
-3BDFB8:lI118|H3BE07C
-3BE07C:lI105|H3BE150
-3BE150:lI101|N
-3BDDF0:lH3BDE7C|H3BDE88
-3BDE7C:t2:H3BDF1C,H3BDF24
-3BDF24:lI118|H3BDFD0
-3BDFD0:lI105|H3BE094
-3BE094:lI100|H3BE160
-3BE160:lI101|H3BE234
-3BE234:lI111|H3BE31C
-3BE31C:lI47|H3BE410
-3BE410:lI120|H3BE514
-3BE514:lI45|H3BE618
-3BE618:lI109|H3BE71C
-3BE71C:lI115|H3BE808
-3BE808:lI118|H3BE8EC
-3BE8EC:lI105|H3BE9D8
-3BE9D8:lI100|H3BEACC
-3BEACC:lI101|H3BEBB8
-3BEBB8:lI111|N
-3BDF1C:lI97|H3BDFC8
-3BDFC8:lI118|H3BE08C
-3BE08C:lI105|N
-3BDE88:lH3BDF2C|H3BDF38
-3BDF2C:t2:H3BDFD8,H3BDFE0
-3BDFE0:lI118|H3BE0A4
-3BE0A4:lI105|H3BE168
-3BE168:lI100|H3BE23C
-3BE23C:lI101|H3BE324
-3BE324:lI111|H3BE418
-3BE418:lI47|H3BE51C
-3BE51C:lI113|H3BE620
-3BE620:lI117|H3BE724
-3BE724:lI105|H3BE810
-3BE810:lI99|H3BE8F4
-3BE8F4:lI107|H3BE9E0
-3BE9E0:lI116|H3BEAD4
-3BEAD4:lI105|H3BEBC0
-3BEBC0:lI109|H3BECA4
-3BECA4:lI101|N
-3BDFD8:lI113|H3BE09C
-3BE09C:lI116|N
-3BDF38:lH3BDFE8|H3BDFF4
-3BDFE8:t2:H3BE0AC,H3BE0B4
-3BE0B4:lI118|H3BE178
-3BE178:lI105|H3BE24C
-3BE24C:lI100|H3BE32C
-3BE32C:lI101|H3BE420
-3BE420:lI111|H3BE524
-3BE524:lI47|H3BE628
-3BE628:lI113|H3BE72C
-3BE72C:lI117|H3BE818
-3BE818:lI105|H3BE8FC
-3BE8FC:lI99|H3BE9E8
-3BE9E8:lI107|H3BEADC
-3BEADC:lI116|H3BEBC8
-3BEBC8:lI105|H3BECAC
-3BECAC:lI109|H3BED88
-3BED88:lI101|N
-3BE0AC:lI109|H3BE170
-3BE170:lI111|H3BE244
-3BE244:lI118|N
-3BDFF4:lH3BE0BC|H3BE0C8
-3BE0BC:t2:H3BE180,H3BE188
-3BE188:lI118|H3BE25C
-3BE25C:lI105|H3BE33C
-3BE33C:lI100|H3BE430
-3BE430:lI101|H3BE52C
-3BE52C:lI111|H3BE630
-3BE630:lI47|H3BE734
-3BE734:lI109|H3BE820
-3BE820:lI112|H3BE904
-3BE904:lI101|H3BE9F0
-3BE9F0:lI103|N
-3BE180:lI109|H3BE254
-3BE254:lI112|H3BE334
-3BE334:lI101|H3BE428
-3BE428:lI103|N
-3BE0C8:lH3BE190|H3BE19C
-3BE190:t2:H3BE264,H3BE26C
-3BE26C:lI118|H3BE34C
-3BE34C:lI105|H3BE440
-3BE440:lI100|H3BE534
-3BE534:lI101|H3BE638
-3BE638:lI111|H3BE73C
-3BE73C:lI47|H3BE828
-3BE828:lI109|H3BE90C
-3BE90C:lI112|H3BE9F8
-3BE9F8:lI101|H3BEAE4
-3BEAE4:lI103|N
-3BE264:lI109|H3BE344
-3BE344:lI112|H3BE438
-3BE438:lI103|N
-3BE19C:lH3BE274|H3BE280
-3BE274:t2:H3BE354,H3BE35C
-3BE35C:lI118|H3BE450
-3BE450:lI105|H3BE544
-3BE544:lI100|H3BE640
-3BE640:lI101|H3BE744
-3BE744:lI111|H3BE830
-3BE830:lI47|H3BE914
-3BE914:lI109|H3BEA00
-3BEA00:lI112|H3BEAEC
-3BEAEC:lI101|H3BEBD0
-3BEBD0:lI103|N
-3BE354:lI109|H3BE448
-3BE448:lI112|H3BE53C
-3BE53C:lI101|N
-3BE280:lH3BE364|H3BE370
-3BE364:t2:H3BE458,H3BE460
-3BE460:lI116|H3BE554
-3BE554:lI101|H3BE650
-3BE650:lI120|H3BE754
-3BE754:lI116|H3BE838
-3BE838:lI47|H3BE91C
-3BE91C:lI120|H3BEA08
-3BEA08:lI45|H3BEAF4
-3BEAF4:lI115|H3BEBD8
-3BEBD8:lI103|H3BECB4
-3BECB4:lI109|H3BED90
-3BED90:lI108|N
-3BE458:lI115|H3BE54C
-3BE54C:lI103|H3BE648
-3BE648:lI109|H3BE74C
-3BE74C:lI108|N
-3BE370:lH3BE468|H3BE474
-3BE468:t2:H3BE55C,H3BE564
-3BE564:lI116|H3BE660
-3BE660:lI101|H3BE764
-3BE764:lI120|H3BE840
-3BE840:lI116|H3BE924
-3BE924:lI47|H3BEA10
-3BEA10:lI120|H3BEAFC
-3BEAFC:lI45|H3BEBE0
-3BEBE0:lI115|H3BECBC
-3BECBC:lI103|H3BED98
-3BED98:lI109|H3BEE74
-3BEE74:lI108|N
-3BE55C:lI115|H3BE658
-3BE658:lI103|H3BE75C
-3BE75C:lI109|N
-3BE474:lH3BE56C|H3BE578
-3BE56C:t2:H3BE668,H3BE670
-3BE670:lI116|H3BE774
-3BE774:lI101|H3BE850
-3BE850:lI120|H3BE92C
-3BE92C:lI116|H3BEA18
-3BEA18:lI47|H3BEB04
-3BEB04:lI120|H3BEBE8
-3BEBE8:lI45|H3BECC4
-3BECC4:lI115|H3BEDA0
-3BEDA0:lI101|H3BEE7C
-3BEE7C:lI116|H3BEF48
-3BEF48:lI101|H3BF014
-3BF014:lI120|H3BF0E0
-3BF0E0:lI116|N
-3BE668:lI101|H3BE76C
-3BE76C:lI116|H3BE848
-3BE848:lI120|N
-3BE578:lH3BE678|H3BE684
-3BE678:t2:H3BE77C,H3BE784
-3BE784:lI116|H3BE860
-3BE860:lI101|H3BE93C
-3BE93C:lI120|H3BEA20
-3BEA20:lI116|H3BEB0C
-3BEB0C:lI47|H3BEBF0
-3BEBF0:lI116|H3BECCC
-3BECCC:lI97|H3BEDA8
-3BEDA8:lI98|H3BEE84
-3BEE84:lI45|H3BEF50
-3BEF50:lI115|H3BF01C
-3BF01C:lI101|H3BF0E8
-3BF0E8:lI112|H3BF1AC
-3BF1AC:lI97|H3BF270
-3BF270:lI114|H3BF324
-3BF324:lI97|H3BF3D0
-3BF3D0:lI116|H3BF484
-3BF484:lI101|H3BF540
-3BF540:lI100|H3BF604
-3BF604:lI45|H3BF6D8
-3BF6D8:lI118|H3BF7AC
-3BF7AC:lI97|H3BF880
-3BF880:lI108|H3BF964
-3BF964:lI117|H3BFA40
-3BFA40:lI101|H3BFB14
-3BFB14:lI115|N
-3BE77C:lI116|H3BE858
-3BE858:lI115|H3BE934
-3BE934:lI118|N
-3BE684:lH3BE78C|H3BE798
-3BE78C:t2:H3BE868,H3BE870
-3BE870:lI116|H3BE94C
-3BE94C:lI101|H3BEA30
-3BEA30:lI120|H3BEB14
-3BEB14:lI116|H3BEBF8
-3BEBF8:lI47|H3BECD4
-3BECD4:lI114|H3BEDB0
-3BEDB0:lI105|H3BEE8C
-3BEE8C:lI99|H3BEF58
-3BEF58:lI104|H3BF024
-3BF024:lI116|H3BF0F0
-3BF0F0:lI101|H3BF1B4
-3BF1B4:lI120|H3BF278
-3BF278:lI116|N
-3BE868:lI114|H3BE944
-3BE944:lI116|H3BEA28
-3BEA28:lI120|N
-3BE798:lH3BE878|H3BE884
-3BE878:t2:H3BE954,H3BE95C
-3BE95C:lI116|H3BEA40
-3BEA40:lI101|H3BEB24
-3BEB24:lI120|H3BEC00
-3BEC00:lI116|H3BECDC
-3BECDC:lI47|H3BEDB8
-3BEDB8:lI112|H3BEE94
-3BEE94:lI108|H3BEF60
-3BEF60:lI97|H3BF02C
-3BF02C:lI105|H3BF0F8
-3BF0F8:lI110|N
-3BE954:lI116|H3BEA38
-3BEA38:lI120|H3BEB1C
-3BEB1C:lI116|N
-3BE884:lH3BE964|H3BE970
-3BE964:t2:H3BEA48,H3BEA50
-3BEA50:lI116|H3BEB34
-3BEB34:lI101|H3BEC10
-3BEC10:lI120|H3BECEC
-3BECEC:lI116|H3BEDC8
-3BEDC8:lI47|H3BEE9C
-3BEE9C:lI120|H3BEF68
-3BEF68:lI45|H3BF034
-3BF034:lI115|H3BF100
-3BF100:lI101|H3BF1BC
-3BF1BC:lI114|H3BF280
-3BF280:lI118|H3BF32C
-3BF32C:lI101|H3BF3D8
-3BF3D8:lI114|H3BF48C
-3BF48C:lI45|H3BF548
-3BF548:lI112|H3BF60C
-3BF60C:lI97|H3BF6E0
-3BF6E0:lI114|H3BF7B4
-3BF7B4:lI115|H3BF888
-3BF888:lI101|H3BF96C
-3BF96C:lI100|H3BFA48
-3BFA48:lI45|H3BFB1C
-3BFB1C:lI104|H3BFBF0
-3BFBF0:lI116|H3BFCBC
-3BFCBC:lI109|H3BFD80
-3BFD80:lI108|N
-3BEA48:lI115|H3BEB2C
-3BEB2C:lI104|H3BEC08
-3BEC08:lI116|H3BECE4
-3BECE4:lI109|H3BEDC0
-3BEDC0:lI108|N
-3BE970:lH3BEA58|H3BEA64
-3BEA58:t2:H3BEB3C,H3BEB44
-3BEB44:lI116|H3BEC20
-3BEC20:lI101|H3BECFC
-3BECFC:lI120|H3BEDD8
-3BEDD8:lI116|H3BEEA4
-3BEEA4:lI47|H3BEF70
-3BEF70:lI104|H3BF03C
-3BF03C:lI116|H3BF108
-3BF108:lI109|H3BF1C4
-3BF1C4:lI108|N
-3BEB3C:lI104|H3BEC18
-3BEC18:lI116|H3BECF4
-3BECF4:lI109|H3BEDD0
-3BEDD0:lI108|N
-3BEA64:lH3BEB4C|H3BEB58
-3BEB4C:t2:H3BEC28,H3BEC30
-3BEC30:lI116|H3BED0C
-3BED0C:lI101|H3BEDE8
-3BEDE8:lI120|H3BEEAC
-3BEEAC:lI116|H3BEF78
-3BEF78:lI47|H3BF044
-3BF044:lI104|H3BF110
-3BF110:lI116|H3BF1CC
-3BF1CC:lI109|H3BF288
-3BF288:lI108|N
-3BEC28:lI104|H3BED04
-3BED04:lI116|H3BEDE0
-3BEDE0:lI109|N
-3BEB58:lH3BEC38|H3BEC44
-3BEC38:t2:H3BED14,H3BED1C
-3BED1C:lI105|H3BEDF8
-3BEDF8:lI109|H3BEEBC
-3BEEBC:lI97|H3BEF80
-3BEF80:lI103|H3BF04C
-3BF04C:lI101|H3BF118
-3BF118:lI47|H3BF1D4
-3BF1D4:lI120|H3BF290
-3BF290:lI45|H3BF334
-3BF334:lI120|H3BF3E0
-3BF3E0:lI119|H3BF494
-3BF494:lI105|H3BF550
-3BF550:lI110|H3BF614
-3BF614:lI100|H3BF6E8
-3BF6E8:lI111|H3BF7BC
-3BF7BC:lI119|H3BF890
-3BF890:lI100|H3BF974
-3BF974:lI117|H3BFA50
-3BFA50:lI109|H3BFB24
-3BFB24:lI112|N
-3BED14:lI120|H3BEDF0
-3BEDF0:lI119|H3BEEB4
-3BEEB4:lI100|N
-3BEC44:lH3BED24|H3BED30
-3BED24:t2:H3BEE00,H3BEE08
-3BEE08:lI105|H3BEECC
-3BEECC:lI109|H3BEF90
-3BEF90:lI97|H3BF054
-3BF054:lI103|H3BF120
-3BF120:lI101|H3BF1DC
-3BF1DC:lI47|H3BF298
-3BF298:lI120|H3BF33C
-3BF33C:lI45|H3BF3E8
-3BF3E8:lI120|H3BF49C
-3BF49C:lI112|H3BF558
-3BF558:lI105|H3BF61C
-3BF61C:lI120|H3BF6F0
-3BF6F0:lI109|H3BF7C4
-3BF7C4:lI97|H3BF898
-3BF898:lI112|N
-3BEE00:lI120|H3BEEC4
-3BEEC4:lI112|H3BEF88
-3BEF88:lI109|N
-3BED30:lH3BEE10|H3BEE1C
-3BEE10:t2:H3BEED4,H3BEEDC
-3BEEDC:lI105|H3BEFA0
-3BEFA0:lI109|H3BF064
-3BF064:lI97|H3BF128
-3BF128:lI103|H3BF1E4
-3BF1E4:lI101|H3BF2A0
-3BF2A0:lI47|H3BF344
-3BF344:lI120|H3BF3F0
-3BF3F0:lI45|H3BF4A4
-3BF4A4:lI120|H3BF560
-3BF560:lI98|H3BF624
-3BF624:lI105|H3BF6F8
-3BF6F8:lI116|H3BF7CC
-3BF7CC:lI109|H3BF8A0
-3BF8A0:lI97|H3BF97C
-3BF97C:lI112|N
-3BEED4:lI120|H3BEF98
-3BEF98:lI98|H3BF05C
-3BF05C:lI109|N
-3BEE1C:lH3BEEE4|H3BEEF0
-3BEEE4:t2:H3BEFA8,H3BEFB0
-3BEFB0:lI105|H3BF074
-3BF074:lI109|H3BF138
-3BF138:lI97|H3BF1EC
-3BF1EC:lI103|H3BF2A8
-3BF2A8:lI101|H3BF34C
-3BF34C:lI47|H3BF3F8
-3BF3F8:lI120|H3BF4AC
-3BF4AC:lI45|H3BF568
-3BF568:lI114|H3BF62C
-3BF62C:lI103|H3BF700
-3BF700:lI98|N
-3BEFA8:lI114|H3BF06C
-3BF06C:lI103|H3BF130
-3BF130:lI98|N
-3BEEF0:lH3BEFB8|H3BEFC4
-3BEFB8:t2:H3BF07C,H3BF084
-3BF084:lI105|H3BF148
-3BF148:lI109|H3BF1FC
-3BF1FC:lI97|H3BF2B0
-3BF2B0:lI103|H3BF354
-3BF354:lI101|H3BF400
-3BF400:lI47|H3BF4B4
-3BF4B4:lI120|H3BF570
-3BF570:lI45|H3BF634
-3BF634:lI112|H3BF708
-3BF708:lI111|H3BF7D4
-3BF7D4:lI114|H3BF8A8
-3BF8A8:lI116|H3BF984
-3BF984:lI97|H3BFA58
-3BFA58:lI98|H3BFB2C
-3BFB2C:lI108|H3BFBF8
-3BFBF8:lI101|H3BFCC4
-3BFCC4:lI45|H3BFD88
-3BFD88:lI112|H3BFE44
-3BFE44:lI105|H3BFEF0
-3BFEF0:lI120|H3BFFA4
-3BFFA4:lI109|H3C0050
-3C0050:lI97|H3C00FC
-3C00FC:lI112|N
-3BF07C:lI112|H3BF140
-3BF140:lI112|H3BF1F4
-3BF1F4:lI109|N
-3BEFC4:lH3BF08C|H3BF098
-3BF08C:t2:H3BF150,H3BF158
-3BF158:lI105|H3BF20C
-3BF20C:lI109|H3BF2C0
-3BF2C0:lI97|H3BF35C
-3BF35C:lI103|H3BF408
-3BF408:lI101|H3BF4BC
-3BF4BC:lI47|H3BF578
-3BF578:lI120|H3BF63C
-3BF63C:lI45|H3BF710
-3BF710:lI112|H3BF7DC
-3BF7DC:lI111|H3BF8B0
-3BF8B0:lI114|H3BF98C
-3BF98C:lI116|H3BFA60
-3BFA60:lI97|H3BFB34
-3BFB34:lI98|H3BFC00
-3BFC00:lI108|H3BFCCC
-3BFCCC:lI101|H3BFD90
-3BFD90:lI45|H3BFE4C
-3BFE4C:lI103|H3BFEF8
-3BFEF8:lI114|H3BFFAC
-3BFFAC:lI97|H3C0058
-3C0058:lI121|H3C0104
-3C0104:lI109|H3C01A8
-3C01A8:lI97|H3C025C
-3C025C:lI112|N
-3BF150:lI112|H3BF204
-3BF204:lI103|H3BF2B8
-3BF2B8:lI109|N
-3BF098:lH3BF160|H3BF16C
-3BF160:t2:H3BF214,H3BF21C
-3BF21C:lI105|H3BF2D0
-3BF2D0:lI109|H3BF36C
-3BF36C:lI97|H3BF410
-3BF410:lI103|H3BF4C4
-3BF4C4:lI101|H3BF580
-3BF580:lI47|H3BF644
-3BF644:lI120|H3BF718
-3BF718:lI45|H3BF7E4
-3BF7E4:lI112|H3BF8B8
-3BF8B8:lI111|H3BF994
-3BF994:lI114|H3BFA68
-3BFA68:lI116|H3BFB3C
-3BFB3C:lI97|H3BFC08
-3BFC08:lI98|H3BFCD4
-3BFCD4:lI108|H3BFD98
-3BFD98:lI101|H3BFE54
-3BFE54:lI45|H3BFF00
-3BFF00:lI98|H3BFFB4
-3BFFB4:lI105|H3C0060
-3C0060:lI116|H3C010C
-3C010C:lI109|H3C01B0
-3C01B0:lI97|H3C0264
-3C0264:lI112|N
-3BF214:lI112|H3BF2C8
-3BF2C8:lI98|H3BF364
-3BF364:lI109|N
-3BF16C:lH3BF224|H3BF230
-3BF224:t2:H3BF2D8,H3BF2E0
-3BF2E0:lI105|H3BF37C
-3BF37C:lI109|H3BF420
-3BF420:lI97|H3BF4CC
-3BF4CC:lI103|H3BF588
-3BF588:lI101|H3BF64C
-3BF64C:lI47|H3BF720
-3BF720:lI120|H3BF7EC
-3BF7EC:lI45|H3BF8C0
-3BF8C0:lI112|H3BF99C
-3BF99C:lI111|H3BFA70
-3BFA70:lI114|H3BFB44
-3BFB44:lI116|H3BFC10
-3BFC10:lI97|H3BFCDC
-3BFCDC:lI98|H3BFDA0
-3BFDA0:lI108|H3BFE5C
-3BFE5C:lI101|H3BFF08
-3BFF08:lI45|H3BFFBC
-3BFFBC:lI97|H3C0068
-3C0068:lI110|H3C0114
-3C0114:lI121|H3C01B8
-3C01B8:lI109|H3C026C
-3C026C:lI97|H3C0318
-3C0318:lI112|N
-3BF2D8:lI112|H3BF374
-3BF374:lI110|H3BF418
-3BF418:lI109|N
-3BF230:lH3BF2E8|H3BF2F4
-3BF2E8:t2:H3BF384,H3BF38C
-3BF38C:lI105|H3BF430
-3BF430:lI109|H3BF4DC
-3BF4DC:lI97|H3BF590
-3BF590:lI103|H3BF654
-3BF654:lI101|H3BF728
-3BF728:lI47|H3BF7F4
-3BF7F4:lI120|H3BF8C8
-3BF8C8:lI45|H3BF9A4
-3BF9A4:lI99|H3BFA78
-3BFA78:lI109|H3BFB4C
-3BFB4C:lI117|H3BFC18
-3BFC18:lI45|H3BFCE4
-3BFCE4:lI114|H3BFDA8
-3BFDA8:lI97|H3BFE64
-3BFE64:lI115|H3BFF10
-3BFF10:lI116|H3BFFC4
-3BFFC4:lI101|H3C0070
-3C0070:lI114|N
-3BF384:lI114|H3BF428
-3BF428:lI97|H3BF4D4
-3BF4D4:lI115|N
-3BF2F4:lH3BF394|H3BF3A0
-3BF394:t2:H3BF438,H3BF440
-3BF440:lI105|H3BF4EC
-3BF4EC:lI109|H3BF5A0
-3BF5A0:lI97|H3BF664
-3BF664:lI103|H3BF730
-3BF730:lI101|H3BF7FC
-3BF7FC:lI47|H3BF8D0
-3BF8D0:lI116|H3BF9AC
-3BF9AC:lI105|H3BFA80
-3BFA80:lI102|H3BFB54
-3BFB54:lI102|N
-3BF438:lI116|H3BF4E4
-3BF4E4:lI105|H3BF598
-3BF598:lI102|H3BF65C
-3BF65C:lI102|N
-3BF3A0:lH3BF448|H3BF454
-3BF448:t2:H3BF4F4,H3BF4FC
-3BF4FC:lI105|H3BF5B0
-3BF5B0:lI109|H3BF674
-3BF674:lI97|H3BF738
-3BF738:lI103|H3BF804
-3BF804:lI101|H3BF8D8
-3BF8D8:lI47|H3BF9B4
-3BF9B4:lI116|H3BFA88
-3BFA88:lI105|H3BFB5C
-3BFB5C:lI102|H3BFC20
-3BFC20:lI102|N
-3BF4F4:lI116|H3BF5A8
-3BF5A8:lI105|H3BF66C
-3BF66C:lI102|N
-3BF454:lH3BF504|H3BF510
-3BF504:t2:H3BF5B8,H3BF5C0
-3BF5C0:lI105|H3BF684
-3BF684:lI109|H3BF748
-3BF748:lI97|H3BF80C
-3BF80C:lI103|H3BF8E0
-3BF8E0:lI101|H3BF9BC
-3BF9BC:lI47|H3BFA90
-3BFA90:lI112|H3BFB64
-3BFB64:lI110|H3BFC28
-3BFC28:lI103|N
-3BF5B8:lI112|H3BF67C
-3BF67C:lI110|H3BF740
-3BF740:lI103|N
-3BF510:lH3BF5C8|H3BF5D4
-3BF5C8:t2:H3BF68C,H3BF694
-3BF694:lI105|H3BF758
-3BF758:lI109|H3BF81C
-3BF81C:lI97|H3BF8F0
-3BF8F0:lI103|H3BF9C4
-3BF9C4:lI101|H3BFA98
-3BFA98:lI47|H3BFB6C
-3BFB6C:lI106|H3BFC30
-3BFC30:lI112|H3BFCEC
-3BFCEC:lI101|H3BFDB0
-3BFDB0:lI103|N
-3BF68C:lI106|H3BF750
-3BF750:lI112|H3BF814
-3BF814:lI101|H3BF8E8
-3BF8E8:lI103|N
-3BF5D4:lH3BF69C|H3BF6A8
-3BF69C:t2:H3BF760,H3BF768
-3BF768:lI105|H3BF82C
-3BF82C:lI109|H3BF900
-3BF900:lI97|H3BF9CC
-3BF9CC:lI103|H3BFAA0
-3BFAA0:lI101|H3BFB74
-3BFB74:lI47|H3BFC38
-3BFC38:lI106|H3BFCF4
-3BFCF4:lI112|H3BFDB8
-3BFDB8:lI101|H3BFE6C
-3BFE6C:lI103|N
-3BF760:lI106|H3BF824
-3BF824:lI112|H3BF8F8
-3BF8F8:lI103|N
-3BF6A8:lH3BF770|H3BF77C
-3BF770:t2:H3BF834,H3BF83C
-3BF83C:lI105|H3BF910
-3BF910:lI109|H3BF9DC
-3BF9DC:lI97|H3BFAA8
-3BFAA8:lI103|H3BFB7C
-3BFB7C:lI101|H3BFC40
-3BFC40:lI47|H3BFCFC
-3BFCFC:lI106|H3BFDC0
-3BFDC0:lI112|H3BFE74
-3BFE74:lI101|H3BFF18
-3BFF18:lI103|N
-3BF834:lI106|H3BF908
-3BF908:lI112|H3BF9D4
-3BF9D4:lI101|N
-3BF77C:lH3BF844|H3BF850
-3BF844:t2:H3BF918,H3BF920
-3BF920:lI105|H3BF9EC
-3BF9EC:lI109|H3BFAB8
-3BFAB8:lI97|H3BFB84
-3BFB84:lI103|H3BFC48
-3BFC48:lI101|H3BFD04
-3BFD04:lI47|H3BFDC8
-3BFDC8:lI105|H3BFE7C
-3BFE7C:lI101|H3BFF20
-3BFF20:lI102|N
-3BF918:lI105|H3BF9E4
-3BF9E4:lI101|H3BFAB0
-3BFAB0:lI102|N
-3BF850:lH3BF928|H3BF934
-3BF928:t2:H3BF9F4,H3BF9FC
-3BF9FC:lI105|H3BFAC8
-3BFAC8:lI109|H3BFB94
-3BFB94:lI97|H3BFC50
-3BFC50:lI103|H3BFD0C
-3BFD0C:lI101|H3BFDD0
-3BFDD0:lI47|H3BFE84
-3BFE84:lI103|H3BFF28
-3BFF28:lI105|H3BFFCC
-3BFFCC:lI102|N
-3BF9F4:lI103|H3BFAC0
-3BFAC0:lI105|H3BFB8C
-3BFB8C:lI102|N
-3BF934:lH3BFA04|H3BFA10
-3BFA04:t2:H3BFAD0,H3BFAD8
-3BFAD8:lI99|H3BFBA4
-3BFBA4:lI104|H3BFC60
-3BFC60:lI101|H3BFD14
-3BFD14:lI109|H3BFDD8
-3BFDD8:lI105|H3BFE8C
-3BFE8C:lI99|H3BFF30
-3BFF30:lI97|H3BFFD4
-3BFFD4:lI108|H3C0078
-3C0078:lI47|H3C011C
-3C011C:lI120|H3C01C0
-3C01C0:lI45|H3C0274
-3C0274:lI112|H3C0320
-3C0320:lI100|H3C03CC
-3C03CC:lI98|N
-3BFAD0:lI112|H3BFB9C
-3BFB9C:lI100|H3BFC58
-3BFC58:lI98|N
-3BFA10:lH3BFAE0|H3BFAEC
-3BFAE0:t2:H3BFBAC,H3BFBB4
-3BFBB4:lI99|H3BFC70
-3BFC70:lI104|H3BFD24
-3BFD24:lI101|H3BFDE0
-3BFDE0:lI109|H3BFE94
-3BFE94:lI105|H3BFF38
-3BFF38:lI99|H3BFFDC
-3BFFDC:lI97|H3C0080
-3C0080:lI108|H3C0124
-3C0124:lI47|H3C01C8
-3C01C8:lI120|H3C027C
-3C027C:lI45|H3C0328
-3C0328:lI112|H3C03D4
-3C03D4:lI100|H3C0460
-3C0460:lI98|N
-3BFBAC:lI120|H3BFC68
-3BFC68:lI121|H3BFD1C
-3BFD1C:lI122|N
-3BFAEC:lH3BFBBC|H3BFBC8
-3BFBBC:t2:H3BFC78,H3BFC80
-3BFC80:lI97|H3BFD34
-3BFD34:lI117|H3BFDF0
-3BFDF0:lI100|H3BFE9C
-3BFE9C:lI105|H3BFF40
-3BFF40:lI111|H3BFFE4
-3BFFE4:lI47|H3C0088
-3C0088:lI120|H3C012C
-3C012C:lI45|H3C01D0
-3C01D0:lI119|H3C0284
-3C0284:lI97|H3C0330
-3C0330:lI118|N
-3BFC78:lI119|H3BFD2C
-3BFD2C:lI97|H3BFDE8
-3BFDE8:lI118|N
-3BFBC8:lH3BFC88|H3BFC94
-3BFC88:t2:H3BFD3C,H3BFD44
-3BFD44:lI97|H3BFE00
-3BFE00:lI117|H3BFEA4
-3BFEA4:lI100|H3BFF48
-3BFF48:lI105|H3BFFEC
-3BFFEC:lI111|H3C0090
-3C0090:lI47|H3C0134
-3C0134:lI120|H3C01D8
-3C01D8:lI45|H3C028C
-3C028C:lI114|H3C0338
-3C0338:lI101|H3C03DC
-3C03DC:lI97|H3C0468
-3C0468:lI108|H3C04FC
-3C04FC:lI97|H3C0598
-3C0598:lI117|H3C063C
-3C063C:lI100|H3C06E8
-3C06E8:lI105|H3C0794
-3C0794:lI111|N
-3BFD3C:lI114|H3BFDF8
-3BFDF8:lI97|N
-3BFC94:lH3BFD4C|H3BFD58
-3BFD4C:t2:H3BFE08,H3BFE10
-3BFE10:lI97|H3BFEB4
-3BFEB4:lI117|H3BFF58
-3BFF58:lI100|H3BFFF4
-3BFFF4:lI105|H3C0098
-3C0098:lI111|H3C013C
-3C013C:lI47|H3C01E0
-3C01E0:lI120|H3C0294
-3C0294:lI45|H3C0340
-3C0340:lI112|H3C03E4
-3C03E4:lI110|H3C0470
-3C0470:lI45|H3C0504
-3C0504:lI114|H3C05A0
-3C05A0:lI101|H3C0644
-3C0644:lI97|H3C06F0
-3C06F0:lI108|H3C079C
-3C079C:lI97|H3C0838
-3C0838:lI117|H3C08C4
-3C08C4:lI100|H3C0958
-3C0958:lI105|H3C09EC
-3C09EC:lI111|H3C0A88
-3C0A88:lI45|H3C0B2C
-3C0B2C:lI112|H3C0BD0
-3C0BD0:lI108|H3C0C84
-3C0C84:lI117|H3C0D38
-3C0D38:lI103|H3C0DEC
-3C0DEC:lI105|H3C0EA0
-3C0EA0:lI110|N
-3BFE08:lI114|H3BFEAC
-3BFEAC:lI112|H3BFF50
-3BFF50:lI109|N
-3BFD58:lH3BFE18|H3BFE24
-3BFE18:t2:H3BFEBC,H3BFEC4
-3BFEC4:lI97|H3BFF68
-3BFF68:lI117|H3C0004
-3C0004:lI100|H3C00A0
-3C00A0:lI105|H3C0144
-3C0144:lI111|H3C01E8
-3C01E8:lI47|H3C029C
-3C029C:lI120|H3C0348
-3C0348:lI45|H3C03EC
-3C03EC:lI112|H3C0478
-3C0478:lI110|H3C050C
-3C050C:lI45|H3C05A8
-3C05A8:lI114|H3C064C
-3C064C:lI101|H3C06F8
-3C06F8:lI97|H3C07A4
-3C07A4:lI108|H3C0840
-3C0840:lI97|H3C08CC
-3C08CC:lI117|H3C0960
-3C0960:lI100|H3C09F4
-3C09F4:lI105|H3C0A90
-3C0A90:lI111|N
-3BFEBC:lI114|H3BFF60
-3BFF60:lI97|H3BFFFC
-3BFFFC:lI109|N
-3BFE24:lH3BFECC|H3BFED8
-3BFECC:t2:H3BFF70,H3BFF78
-3BFF78:lI97|H3C0014
-3C0014:lI117|H3C00B0
-3C00B0:lI100|H3C014C
-3C014C:lI105|H3C01F0
-3C01F0:lI111|H3C02A4
-3C02A4:lI47|H3C0350
-3C0350:lI120|H3C03F4
-3C03F4:lI45|H3C0480
-3C0480:lI97|H3C0514
-3C0514:lI105|H3C05B0
-3C05B0:lI102|H3C0654
-3C0654:lI102|N
-3BFF70:lI97|H3C000C
-3C000C:lI105|H3C00A8
-3C00A8:lI102|N
-3BFED8:lH3BFF80|H3BFF8C
-3BFF80:t2:H3C001C,H3C0024
-3C0024:lI97|H3C00C0
-3C00C0:lI117|H3C015C
-3C015C:lI100|H3C0200
-3C0200:lI105|H3C02AC
-3C02AC:lI111|H3C0358
-3C0358:lI47|H3C03FC
-3C03FC:lI120|H3C0488
-3C0488:lI45|H3C051C
-3C051C:lI97|H3C05B8
-3C05B8:lI105|H3C065C
-3C065C:lI102|H3C0700
-3C0700:lI102|N
-3C001C:lI97|H3C00B8
-3C00B8:lI105|H3C0154
-3C0154:lI102|H3C01F8
-3C01F8:lI102|N
-3BFF8C:lH3C002C|H3C0038
-3C002C:t2:H3C00C8,H3C00D0
-3C00D0:lI97|H3C016C
-3C016C:lI117|H3C0210
-3C0210:lI100|H3C02BC
-3C02BC:lI105|H3C0360
-3C0360:lI111|H3C0404
-3C0404:lI47|H3C0490
-3C0490:lI120|H3C0524
-3C0524:lI45|H3C05C0
-3C05C0:lI97|H3C0664
-3C0664:lI105|H3C0708
-3C0708:lI102|H3C07AC
-3C07AC:lI102|N
-3C00C8:lI97|H3C0164
-3C0164:lI105|H3C0208
-3C0208:lI102|H3C02B4
-3C02B4:lI99|N
-3C0038:lH3C00D8|H3C00E4
-3C00D8:t2:H3C0174,H3C017C
-3C017C:lI97|H3C0220
-3C0220:lI117|H3C02CC
-3C02CC:lI100|H3C0370
-3C0370:lI105|H3C040C
-3C040C:lI111|H3C0498
-3C0498:lI47|H3C052C
-3C052C:lI109|H3C05C8
-3C05C8:lI112|H3C066C
-3C066C:lI101|H3C0710
-3C0710:lI103|N
-3C0174:lI109|H3C0218
-3C0218:lI112|H3C02C4
-3C02C4:lI103|H3C0368
-3C0368:lI97|N
-3C00E4:lH3C0184|H3C0190
-3C0184:t2:H3C0228,H3C0230
-3C0230:lI97|H3C02DC
-3C02DC:lI117|H3C0380
-3C0380:lI100|H3C0414
-3C0414:lI105|H3C04A0
-3C04A0:lI111|H3C0534
-3C0534:lI47|H3C05D0
-3C05D0:lI109|H3C0674
-3C0674:lI112|H3C0718
-3C0718:lI101|H3C07B4
-3C07B4:lI103|N
-3C0228:lI109|H3C02D4
-3C02D4:lI112|H3C0378
-3C0378:lI50|N
-3C0190:lH3C0238|H3C0244
-3C0238:t2:H3C02E4,H3C02EC
-3C02EC:lI97|H3C0390
-3C0390:lI117|H3C041C
-3C041C:lI100|H3C04A8
-3C04A8:lI105|H3C053C
-3C053C:lI111|H3C05D8
-3C05D8:lI47|H3C067C
-3C067C:lI98|H3C0720
-3C0720:lI97|H3C07BC
-3C07BC:lI115|H3C0848
-3C0848:lI105|H3C08D4
-3C08D4:lI99|N
-3C02E4:lI97|H3C0388
-3C0388:lI117|N
-3C0244:lH3C02F4|H3C0300
-3C02F4:t2:H3C0398,H3C03A0
-3C03A0:lI97|H3C042C
-3C042C:lI117|H3C04B8
-3C04B8:lI100|H3C0544
-3C0544:lI105|H3C05E0
-3C05E0:lI111|H3C0684
-3C0684:lI47|H3C0728
-3C0728:lI98|H3C07C4
-3C07C4:lI97|H3C0850
-3C0850:lI115|H3C08DC
-3C08DC:lI105|H3C0968
-3C0968:lI99|N
-3C0398:lI115|H3C0424
-3C0424:lI110|H3C04B0
-3C04B0:lI100|N
-3C0300:lH3C03A8|H3C03B4
-3C03A8:t2:H3C0434,H3C043C
-3C043C:lI97|H3C04C8
-3C04C8:lI112|H3C0554
-3C0554:lI112|H3C05E8
-3C05E8:lI108|H3C068C
-3C068C:lI105|H3C0730
-3C0730:lI99|H3C07CC
-3C07CC:lI97|H3C0858
-3C0858:lI116|H3C08E4
-3C08E4:lI105|H3C0970
-3C0970:lI111|H3C09FC
-3C09FC:lI110|H3C0A98
-3C0A98:lI47|H3C0B34
-3C0B34:lI122|H3C0BD8
-3C0BD8:lI105|H3C0C8C
-3C0C8C:lI112|N
-3C0434:lI122|H3C04C0
-3C04C0:lI105|H3C054C
-3C054C:lI112|N
-3C03B4:lH3C0444|H3C0450
-3C0444:t2:H3C04D0,H3C04D8
-3C04D8:lI97|H3C0564
-3C0564:lI112|H3C05F8
-3C05F8:lI112|H3C0694
-3C0694:lI108|H3C0738
-3C0738:lI105|H3C07D4
-3C07D4:lI99|H3C0860
-3C0860:lI97|H3C08EC
-3C08EC:lI116|H3C0978
-3C0978:lI105|H3C0A04
-3C0A04:lI111|H3C0AA0
-3C0AA0:lI110|H3C0B3C
-3C0B3C:lI47|H3C0BE0
-3C0BE0:lI120|H3C0C94
-3C0C94:lI45|H3C0D40
-3C0D40:lI119|H3C0DF4
-3C0DF4:lI97|H3C0EA8
-3C0EA8:lI105|H3C0F64
-3C0F64:lI115|H3C1030
-3C1030:lI45|H3C1104
-3C1104:lI115|H3C11D8
-3C11D8:lI111|H3C12A4
-3C12A4:lI117|H3C1378
-3C1378:lI114|H3C1454
-3C1454:lI99|H3C1538
-3C1538:lI101|N
-3C04D0:lI115|H3C055C
-3C055C:lI114|H3C05F0
-3C05F0:lI99|N
-3C0450:lH3C04E0|H3C04EC
-3C04E0:t2:H3C056C,H3C0574
-3C0574:lI97|H3C0608
-3C0608:lI112|H3C06A4
-3C06A4:lI112|H3C0748
-3C0748:lI108|H3C07E4
-3C07E4:lI105|H3C0868
-3C0868:lI99|H3C08F4
-3C08F4:lI97|H3C0980
-3C0980:lI116|H3C0A0C
-3C0A0C:lI105|H3C0AA8
-3C0AA8:lI111|H3C0B44
-3C0B44:lI110|H3C0BE8
-3C0BE8:lI47|H3C0C9C
-3C0C9C:lI120|H3C0D48
-3C0D48:lI45|H3C0DFC
-3C0DFC:lI117|H3C0EB0
-3C0EB0:lI115|H3C0F6C
-3C0F6C:lI116|H3C1038
-3C1038:lI97|H3C110C
-3C110C:lI114|N
-3C056C:lI117|H3C0600
-3C0600:lI115|H3C069C
-3C069C:lI116|H3C0740
-3C0740:lI97|H3C07DC
-3C07DC:lI114|N
-3C04EC:lH3C057C|H3C0588
-3C057C:t2:H3C0610,H3C0618
-3C0618:lI97|H3C06B4
-3C06B4:lI112|H3C0750
-3C0750:lI112|H3C07EC
-3C07EC:lI108|H3C0870
-3C0870:lI105|H3C08FC
-3C08FC:lI99|H3C0988
-3C0988:lI97|H3C0A14
-3C0A14:lI116|H3C0AB0
-3C0AB0:lI105|H3C0B4C
-3C0B4C:lI111|H3C0BF0
-3C0BF0:lI110|H3C0CA4
-3C0CA4:lI47|H3C0D50
-3C0D50:lI120|H3C0E04
-3C0E04:lI45|H3C0EB8
-3C0EB8:lI116|H3C0F74
-3C0F74:lI114|H3C1040
-3C1040:lI111|H3C1114
-3C1114:lI102|H3C11E0
-3C11E0:lI102|H3C12AC
-3C12AC:lI45|H3C1380
-3C1380:lI109|H3C145C
-3C145C:lI115|N
-3C0610:lI109|H3C06AC
-3C06AC:lI115|N
-3C0588:lH3C0620|H3C062C
-3C0620:t2:H3C06BC,H3C06C4
-3C06C4:lI97|H3C0760
-3C0760:lI112|H3C07F4
-3C07F4:lI112|H3C0878
-3C0878:lI108|H3C0904
-3C0904:lI105|H3C0990
-3C0990:lI99|H3C0A1C
-3C0A1C:lI97|H3C0AB8
-3C0AB8:lI116|H3C0B54
-3C0B54:lI105|H3C0BF8
-3C0BF8:lI111|H3C0CAC
-3C0CAC:lI110|H3C0D58
-3C0D58:lI47|H3C0E0C
-3C0E0C:lI120|H3C0EC0
-3C0EC0:lI45|H3C0F7C
-3C0F7C:lI116|H3C1048
-3C1048:lI114|H3C111C
-3C111C:lI111|H3C11E8
-3C11E8:lI102|H3C12B4
-3C12B4:lI102|H3C1388
-3C1388:lI45|H3C1464
-3C1464:lI109|H3C1540
-3C1540:lI101|N
-3C06BC:lI109|H3C0758
-3C0758:lI101|N
-3C062C:lH3C06CC|H3C06D8
-3C06CC:t2:H3C0768,H3C0770
-3C0770:lI97|H3C0804
-3C0804:lI112|H3C0888
-3C0888:lI112|H3C090C
-3C090C:lI108|H3C0998
-3C0998:lI105|H3C0A24
-3C0A24:lI99|H3C0AC0
-3C0AC0:lI97|H3C0B5C
-3C0B5C:lI116|H3C0C00
-3C0C00:lI105|H3C0CB4
-3C0CB4:lI111|H3C0D60
-3C0D60:lI110|H3C0E14
-3C0E14:lI47|H3C0EC8
-3C0EC8:lI120|H3C0F84
-3C0F84:lI45|H3C1050
-3C1050:lI116|H3C1124
-3C1124:lI114|H3C11F0
-3C11F0:lI111|H3C12BC
-3C12BC:lI102|H3C1390
-3C1390:lI102|H3C146C
-3C146C:lI45|H3C1548
-3C1548:lI109|H3C161C
-3C161C:lI97|H3C16F0
-3C16F0:lI110|N
-3C0768:lI109|H3C07FC
-3C07FC:lI97|H3C0880
-3C0880:lI110|N
-3C06D8:lH3C0778|H3C0784
-3C0778:t2:H3C080C,H3C0814
-3C0814:lI97|H3C0890
-3C0890:lI112|H3C0914
-3C0914:lI112|H3C09A0
-3C09A0:lI108|H3C0A2C
-3C0A2C:lI105|H3C0AC8
-3C0AC8:lI99|H3C0B64
-3C0B64:lI97|H3C0C08
-3C0C08:lI116|H3C0CBC
-3C0CBC:lI105|H3C0D68
-3C0D68:lI111|H3C0E1C
-3C0E1C:lI110|H3C0ED0
-3C0ED0:lI47|H3C0F8C
-3C0F8C:lI120|H3C1058
-3C1058:lI45|H3C112C
-3C112C:lI116|H3C11F8
-3C11F8:lI114|H3C12C4
-3C12C4:lI111|H3C1398
-3C1398:lI102|H3C1474
-3C1474:lI102|N
-3C080C:lI116|N
-3C0784:lH3C081C|H3C0828
-3C081C:t2:H3C0898,H3C08A0
-3C08A0:lI97|H3C0924
-3C0924:lI112|H3C09A8
-3C09A8:lI112|H3C0A34
-3C0A34:lI108|H3C0AD0
-3C0AD0:lI105|H3C0B6C
-3C0B6C:lI99|H3C0C10
-3C0C10:lI97|H3C0CC4
-3C0CC4:lI116|H3C0D70
-3C0D70:lI105|H3C0E24
-3C0E24:lI111|H3C0ED8
-3C0ED8:lI110|H3C0F94
-3C0F94:lI47|H3C1060
-3C1060:lI120|H3C1134
-3C1134:lI45|H3C1200
-3C1200:lI116|H3C12CC
-3C12CC:lI114|H3C13A0
-3C13A0:lI111|H3C147C
-3C147C:lI102|H3C1550
-3C1550:lI102|N
-3C0898:lI116|H3C091C
-3C091C:lI114|N
-3C0828:lH3C08A8|H3C08B4
-3C08A8:t2:H3C092C,H3C0934
-3C0934:lI97|H3C09B8
-3C09B8:lI112|H3C0A44
-3C0A44:lI112|H3C0AE0
-3C0AE0:lI108|H3C0B74
-3C0B74:lI105|H3C0C18
-3C0C18:lI99|H3C0CCC
-3C0CCC:lI97|H3C0D78
-3C0D78:lI116|H3C0E2C
-3C0E2C:lI105|H3C0EE0
-3C0EE0:lI111|H3C0F9C
-3C0F9C:lI110|H3C1068
-3C1068:lI47|H3C113C
-3C113C:lI120|H3C1208
-3C1208:lI45|H3C12D4
-3C12D4:lI116|H3C13A8
-3C13A8:lI114|H3C1484
-3C1484:lI111|H3C1558
-3C1558:lI102|H3C1624
-3C1624:lI102|N
-3C092C:lI114|H3C09B0
-3C09B0:lI111|H3C0A3C
-3C0A3C:lI102|H3C0AD8
-3C0AD8:lI102|N
-3C08B4:lH3C093C|H3C0948
-3C093C:t2:H3C09C0,H3C09C8
-3C09C8:lI97|H3C0A54
-3C0A54:lI112|H3C0AF0
-3C0AF0:lI112|H3C0B84
-3C0B84:lI108|H3C0C28
-3C0C28:lI105|H3C0CDC
-3C0CDC:lI99|H3C0D88
-3C0D88:lI97|H3C0E34
-3C0E34:lI116|H3C0EE8
-3C0EE8:lI105|H3C0FA4
-3C0FA4:lI111|H3C1070
-3C1070:lI110|H3C1144
-3C1144:lI47|H3C1210
-3C1210:lI120|H3C12DC
-3C12DC:lI45|H3C13B0
-3C13B0:lI116|H3C148C
-3C148C:lI101|H3C1560
-3C1560:lI120|H3C162C
-3C162C:lI105|H3C16F8
-3C16F8:lI110|H3C17BC
-3C17BC:lI102|H3C1880
-3C1880:lI111|N
-3C09C0:lI116|H3C0A4C
-3C0A4C:lI101|H3C0AE8
-3C0AE8:lI120|H3C0B7C
-3C0B7C:lI105|H3C0C20
-3C0C20:lI110|H3C0CD4
-3C0CD4:lI102|H3C0D80
-3C0D80:lI111|N
-3C0948:lH3C09D0|H3C09DC
-3C09D0:t2:H3C0A5C,H3C0A64
-3C0A64:lI97|H3C0B00
-3C0B00:lI112|H3C0B94
-3C0B94:lI112|H3C0C38
-3C0C38:lI108|H3C0CE4
-3C0CE4:lI105|H3C0D90
-3C0D90:lI99|H3C0E3C
-3C0E3C:lI97|H3C0EF0
-3C0EF0:lI116|H3C0FAC
-3C0FAC:lI105|H3C1078
-3C1078:lI111|H3C114C
-3C114C:lI110|H3C1218
-3C1218:lI47|H3C12E4
-3C12E4:lI120|H3C13B8
-3C13B8:lI45|H3C1494
-3C1494:lI116|H3C1568
-3C1568:lI101|H3C1634
-3C1634:lI120|H3C1700
-3C1700:lI105|H3C17C4
-3C17C4:lI110|H3C1888
-3C1888:lI102|H3C1944
-3C1944:lI111|N
-3C0A5C:lI116|H3C0AF8
-3C0AF8:lI101|H3C0B8C
-3C0B8C:lI120|H3C0C30
-3C0C30:lI105|N
-3C09DC:lH3C0A6C|H3C0A78
-3C0A6C:t2:H3C0B08,H3C0B10
-3C0B10:lI97|H3C0BA4
-3C0BA4:lI112|H3C0C48
-3C0C48:lI112|H3C0CEC
-3C0CEC:lI108|H3C0D98
-3C0D98:lI105|H3C0E44
-3C0E44:lI99|H3C0EF8
-3C0EF8:lI97|H3C0FB4
-3C0FB4:lI116|H3C1080
-3C1080:lI105|H3C1154
-3C1154:lI111|H3C1220
-3C1220:lI110|H3C12EC
-3C12EC:lI47|H3C13C0
-3C13C0:lI120|H3C149C
-3C149C:lI45|H3C1570
-3C1570:lI116|H3C163C
-3C163C:lI101|H3C1708
-3C1708:lI120|N
-3C0B08:lI116|H3C0B9C
-3C0B9C:lI101|H3C0C40
-3C0C40:lI120|N
-3C0A78:lH3C0B18|H3C0B24
-3C0B18:t2:H3C0BAC,H3C0BB4
-3C0BB4:lI97|H3C0C58
-3C0C58:lI112|H3C0CFC
-3C0CFC:lI112|H3C0DA0
-3C0DA0:lI108|H3C0E4C
-3C0E4C:lI105|H3C0F00
-3C0F00:lI99|H3C0FBC
-3C0FBC:lI97|H3C1088
-3C1088:lI116|H3C115C
-3C115C:lI105|H3C1228
-3C1228:lI111|H3C12F4
-3C12F4:lI110|H3C13C8
-3C13C8:lI47|H3C14A4
-3C14A4:lI120|H3C1578
-3C1578:lI45|H3C1644
-3C1644:lI116|H3C1710
-3C1710:lI99|H3C17CC
-3C17CC:lI108|N
-3C0BAC:lI116|H3C0C50
-3C0C50:lI99|H3C0CF4
-3C0CF4:lI108|N
-3C0B24:lH3C0BBC|H3C0BC8
-3C0BBC:t2:H3C0C60,H3C0C68
-3C0C68:lI97|H3C0D0C
-3C0D0C:lI112|H3C0DB0
-3C0DB0:lI112|H3C0E54
-3C0E54:lI108|H3C0F08
-3C0F08:lI105|H3C0FC4
-3C0FC4:lI99|H3C1090
-3C1090:lI97|H3C1164
-3C1164:lI116|H3C1230
-3C1230:lI105|H3C12FC
-3C12FC:lI111|H3C13D0
-3C13D0:lI110|H3C14AC
-3C14AC:lI47|H3C1580
-3C1580:lI120|H3C164C
-3C164C:lI45|H3C1718
-3C1718:lI116|H3C17D4
-3C17D4:lI97|H3C1890
-3C1890:lI114|N
-3C0C60:lI116|H3C0D04
-3C0D04:lI97|H3C0DA8
-3C0DA8:lI114|N
-3C0BC8:lH3C0C70|H3C0C7C
-3C0C70:t2:H3C0D14,H3C0D1C
-3C0D1C:lI97|H3C0DC0
-3C0DC0:lI112|H3C0E64
-3C0E64:lI112|H3C0F18
-3C0F18:lI108|H3C0FD4
-3C0FD4:lI105|H3C10A0
-3C10A0:lI99|H3C116C
-3C116C:lI97|H3C1238
-3C1238:lI116|H3C1304
-3C1304:lI105|H3C13D8
-3C13D8:lI111|H3C14B4
-3C14B4:lI110|H3C1588
-3C1588:lI47|H3C1654
-3C1654:lI120|H3C1720
-3C1720:lI45|H3C17DC
-3C17DC:lI115|H3C1898
-3C1898:lI118|H3C194C
-3C194C:lI52|H3C1A00
-3C1A00:lI99|H3C1AB4
-3C1AB4:lI114|H3C1B78
-3C1B78:lI99|N
-3C0D14:lI115|H3C0DB8
-3C0DB8:lI118|H3C0E5C
-3C0E5C:lI52|H3C0F10
-3C0F10:lI99|H3C0FCC
-3C0FCC:lI114|H3C1098
-3C1098:lI99|N
-3C0C7C:lH3C0D24|H3C0D30
-3C0D24:t2:H3C0DC8,H3C0DD0
-3C0DD0:lI97|H3C0E74
-3C0E74:lI112|H3C0F28
-3C0F28:lI112|H3C0FE4
-3C0FE4:lI108|H3C10B0
-3C10B0:lI105|H3C117C
-3C117C:lI99|H3C1248
-3C1248:lI97|H3C130C
-3C130C:lI116|H3C13E0
-3C13E0:lI105|H3C14BC
-3C14BC:lI111|H3C1590
-3C1590:lI110|H3C165C
-3C165C:lI47|H3C1728
-3C1728:lI120|H3C17E4
-3C17E4:lI45|H3C18A0
-3C18A0:lI115|H3C1954
-3C1954:lI118|H3C1A08
-3C1A08:lI52|H3C1ABC
-3C1ABC:lI99|H3C1B80
-3C1B80:lI112|H3C1C4C
-3C1C4C:lI105|H3C1D10
-3C1D10:lI111|N
-3C0DC8:lI115|H3C0E6C
-3C0E6C:lI118|H3C0F20
-3C0F20:lI52|H3C0FDC
-3C0FDC:lI99|H3C10A8
-3C10A8:lI112|H3C1174
-3C1174:lI105|H3C1240
-3C1240:lI111|N
-3C0D30:lH3C0DD8|H3C0DE4
-3C0DD8:t2:H3C0E7C,H3C0E84
-3C0E84:lI97|H3C0F38
-3C0F38:lI112|H3C0FF4
-3C0FF4:lI112|H3C10B8
-3C10B8:lI108|H3C1184
-3C1184:lI105|H3C1250
-3C1250:lI99|H3C1314
-3C1314:lI97|H3C13E8
-3C13E8:lI116|H3C14C4
-3C14C4:lI105|H3C1598
-3C1598:lI111|H3C1664
-3C1664:lI110|H3C1730
-3C1730:lI47|H3C17EC
-3C17EC:lI120|H3C18A8
-3C18A8:lI45|H3C195C
-3C195C:lI115|H3C1A10
-3C1A10:lI116|H3C1AC4
-3C1AC4:lI117|H3C1B88
-3C1B88:lI102|H3C1C54
-3C1C54:lI102|H3C1D18
-3C1D18:lI105|H3C1DD4
-3C1DD4:lI116|N
-3C0E7C:lI115|H3C0F30
-3C0F30:lI105|H3C0FEC
-3C0FEC:lI116|N
-3C0DE4:lH3C0E8C|H3C0E98
-3C0E8C:t2:H3C0F40,H3C0F48
-3C0F48:lI97|H3C1004
-3C1004:lI112|H3C10C8
-3C10C8:lI112|H3C1194
-3C1194:lI108|H3C1258
-3C1258:lI105|H3C131C
-3C131C:lI99|H3C13F0
-3C13F0:lI97|H3C14CC
-3C14CC:lI116|H3C15A0
-3C15A0:lI105|H3C166C
-3C166C:lI111|H3C1738
-3C1738:lI110|H3C17F4
-3C17F4:lI47|H3C18B0
-3C18B0:lI120|H3C1964
-3C1964:lI45|H3C1A18
-3C1A18:lI115|H3C1ACC
-3C1ACC:lI104|H3C1B90
-3C1B90:lI97|H3C1C5C
-3C1C5C:lI114|N
-3C0F40:lI115|H3C0FFC
-3C0FFC:lI104|H3C10C0
-3C10C0:lI97|H3C118C
-3C118C:lI114|N
-3C0E98:lH3C0F50|H3C0F5C
-3C0F50:t2:H3C100C,H3C1014
-3C1014:lI97|H3C10D8
-3C10D8:lI112|H3C119C
-3C119C:lI112|H3C1260
-3C1260:lI108|H3C1324
-3C1324:lI105|H3C13F8
-3C13F8:lI99|H3C14D4
-3C14D4:lI97|H3C15A8
-3C15A8:lI116|H3C1674
-3C1674:lI105|H3C1740
-3C1740:lI111|H3C17FC
-3C17FC:lI110|H3C18B8
-3C18B8:lI47|H3C196C
-3C196C:lI120|H3C1A20
-3C1A20:lI45|H3C1AD4
-3C1AD4:lI115|H3C1B98
-3C1B98:lI104|N
-3C100C:lI115|H3C10D0
-3C10D0:lI104|N
-3C0F5C:lH3C101C|H3C1028
-3C101C:t2:H3C10E0,H3C10E8
-3C10E8:lI97|H3C11AC
-3C11AC:lI112|H3C1268
-3C1268:lI112|H3C132C
-3C132C:lI108|H3C1400
-3C1400:lI105|H3C14DC
-3C14DC:lI99|H3C15B0
-3C15B0:lI97|H3C167C
-3C167C:lI116|H3C1748
-3C1748:lI105|H3C1804
-3C1804:lI111|H3C18C0
-3C18C0:lI110|H3C1974
-3C1974:lI47|H3C1A28
-3C1A28:lI120|H3C1ADC
-3C1ADC:lI45|H3C1BA0
-3C1BA0:lI110|H3C1C64
-3C1C64:lI101|H3C1D20
-3C1D20:lI116|H3C1DDC
-3C1DDC:lI99|H3C1E98
-3C1E98:lI100|H3C1F5C
-3C1F5C:lI102|N
-3C10E0:lI110|H3C11A4
-3C11A4:lI99|N
-3C1028:lH3C10F0|H3C10FC
-3C10F0:t2:H3C11B4,H3C11BC
-3C11BC:lI97|H3C1278
-3C1278:lI112|H3C133C
-3C133C:lI112|H3C1408
-3C1408:lI108|H3C14E4
-3C14E4:lI105|H3C15B8
-3C15B8:lI99|H3C1684
-3C1684:lI97|H3C1750
-3C1750:lI116|H3C180C
-3C180C:lI105|H3C18C8
-3C18C8:lI111|H3C197C
-3C197C:lI110|H3C1A30
-3C1A30:lI47|H3C1AE4
-3C1AE4:lI120|H3C1BA8
-3C1BA8:lI45|H3C1C6C
-3C1C6C:lI110|H3C1D28
-3C1D28:lI101|H3C1DE4
-3C1DE4:lI116|H3C1EA0
-3C1EA0:lI99|H3C1F64
-3C1F64:lI100|H3C2018
-3C2018:lI102|N
-3C11B4:lI99|H3C1270
-3C1270:lI100|H3C1334
-3C1334:lI102|N
-3C10FC:lH3C11C4|H3C11D0
-3C11C4:t2:H3C1280,H3C1288
-3C1288:lI97|H3C134C
-3C134C:lI112|H3C1418
-3C1418:lI112|H3C14EC
-3C14EC:lI108|H3C15C0
-3C15C0:lI105|H3C168C
-3C168C:lI99|H3C1758
-3C1758:lI97|H3C1814
-3C1814:lI116|H3C18D0
-3C18D0:lI105|H3C1984
-3C1984:lI111|H3C1A38
-3C1A38:lI110|H3C1AEC
-3C1AEC:lI47|H3C1BB0
-3C1BB0:lI120|H3C1C74
-3C1C74:lI45|H3C1D30
-3C1D30:lI109|H3C1DEC
-3C1DEC:lI105|H3C1EA8
-3C1EA8:lI102|N
-3C1280:lI109|H3C1344
-3C1344:lI105|H3C1410
-3C1410:lI102|N
-3C11D0:lH3C1290|H3C129C
-3C1290:t2:H3C1354,H3C135C
-3C135C:lI97|H3C1428
-3C1428:lI112|H3C14FC
-3C14FC:lI112|H3C15D0
-3C15D0:lI108|H3C169C
-3C169C:lI105|H3C1760
-3C1760:lI99|H3C181C
-3C181C:lI97|H3C18D8
-3C18D8:lI116|H3C198C
-3C198C:lI105|H3C1A40
-3C1A40:lI111|H3C1AF4
-3C1AF4:lI110|H3C1BB8
-3C1BB8:lI47|H3C1C7C
-3C1C7C:lI120|H3C1D38
-3C1D38:lI45|H3C1DF4
-3C1DF4:lI108|H3C1EB0
-3C1EB0:lI97|H3C1F6C
-3C1F6C:lI116|H3C2020
-3C2020:lI101|H3C20DC
-3C20DC:lI120|N
-3C1354:lI108|H3C1420
-3C1420:lI97|H3C14F4
-3C14F4:lI116|H3C15C8
-3C15C8:lI101|H3C1694
-3C1694:lI120|N
-3C129C:lH3C1364|H3C1370
-3C1364:t2:H3C1430,H3C1438
-3C1438:lI97|H3C150C
-3C150C:lI112|H3C15E0
-3C15E0:lI112|H3C16A4
-3C16A4:lI108|H3C1768
-3C1768:lI105|H3C1824
-3C1824:lI99|H3C18E0
-3C18E0:lI97|H3C1994
-3C1994:lI116|H3C1A48
-3C1A48:lI105|H3C1AFC
-3C1AFC:lI111|H3C1BC0
-3C1BC0:lI110|H3C1C84
-3C1C84:lI47|H3C1D40
-3C1D40:lI120|H3C1DFC
-3C1DFC:lI45|H3C1EB8
-3C1EB8:lI107|H3C1F74
-3C1F74:lI111|H3C2028
-3C2028:lI97|H3C20E4
-3C20E4:lI110|N
-3C1430:lI115|H3C1504
-3C1504:lI107|H3C15D8
-3C15D8:lI112|N
-3C1370:lH3C1440|H3C144C
-3C1440:t2:H3C1514,H3C151C
-3C151C:lI97|H3C15F0
-3C15F0:lI112|H3C16B4
-3C16B4:lI112|H3C1770
-3C1770:lI108|H3C182C
-3C182C:lI105|H3C18E8
-3C18E8:lI99|H3C199C
-3C199C:lI97|H3C1A50
-3C1A50:lI116|H3C1B04
-3C1B04:lI105|H3C1BC8
-3C1BC8:lI111|H3C1C8C
-3C1C8C:lI110|H3C1D48
-3C1D48:lI47|H3C1E04
-3C1E04:lI120|H3C1EC0
-3C1EC0:lI45|H3C1F7C
-3C1F7C:lI107|H3C2030
-3C2030:lI111|H3C20EC
-3C20EC:lI97|H3C21A0
-3C21A0:lI110|N
-3C1514:lI115|H3C15E8
-3C15E8:lI107|H3C16AC
-3C16AC:lI100|N
-3C144C:lH3C1524|H3C1530
-3C1524:t2:H3C15F8,H3C1600
-3C1600:lI97|H3C16C4
-3C16C4:lI112|H3C1780
-3C1780:lI112|H3C1834
-3C1834:lI108|H3C18F0
-3C18F0:lI105|H3C19A4
-3C19A4:lI99|H3C1A58
-3C1A58:lI97|H3C1B0C
-3C1B0C:lI116|H3C1BD0
-3C1BD0:lI105|H3C1C94
-3C1C94:lI111|H3C1D50
-3C1D50:lI110|H3C1E0C
-3C1E0C:lI47|H3C1EC8
-3C1EC8:lI120|H3C1F84
-3C1F84:lI45|H3C2038
-3C2038:lI107|H3C20F4
-3C20F4:lI111|H3C21A8
-3C21A8:lI97|H3C225C
-3C225C:lI110|N
-3C15F8:lI115|H3C16BC
-3C16BC:lI107|H3C1778
-3C1778:lI116|N
-3C1530:lH3C1608|H3C1614
-3C1608:t2:H3C16CC,H3C16D4
-3C16D4:lI97|H3C1790
-3C1790:lI112|H3C1844
-3C1844:lI112|H3C18F8
-3C18F8:lI108|H3C19AC
-3C19AC:lI105|H3C1A60
-3C1A60:lI99|H3C1B14
-3C1B14:lI97|H3C1BD8
-3C1BD8:lI116|H3C1C9C
-3C1C9C:lI105|H3C1D58
-3C1D58:lI111|H3C1E14
-3C1E14:lI110|H3C1ED0
-3C1ED0:lI47|H3C1F8C
-3C1F8C:lI120|H3C2040
-3C2040:lI45|H3C20FC
-3C20FC:lI107|H3C21B0
-3C21B0:lI111|H3C2264
-3C2264:lI97|H3C2320
-3C2320:lI110|N
-3C16CC:lI115|H3C1788
-3C1788:lI107|H3C183C
-3C183C:lI109|N
-3C1614:lH3C16DC|H3C16E8
-3C16DC:t2:H3C1798,H3C17A0
-3C17A0:lI97|H3C1854
-3C1854:lI112|H3C1908
-3C1908:lI112|H3C19B4
-3C19B4:lI108|H3C1A68
-3C1A68:lI105|H3C1B1C
-3C1B1C:lI99|H3C1BE0
-3C1BE0:lI97|H3C1CA4
-3C1CA4:lI116|H3C1D60
-3C1D60:lI105|H3C1E1C
-3C1E1C:lI111|H3C1ED8
-3C1ED8:lI110|H3C1F94
-3C1F94:lI47|H3C2048
-3C2048:lI120|H3C2104
-3C2104:lI45|H3C21B8
-3C21B8:lI104|H3C226C
-3C226C:lI116|H3C2328
-3C2328:lI116|H3C23E4
-3C23E4:lI112|H3C2498
-3C2498:lI100|H3C2554
-3C2554:lI45|H3C2610
-3C2610:lI99|H3C26D4
-3C26D4:lI103|H3C2790
-3C2790:lI105|N
-3C1798:lI99|H3C184C
-3C184C:lI103|H3C1900
-3C1900:lI105|N
-3C16E8:lH3C17A8|H3C17B4
-3C17A8:t2:H3C185C,H3C1864
-3C1864:lI97|H3C1918
-3C1918:lI112|H3C19C4
-3C19C4:lI112|H3C1A70
-3C1A70:lI108|H3C1B24
-3C1B24:lI105|H3C1BE8
-3C1BE8:lI99|H3C1CAC
-3C1CAC:lI97|H3C1D68
-3C1D68:lI116|H3C1E24
-3C1E24:lI105|H3C1EE0
-3C1EE0:lI111|H3C1F9C
-3C1F9C:lI110|H3C2050
-3C2050:lI47|H3C210C
-3C210C:lI120|H3C21C0
-3C21C0:lI45|H3C2274
-3C2274:lI104|H3C2330
-3C2330:lI100|H3C23EC
-3C23EC:lI102|N
-3C185C:lI104|H3C1910
-3C1910:lI100|H3C19BC
-3C19BC:lI102|N
-3C17B4:lH3C186C|H3C1878
-3C186C:t2:H3C1920,H3C1928
-3C1928:lI97|H3C19D4
-3C19D4:lI112|H3C1A78
-3C1A78:lI112|H3C1B2C
-3C1B2C:lI108|H3C1BF0
-3C1BF0:lI105|H3C1CB4
-3C1CB4:lI99|H3C1D70
-3C1D70:lI97|H3C1E2C
-3C1E2C:lI116|H3C1EE8
-3C1EE8:lI105|H3C1FA4
-3C1FA4:lI111|H3C2058
-3C2058:lI110|H3C2114
-3C2114:lI47|H3C21C8
-3C21C8:lI120|H3C227C
-3C227C:lI45|H3C2338
-3C2338:lI103|H3C23F4
-3C23F4:lI122|H3C24A0
-3C24A0:lI105|H3C255C
-3C255C:lI112|N
-3C1920:lI103|H3C19CC
-3C19CC:lI122|N
-3C1878:lH3C1930|H3C193C
-3C1930:t2:H3C19DC,H3C19E4
-3C19E4:lI97|H3C1A88
-3C1A88:lI112|H3C1B3C
-3C1B3C:lI112|H3C1C00
-3C1C00:lI108|H3C1CBC
-3C1CBC:lI105|H3C1D78
-3C1D78:lI99|H3C1E34
-3C1E34:lI97|H3C1EF0
-3C1EF0:lI116|H3C1FAC
-3C1FAC:lI105|H3C2060
-3C2060:lI111|H3C211C
-3C211C:lI110|H3C21D0
-3C21D0:lI47|H3C2284
-3C2284:lI120|H3C2340
-3C2340:lI45|H3C23FC
-3C23FC:lI103|H3C24A8
-3C24A8:lI116|H3C2564
-3C2564:lI97|H3C2618
-3C2618:lI114|N
-3C19DC:lI103|H3C1A80
-3C1A80:lI116|H3C1B34
-3C1B34:lI97|H3C1BF8
-3C1BF8:lI114|N
-3C193C:lH3C19EC|H3C19F8
-3C19EC:t2:H3C1A90,H3C1A98
-3C1A98:lI97|H3C1B4C
-3C1B4C:lI112|H3C1C10
-3C1C10:lI112|H3C1CC4
-3C1CC4:lI108|H3C1D80
-3C1D80:lI105|H3C1E3C
-3C1E3C:lI99|H3C1EF8
-3C1EF8:lI97|H3C1FB4
-3C1FB4:lI116|H3C2068
-3C2068:lI105|H3C2124
-3C2124:lI111|H3C21D8
-3C21D8:lI110|H3C228C
-3C228C:lI47|H3C2348
-3C2348:lI120|H3C2404
-3C2404:lI45|H3C24B0
-3C24B0:lI100|H3C256C
-3C256C:lI118|H3C2620
-3C2620:lI105|N
-3C1A90:lI100|H3C1B44
-3C1B44:lI118|H3C1C08
-3C1C08:lI105|N
-3C19F8:lH3C1AA0|H3C1AAC
-3C1AA0:t2:H3C1B54,H3C1B5C
-3C1B5C:lI97|H3C1C20
-3C1C20:lI112|H3C1CD4
-3C1CD4:lI112|H3C1D88
-3C1D88:lI108|H3C1E44
-3C1E44:lI105|H3C1F00
-3C1F00:lI99|H3C1FBC
-3C1FBC:lI97|H3C2070
-3C2070:lI116|H3C212C
-3C212C:lI105|H3C21E0
-3C21E0:lI111|H3C2294
-3C2294:lI110|H3C2350
-3C2350:lI47|H3C240C
-3C240C:lI120|H3C24B8
-3C24B8:lI45|H3C2574
-3C2574:lI100|H3C2628
-3C2628:lI105|H3C26DC
-3C26DC:lI114|H3C2798
-3C2798:lI101|H3C2854
-3C2854:lI99|H3C2918
-3C2918:lI116|H3C29E4
-3C29E4:lI111|H3C2AB0
-3C2AB0:lI114|N
-3C1B54:lI100|H3C1C18
-3C1C18:lI99|H3C1CCC
-3C1CCC:lI114|N
-3C1AAC:lH3C1B64|H3C1B70
-3C1B64:t2:H3C1C28,H3C1C30
-3C1C30:lI97|H3C1CE4
-3C1CE4:lI112|H3C1D98
-3C1D98:lI112|H3C1E4C
-3C1E4C:lI108|H3C1F08
-3C1F08:lI105|H3C1FC4
-3C1FC4:lI99|H3C2078
-3C2078:lI97|H3C2134
-3C2134:lI116|H3C21E8
-3C21E8:lI105|H3C229C
-3C229C:lI111|H3C2358
-3C2358:lI110|H3C2414
-3C2414:lI47|H3C24C0
-3C24C0:lI120|H3C257C
-3C257C:lI45|H3C2630
-3C2630:lI100|H3C26E4
-3C26E4:lI105|H3C27A0
-3C27A0:lI114|H3C285C
-3C285C:lI101|H3C2920
-3C2920:lI99|H3C29EC
-3C29EC:lI116|H3C2AB8
-3C2AB8:lI111|H3C2B84
-3C2B84:lI114|N
-3C1C28:lI100|H3C1CDC
-3C1CDC:lI105|H3C1D90
-3C1D90:lI114|N
-3C1B70:lH3C1C38|H3C1C44
-3C1C38:t2:H3C1CEC,H3C1CF4
-3C1CF4:lI97|H3C1DA8
-3C1DA8:lI112|H3C1E5C
-3C1E5C:lI112|H3C1F10
-3C1F10:lI108|H3C1FCC
-3C1FCC:lI105|H3C2080
-3C2080:lI99|H3C213C
-3C213C:lI97|H3C21F0
-3C21F0:lI116|H3C22A4
-3C22A4:lI105|H3C2360
-3C2360:lI111|H3C241C
-3C241C:lI110|H3C24C8
-3C24C8:lI47|H3C2584
-3C2584:lI120|H3C2638
-3C2638:lI45|H3C26EC
-3C26EC:lI100|H3C27A8
-3C27A8:lI105|H3C2864
-3C2864:lI114|H3C2928
-3C2928:lI101|H3C29F4
-3C29F4:lI99|H3C2AC0
-3C2AC0:lI116|H3C2B8C
-3C2B8C:lI111|H3C2C48
-3C2C48:lI114|N
-3C1CEC:lI100|H3C1DA0
-3C1DA0:lI120|H3C1E54
-3C1E54:lI114|N
-3C1C44:lH3C1CFC|H3C1D08
-3C1CFC:t2:H3C1DB0,H3C1DB8
-3C1DB8:lI97|H3C1E6C
-3C1E6C:lI112|H3C1F20
-3C1F20:lI112|H3C1FD4
-3C1FD4:lI108|H3C2088
-3C2088:lI105|H3C2144
-3C2144:lI99|H3C21F8
-3C21F8:lI97|H3C22AC
-3C22AC:lI116|H3C2368
-3C2368:lI105|H3C2424
-3C2424:lI111|H3C24D0
-3C24D0:lI110|H3C258C
-3C258C:lI47|H3C2640
-3C2640:lI120|H3C26F4
-3C26F4:lI45|H3C27B0
-3C27B0:lI99|H3C286C
-3C286C:lI115|H3C2930
-3C2930:lI104|N
-3C1DB0:lI99|H3C1E64
-3C1E64:lI115|H3C1F18
-3C1F18:lI104|N
-3C1D08:lH3C1DC0|H3C1DCC
-3C1DC0:t2:H3C1E74,H3C1E7C
-3C1E7C:lI97|H3C1F30
-3C1F30:lI112|H3C1FE4
-3C1FE4:lI112|H3C2098
-3C2098:lI108|H3C214C
-3C214C:lI105|H3C2200
-3C2200:lI99|H3C22B4
-3C22B4:lI97|H3C2370
-3C2370:lI116|H3C242C
-3C242C:lI105|H3C24D8
-3C24D8:lI111|H3C2594
-3C2594:lI110|H3C2648
-3C2648:lI47|H3C26FC
-3C26FC:lI120|H3C27B8
-3C27B8:lI45|H3C2874
-3C2874:lI99|H3C2938
-3C2938:lI112|H3C29FC
-3C29FC:lI105|H3C2AC8
-3C2AC8:lI111|N
-3C1E74:lI99|H3C1F28
-3C1F28:lI112|H3C1FDC
-3C1FDC:lI105|H3C2090
-3C2090:lI111|N
-3C1DCC:lH3C1E84|H3C1E90
-3C1E84:t2:H3C1F38,H3C1F40
-3C1F40:lI97|H3C1FEC
-3C1FEC:lI112|H3C20A0
-3C20A0:lI112|H3C2154
-3C2154:lI108|H3C2208
-3C2208:lI105|H3C22BC
-3C22BC:lI99|H3C2378
-3C2378:lI97|H3C2434
-3C2434:lI116|H3C24E0
-3C24E0:lI105|H3C259C
-3C259C:lI111|H3C2650
-3C2650:lI110|H3C2704
-3C2704:lI47|H3C27C0
-3C27C0:lI120|H3C287C
-3C287C:lI45|H3C2940
-3C2940:lI99|H3C2A04
-3C2A04:lI111|H3C2AD0
-3C2AD0:lI109|H3C2B94
-3C2B94:lI112|H3C2C50
-3C2C50:lI114|H3C2D00
-3C2D00:lI101|H3C2DA8
-3C2DA8:lI115|H3C2E40
-3C2E40:lI115|N
-3C1F38:lI90|N
-3C1E90:lH3C1F48|H3C1F54
-3C1F48:t2:H3C1FF4,H3C1FFC
-3C1FFC:lI97|H3C20B0
-3C20B0:lI112|H3C2164
-3C2164:lI112|H3C2210
-3C2210:lI108|H3C22C4
-3C22C4:lI105|H3C2380
-3C2380:lI99|H3C243C
-3C243C:lI97|H3C24E8
-3C24E8:lI116|H3C25A4
-3C25A4:lI105|H3C2658
-3C2658:lI111|H3C270C
-3C270C:lI110|H3C27C8
-3C27C8:lI47|H3C2884
-3C2884:lI120|H3C2948
-3C2948:lI45|H3C2A0C
-3C2A0C:lI99|H3C2AD8
-3C2AD8:lI100|H3C2B9C
-3C2B9C:lI108|H3C2C58
-3C2C58:lI105|H3C2D08
-3C2D08:lI110|H3C2DB0
-3C2DB0:lI107|N
-3C1FF4:lI118|H3C20A8
-3C20A8:lI99|H3C215C
-3C215C:lI100|N
-3C1F54:lH3C2004|H3C2010
-3C2004:t2:H3C20B8,H3C20C0
-3C20C0:lI97|H3C2174
-3C2174:lI112|H3C2220
-3C2220:lI112|H3C22D4
-3C22D4:lI108|H3C2390
-3C2390:lI105|H3C2444
-3C2444:lI99|H3C24F0
-3C24F0:lI97|H3C25AC
-3C25AC:lI116|H3C2660
-3C2660:lI105|H3C2714
-3C2714:lI111|H3C27D0
-3C27D0:lI110|H3C288C
-3C288C:lI47|H3C2950
-3C2950:lI120|H3C2A14
-3C2A14:lI45|H3C2AE0
-3C2AE0:lI98|H3C2BA4
-3C2BA4:lI99|H3C2C60
-3C2C60:lI112|H3C2D10
-3C2D10:lI105|H3C2DB8
-3C2DB8:lI111|N
-3C20B8:lI98|H3C216C
-3C216C:lI99|H3C2218
-3C2218:lI112|H3C22CC
-3C22CC:lI105|H3C2388
-3C2388:lI111|N
-3C2010:lH3C20C8|H3C20D4
-3C20C8:t2:H3C217C,H3C2184
-3C2184:lI97|H3C2230
-3C2230:lI112|H3C22E4
-3C22E4:lI112|H3C2398
-3C2398:lI108|H3C244C
-3C244C:lI105|H3C24F8
-3C24F8:lI99|H3C25B4
-3C25B4:lI97|H3C2668
-3C2668:lI116|H3C271C
-3C271C:lI105|H3C27D8
-3C27D8:lI111|H3C2894
-3C2894:lI110|H3C2958
-3C2958:lI47|H3C2A1C
-3C2A1C:lI114|H3C2AE8
-3C2AE8:lI116|H3C2BAC
-3C2BAC:lI102|N
-3C217C:lI114|H3C2228
-3C2228:lI116|H3C22DC
-3C22DC:lI102|N
-3C20D4:lH3C218C|H3C2198
-3C218C:t2:H3C2238,H3C2240
-3C2240:lI97|H3C22F4
-3C22F4:lI112|H3C23A8
-3C23A8:lI112|H3C2454
-3C2454:lI108|H3C2500
-3C2500:lI105|H3C25BC
-3C25BC:lI99|H3C2670
-3C2670:lI97|H3C2724
-3C2724:lI116|H3C27E0
-3C27E0:lI105|H3C289C
-3C289C:lI111|H3C2960
-3C2960:lI110|H3C2A24
-3C2A24:lI47|H3C2AF0
-3C2AF0:lI112|H3C2BB4
-3C2BB4:lI111|H3C2C68
-3C2C68:lI119|H3C2D18
-3C2D18:lI101|H3C2DC0
-3C2DC0:lI114|H3C2E48
-3C2E48:lI112|H3C2EC0
-3C2EC0:lI111|H3C2F38
-3C2F38:lI105|H3C2FA8
-3C2FA8:lI110|H3C3010
-3C3010:lI116|N
-3C2238:lI112|H3C22EC
-3C22EC:lI112|H3C23A0
-3C23A0:lI116|N
-3C2198:lH3C2248|H3C2254
-3C2248:t2:H3C22FC,H3C2304
-3C2304:lI97|H3C23B8
-3C23B8:lI112|H3C245C
-3C245C:lI112|H3C2508
-3C2508:lI108|H3C25C4
-3C25C4:lI105|H3C2678
-3C2678:lI99|H3C272C
-3C272C:lI97|H3C27E8
-3C27E8:lI116|H3C28A4
-3C28A4:lI105|H3C2968
-3C2968:lI111|H3C2A2C
-3C2A2C:lI110|H3C2AF8
-3C2AF8:lI47|H3C2BBC
-3C2BBC:lI112|H3C2C70
-3C2C70:lI111|H3C2D20
-3C2D20:lI115|H3C2DC8
-3C2DC8:lI116|H3C2E50
-3C2E50:lI115|H3C2EC8
-3C2EC8:lI99|H3C2F40
-3C2F40:lI114|H3C2FB0
-3C2FB0:lI105|H3C3018
-3C3018:lI112|H3C3078
-3C3078:lI116|N
-3C22FC:lI97|H3C23B0
-3C23B0:lI105|N
-3C2254:lH3C230C|H3C2318
-3C230C:t2:H3C23C0,H3C23C8
-3C23C8:lI97|H3C246C
-3C246C:lI112|H3C2518
-3C2518:lI112|H3C25CC
-3C25CC:lI108|H3C2680
-3C2680:lI105|H3C2734
-3C2734:lI99|H3C27F0
-3C27F0:lI97|H3C28AC
-3C28AC:lI116|H3C2970
-3C2970:lI105|H3C2A34
-3C2A34:lI111|H3C2B00
-3C2B00:lI110|H3C2BC4
-3C2BC4:lI47|H3C2C78
-3C2C78:lI112|H3C2D28
-3C2D28:lI111|H3C2DD0
-3C2DD0:lI115|H3C2E58
-3C2E58:lI116|H3C2ED0
-3C2ED0:lI115|H3C2F48
-3C2F48:lI99|H3C2FB8
-3C2FB8:lI114|H3C3020
-3C3020:lI105|H3C3080
-3C3080:lI112|H3C30D8
-3C30D8:lI116|N
-3C23C0:lI101|H3C2464
-3C2464:lI112|H3C2510
-3C2510:lI115|N
-3C2318:lH3C23D0|H3C23DC
-3C23D0:t2:H3C2474,H3C247C
-3C247C:lI97|H3C2528
-3C2528:lI112|H3C25D4
-3C25D4:lI112|H3C2688
-3C2688:lI108|H3C273C
-3C273C:lI105|H3C27F8
-3C27F8:lI99|H3C28B4
-3C28B4:lI97|H3C2978
-3C2978:lI116|H3C2A3C
-3C2A3C:lI105|H3C2B08
-3C2B08:lI111|H3C2BCC
-3C2BCC:lI110|H3C2C80
-3C2C80:lI47|H3C2D30
-3C2D30:lI112|H3C2DD8
-3C2DD8:lI111|H3C2E60
-3C2E60:lI115|H3C2ED8
-3C2ED8:lI116|H3C2F50
-3C2F50:lI115|H3C2FC0
-3C2FC0:lI99|H3C3028
-3C3028:lI114|H3C3088
-3C3088:lI105|H3C30E0
-3C30E0:lI112|H3C3130
-3C3130:lI116|N
-3C2474:lI112|H3C2520
-3C2520:lI115|N
-3C23DC:lH3C2484|H3C2490
-3C2484:t2:H3C2530,H3C2538
-3C2538:lI97|H3C25E4
-3C25E4:lI112|H3C2698
-3C2698:lI112|H3C2744
-3C2744:lI108|H3C2800
-3C2800:lI105|H3C28BC
-3C28BC:lI99|H3C2980
-3C2980:lI97|H3C2A44
-3C2A44:lI116|H3C2B10
-3C2B10:lI105|H3C2BD4
-3C2BD4:lI111|H3C2C88
-3C2C88:lI110|H3C2D38
-3C2D38:lI47|H3C2DE0
-3C2DE0:lI112|H3C2E68
-3C2E68:lI100|H3C2EE0
-3C2EE0:lI102|N
-3C2530:lI112|H3C25DC
-3C25DC:lI100|H3C2690
-3C2690:lI102|N
-3C2490:lH3C2540|H3C254C
-3C2540:t2:H3C25EC,H3C25F4
-3C25F4:lI97|H3C26A8
-3C26A8:lI112|H3C2754
-3C2754:lI112|H3C2808
-3C2808:lI108|H3C28C4
-3C28C4:lI105|H3C2988
-3C2988:lI99|H3C2A4C
-3C2A4C:lI97|H3C2B18
-3C2B18:lI116|H3C2BDC
-3C2BDC:lI105|H3C2C90
-3C2C90:lI111|H3C2D40
-3C2D40:lI110|H3C2DE8
-3C2DE8:lI47|H3C2E70
-3C2E70:lI111|H3C2EE8
-3C2EE8:lI100|H3C2F58
-3C2F58:lI97|N
-3C25EC:lI111|H3C26A0
-3C26A0:lI100|H3C274C
-3C274C:lI97|N
-3C254C:lH3C25FC|H3C2608
-3C25FC:t2:H3C26B0,H3C26B8
-3C26B8:lI97|H3C2764
-3C2764:lI112|H3C2818
-3C2818:lI112|H3C28CC
-3C28CC:lI108|H3C2990
-3C2990:lI105|H3C2A54
-3C2A54:lI99|H3C2B20
-3C2B20:lI97|H3C2BE4
-3C2BE4:lI116|H3C2C98
-3C2C98:lI105|H3C2D48
-3C2D48:lI111|H3C2DF0
-3C2DF0:lI110|H3C2E78
-3C2E78:lI47|H3C2EF0
-3C2EF0:lI111|H3C2F60
-3C2F60:lI99|H3C2FC8
-3C2FC8:lI116|H3C3030
-3C3030:lI101|H3C3090
-3C3090:lI116|H3C30E8
-3C30E8:lI45|H3C3138
-3C3138:lI115|H3C3180
-3C3180:lI116|H3C31C8
-3C31C8:lI114|H3C3210
-3C3210:lI101|H3C3258
-3C3258:lI97|H3C32A0
-3C32A0:lI109|N
-3C26B0:lI98|H3C275C
-3C275C:lI105|H3C2810
-3C2810:lI110|N
-3C2608:lH3C26C0|H3C26CC
-3C26C0:t2:H3C276C,H3C2774
-3C2774:lI97|H3C2828
-3C2828:lI112|H3C28DC
-3C28DC:lI112|H3C2998
-3C2998:lI108|H3C2A5C
-3C2A5C:lI105|H3C2B28
-3C2B28:lI99|H3C2BEC
-3C2BEC:lI97|H3C2CA0
-3C2CA0:lI116|H3C2D50
-3C2D50:lI105|H3C2DF8
-3C2DF8:lI111|H3C2E80
-3C2E80:lI110|H3C2EF8
-3C2EF8:lI47|H3C2F68
-3C2F68:lI111|H3C2FD0
-3C2FD0:lI99|H3C3038
-3C3038:lI116|H3C3098
-3C3098:lI101|H3C30F0
-3C30F0:lI116|H3C3140
-3C3140:lI45|H3C3188
-3C3188:lI115|H3C31D0
-3C31D0:lI116|H3C3218
-3C3218:lI114|H3C3260
-3C3260:lI101|H3C32A8
-3C32A8:lI97|H3C32E8
-3C32E8:lI109|N
-3C276C:lI100|H3C2820
-3C2820:lI109|H3C28D4
-3C28D4:lI115|N
-3C26CC:lH3C277C|H3C2788
-3C277C:t2:H3C2830,H3C2838
-3C2838:lI97|H3C28EC
-3C28EC:lI112|H3C29A8
-3C29A8:lI112|H3C2A64
-3C2A64:lI108|H3C2B30
-3C2B30:lI105|H3C2BF4
-3C2BF4:lI99|H3C2CA8
-3C2CA8:lI97|H3C2D58
-3C2D58:lI116|H3C2E00
-3C2E00:lI105|H3C2E88
-3C2E88:lI111|H3C2F00
-3C2F00:lI110|H3C2F70
-3C2F70:lI47|H3C2FD8
-3C2FD8:lI111|H3C3040
-3C3040:lI99|H3C30A0
-3C30A0:lI116|H3C30F8
-3C30F8:lI101|H3C3148
-3C3148:lI116|H3C3190
-3C3190:lI45|H3C31D8
-3C31D8:lI115|H3C3220
-3C3220:lI116|H3C3268
-3C3268:lI114|H3C32B0
-3C32B0:lI101|H3C32F0
-3C32F0:lI97|H3C3320
-3C3320:lI109|N
-3C2830:lI108|H3C28E4
-3C28E4:lI104|H3C29A0
-3C29A0:lI97|N
-3C2788:lH3C2840|H3C284C
-3C2840:t2:H3C28F4,H3C28FC
-3C28FC:lI97|H3C29B8
-3C29B8:lI112|H3C2A74
-3C2A74:lI112|H3C2B38
-3C2B38:lI108|H3C2BFC
-3C2BFC:lI105|H3C2CB0
-3C2CB0:lI99|H3C2D60
-3C2D60:lI97|H3C2E08
-3C2E08:lI116|H3C2E90
-3C2E90:lI105|H3C2F08
-3C2F08:lI111|H3C2F78
-3C2F78:lI110|H3C2FE0
-3C2FE0:lI47|H3C3048
-3C3048:lI111|H3C30A8
-3C30A8:lI99|H3C3100
-3C3100:lI116|H3C3150
-3C3150:lI101|H3C3198
-3C3198:lI116|H3C31E0
-3C31E0:lI45|H3C3228
-3C3228:lI115|H3C3270
-3C3270:lI116|H3C32B8
-3C32B8:lI114|H3C32F8
-3C32F8:lI101|H3C3328
-3C3328:lI97|H3C3350
-3C3350:lI109|N
-3C28F4:lI108|H3C29B0
-3C29B0:lI122|H3C2A6C
-3C2A6C:lI104|N
-3C284C:lH3C2904|H3C2910
-3C2904:t2:H3C29C0,H3C29C8
-3C29C8:lI97|H3C2A84
-3C2A84:lI112|H3C2B48
-3C2B48:lI112|H3C2C04
-3C2C04:lI108|H3C2CB8
-3C2CB8:lI105|H3C2D68
-3C2D68:lI99|H3C2E10
-3C2E10:lI97|H3C2E98
-3C2E98:lI116|H3C2F10
-3C2F10:lI105|H3C2F80
-3C2F80:lI111|H3C2FE8
-3C2FE8:lI110|H3C3050
-3C3050:lI47|H3C30B0
-3C30B0:lI111|H3C3108
-3C3108:lI99|H3C3158
-3C3158:lI116|H3C31A0
-3C31A0:lI101|H3C31E8
-3C31E8:lI116|H3C3230
-3C3230:lI45|H3C3278
-3C3278:lI115|H3C32C0
-3C32C0:lI116|H3C3300
-3C3300:lI114|H3C3330
-3C3330:lI101|H3C3358
-3C3358:lI97|H3C3378
-3C3378:lI109|N
-3C29C0:lI101|H3C2A7C
-3C2A7C:lI120|H3C2B40
-3C2B40:lI101|N
-3C2910:lH3C29D0|H3C29DC
-3C29D0:t2:H3C2A8C,H3C2A94
-3C2A94:lI97|H3C2B58
-3C2B58:lI112|H3C2C14
-3C2C14:lI112|H3C2CC8
-3C2CC8:lI108|H3C2D78
-3C2D78:lI105|H3C2E18
-3C2E18:lI99|H3C2EA0
-3C2EA0:lI97|H3C2F18
-3C2F18:lI116|H3C2F88
-3C2F88:lI105|H3C2FF0
-3C2FF0:lI111|H3C3058
-3C3058:lI110|H3C30B8
-3C30B8:lI47|H3C3110
-3C3110:lI111|H3C3160
-3C3160:lI99|H3C31A8
-3C31A8:lI116|H3C31F0
-3C31F0:lI101|H3C3238
-3C3238:lI116|H3C3280
-3C3280:lI45|H3C32C8
-3C32C8:lI115|H3C3308
-3C3308:lI116|H3C3338
-3C3338:lI114|H3C3360
-3C3360:lI101|H3C3380
-3C3380:lI97|H3C3398
-3C3398:lI109|N
-3C2A8C:lI99|H3C2B50
-3C2B50:lI108|H3C2C0C
-3C2C0C:lI97|H3C2CC0
-3C2CC0:lI115|H3C2D70
-3C2D70:lI115|N
-3C29DC:lH3C2A9C|H3C2AA8
-3C2A9C:t2:H3C2B60,H3C2B68
-3C2B68:lI97|H3C2C24
-3C2C24:lI112|H3C2CD8
-3C2CD8:lI112|H3C2D80
-3C2D80:lI108|H3C2E20
-3C2E20:lI105|H3C2EA8
-3C2EA8:lI99|H3C2F20
-3C2F20:lI97|H3C2F90
-3C2F90:lI116|H3C2FF8
-3C2FF8:lI105|H3C3060
-3C3060:lI111|H3C30C0
-3C30C0:lI110|H3C3118
-3C3118:lI47|H3C3168
-3C3168:lI109|H3C31B0
-3C31B0:lI115|H3C31F8
-3C31F8:lI119|H3C3240
-3C3240:lI111|H3C3288
-3C3288:lI114|H3C32D0
-3C32D0:lI100|N
-3C2B60:lI100|H3C2C1C
-3C2C1C:lI111|H3C2CD0
-3C2CD0:lI99|N
-3C2AA8:lH3C2B70|H3C2B7C
-3C2B70:t2:H3C2C2C,H3C2C34
-3C2C34:lI97|H3C2CE8
-3C2CE8:lI112|H3C2D90
-3C2D90:lI112|H3C2E28
-3C2E28:lI108|H3C2EB0
-3C2EB0:lI105|H3C2F28
-3C2F28:lI99|H3C2F98
-3C2F98:lI97|H3C3000
-3C3000:lI116|H3C3068
-3C3068:lI105|H3C30C8
-3C30C8:lI111|H3C3120
-3C3120:lI110|H3C3170
-3C3170:lI47|H3C31B8
-3C31B8:lI109|H3C3200
-3C3200:lI97|H3C3248
-3C3248:lI99|H3C3290
-3C3290:lI45|H3C32D8
-3C32D8:lI99|H3C3310
-3C3310:lI111|H3C3340
-3C3340:lI109|H3C3368
-3C3368:lI112|H3C3388
-3C3388:lI97|H3C33A0
-3C33A0:lI99|H3C33B0
-3C33B0:lI116|H3C33C0
-3C33C0:lI112|H3C33D0
-3C33D0:lI114|H3C33E0
-3C33E0:lI111|N
-3C2C2C:lI99|H3C2CE0
-3C2CE0:lI112|H3C2D88
-3C2D88:lI116|N
-3C2B7C:lH3C2C3C|N
-3C2C3C:t2:H3C2CF0,H3C2CF8
-3C2CF8:lI97|H3C2DA0
-3C2DA0:lI112|H3C2E38
-3C2E38:lI112|H3C2EB8
-3C2EB8:lI108|H3C2F30
-3C2F30:lI105|H3C2FA0
-3C2FA0:lI99|H3C3008
-3C3008:lI97|H3C3070
-3C3070:lI116|H3C30D0
-3C30D0:lI105|H3C3128
-3C3128:lI111|H3C3178
-3C3178:lI110|H3C31C0
-3C31C0:lI47|H3C3208
-3C3208:lI109|H3C3250
-3C3250:lI97|H3C3298
-3C3298:lI99|H3C32E0
-3C32E0:lI45|H3C3318
-3C3318:lI98|H3C3348
-3C3348:lI105|H3C3370
-3C3370:lI110|H3C3390
-3C3390:lI104|H3C33A8
-3C33A8:lI101|H3C33B8
-3C33B8:lI120|H3C33C8
-3C33C8:lI52|H3C33D8
-3C33D8:lI48|N
-3C2CF0:lI104|H3C2D98
-3C2D98:lI113|H3C2E30
-3C2E30:lI120|N
-3BDBCC:lH3BDA78|H3BDA8C
-3BDA78:t2:A4:port,I8888
-3BDA8C:lH3BDB04|H3BDB10
-3BDB04:t2:AC:bind_address,H3BDB64
-3BDB64:t4:I127,I0,I0,I1
-3BDB10:lH3BDB78|H3BDB84
-3BDB78:t2:AB:server_name,H3BDBD4
-3BDBD4:lI108|H3BDC24
-3BDC24:lI111|H3BDC88
-3BDC88:lI99|H3BDCF0
-3BDCF0:lI97|H3BDD70
-3BDD70:lI108|H3BDDF8
-3BDDF8:lI104|H3BDE90
-3BDE90:lI111|H3BDF40
-3BDF40:lI115|H3BDFFC
-3BDFFC:lI116|N
-3BDB84:lH3BDBDC|H3BDBE8
-3BDBDC:t2:AE:max_header_siz,I1024
-3BDBE8:lH3BDC2C|H3BDC38
-3BDC2C:t2:A11:max_header_action,A8:reply414
-3BDC38:lH3BDC90|H3BDC9C
-3BDC90:t2:A8:com_type,A7:ip_comm
-3BDC9C:lH3BDCF8|H3BDD04
-3BDCF8:t2:A7:modules,H3BDD78
-3BDD78:lA9:mod_alias|H3BDE00
-3BDE00:lA8:mod_auth|H3BDE98
-3BDE98:lA7:mod_esi|H3BDF48
-3BDF48:lAB:mod_actions|H3BE004
-3BE004:lA7:mod_cgi|H3BE0D0
-3BE0D0:lAB:mod_include|H3BE1A4
-3BE1A4:lA7:mod_dir|H3BE288
-3BE288:lA7:mod_get|H3BE378
-3BE378:lA8:mod_head|H3BE47C
-3BE47C:lA7:mod_log|H3BE580
-3BE580:lAC:mod_disk_log|N
-3BDD04:lH3BDD80|H3BDD8C
-3BDD80:t2:AF:directory_index,H3BDE08
-3BDE08:lH3BDEA0|N
-3BDEA0:lI105|H3BDF50
-3BDF50:lI110|H3BE00C
-3BE00C:lI100|H3BE0D8
-3BE0D8:lI101|H3BE1AC
-3BE1AC:lI120|H3BE290
-3BE290:lI46|H3BE380
-3BE380:lI104|H3BE484
-3BE484:lI116|H3BE588
-3BE588:lI109|H3BE68C
-3BE68C:lI108|N
-3BDD8C:lH3BDE10|H3BDE1C
-3BDE10:t2:AC:default_type,H3BDEA8
-3BDEA8:lI116|H3BDF58
-3BDF58:lI101|H3BE014
-3BE014:lI120|H3BE0E0
-3BE0E0:lI116|H3BE1B4
-3BE1B4:lI47|H3BE298
-3BE298:lI112|H3BE388
-3BE388:lI108|H3BE48C
-3BE48C:lI97|H3BE590
-3BE590:lI105|H3BE694
-3BE694:lI110|N
-3BDE1C:lH3BDEB0|H3BDEBC
-3BDEB0:t2:A10:erl_script_alias,H3BDF60
-3BDF60:t2:H3BE01C,H3BE024
-3BE024:lH3BE0F0|N
-3BE0F0:lI119|H3BE1C4
-3BE1C4:lI101|H3BE2A8
-3BE2A8:lI98|H3BE398
-3BE398:lI116|H3BE49C
-3BE49C:lI111|H3BE5A0
-3BE5A0:lI111|H3BE6A4
-3BE6A4:lI108|N
-3BE01C:lI47|H3BE0E8
-3BE0E8:lI119|H3BE1BC
-3BE1BC:lI101|H3BE2A0
-3BE2A0:lI98|H3BE390
-3BE390:lI116|H3BE494
-3BE494:lI111|H3BE598
-3BE598:lI111|H3BE69C
-3BE69C:lI108|N
-3BDEBC:lH3BDF6C|H3BDF78
-3BDF6C:t2:A5:alias,H3BE02C
-3BE02C:t2:H3BE0F8,H3BE100
-3BE100:lI47|H3BE1D4
-3BE1D4:lI99|H3BE2B8
-3BE2B8:lI108|H3BE3A8
-3BE3A8:lI101|H3BE4AC
-3BE4AC:lI97|H3BE5B0
-3BE5B0:lI114|H3BE6B4
-3BE6B4:lI99|H3BE7A8
-3BE7A8:lI97|H3BE894
-3BE894:lI115|H3BE980
-3BE980:lI101|H3BEA74
-3BEA74:lI47|H3BEB68
-3BEB68:lI111|H3BEC54
-3BEC54:lI116|H3BED40
-3BED40:lI112|H3BEE2C
-3BEE2C:lI47|H3BEF00
-3BEF00:lI101|H3BEFD4
-3BEFD4:lI114|H3BF0A0
-3BF0A0:lI116|H3BF174
-3BF174:lI115|H3BF238
-3BF238:lI47|H3BF2FC
-3BF2FC:lI108|H3BF3A8
-3BF3A8:lI105|H3BF45C
-3BF45C:lI98|H3BF518
-3BF518:lI47|H3BF5DC
-3BF5DC:lI111|H3BF6B0
-3BF6B0:lI98|H3BF784
-3BF784:lI115|H3BF858
-3BF858:lI101|H3BF93C
-3BF93C:lI114|H3BFA18
-3BFA18:lI118|H3BFAF4
-3BFAF4:lI101|H3BFBD0
-3BFBD0:lI114|H3BFC9C
-3BFC9C:lI47|H3BFD60
-3BFD60:lI112|H3BFE2C
-3BFE2C:lI114|H3BFEE0
-3BFEE0:lI105|H3BFF94
-3BFF94:lI118|H3C0040
-3C0040:lI47|H3C00EC
-3C00EC:lI99|H3C0198
-3C0198:lI114|H3C024C
-3C024C:lI97|H3C0308
-3C0308:lI115|H3C03BC
-3C03BC:lI104|H3C0458
-3C0458:lI100|H3C04F4
-3C04F4:lI117|H3C0590
-3C0590:lI109|H3C0634
-3C0634:lI112|H3C06E0
-3C06E0:lI95|H3C078C
-3C078C:lI118|H3C0830
-3C0830:lI105|H3C08BC
-3C08BC:lI101|H3C0950
-3C0950:lI119|H3C09E4
-3C09E4:lI101|H3C0A80
-3C0A80:lI114|N
-3BE0F8:lI47|H3BE1CC
-3BE1CC:lI99|H3BE2B0
-3BE2B0:lI114|H3BE3A0
-3BE3A0:lI97|H3BE4A4
-3BE4A4:lI115|H3BE5A8
-3BE5A8:lI104|H3BE6AC
-3BE6AC:lI100|H3BE7A0
-3BE7A0:lI117|H3BE88C
-3BE88C:lI109|H3BE978
-3BE978:lI112|H3BEA6C
-3BEA6C:lI95|H3BEB60
-3BEB60:lI118|H3BEC4C
-3BEC4C:lI105|H3BED38
-3BED38:lI101|H3BEE24
-3BEE24:lI119|H3BEEF8
-3BEEF8:lI101|H3BEFCC
-3BEFCC:lI114|N
-3BDF78:lH3BE038|H3BE044
-3BE038:t2:A5:alias,H3BE108
-3BE108:t2:H3BE1DC,H3BE1E4
-3BE1E4:lI47|H3BE2C8
-3BE2C8:lI99|H3BE3B8
-3BE3B8:lI108|H3BE4BC
-3BE4BC:lI101|H3BE5C0
-3BE5C0:lI97|H3BE6C4
-3BE6C4:lI114|H3BE7B8
-3BE7B8:lI99|H3BE8A4
-3BE8A4:lI97|H3BE990
-3BE990:lI115|H3BEA84
-3BEA84:lI101|H3BEB78
-3BEB78:lI47|H3BEC64
-3BEC64:lI111|H3BED50
-3BED50:lI116|H3BEE3C
-3BEE3C:lI112|H3BEF10
-3BEF10:lI47|H3BEFE4
-3BEFE4:lI101|H3BF0B0
-3BF0B0:lI114|H3BF184
-3BF184:lI116|H3BF248
-3BF248:lI115|H3BF304
-3BF304:lI47|H3BF3B0
-3BF3B0:lI101|H3BF464
-3BF464:lI114|H3BF520
-3BF520:lI116|H3BF5E4
-3BF5E4:lI115|H3BF6B8
-3BF6B8:lI47|H3BF78C
-3BF78C:lI100|H3BF860
-3BF860:lI111|H3BF944
-3BF944:lI99|H3BFA20
-3BFA20:lI47|H3BFAFC
-3BFAFC:lI104|H3BFBD8
-3BFBD8:lI116|H3BFCA4
-3BFCA4:lI109|H3BFD68
-3BFD68:lI108|N
-3BE1DC:lI47|H3BE2C0
-3BE2C0:lI99|H3BE3B0
-3BE3B0:lI114|H3BE4B4
-3BE4B4:lI97|H3BE5B8
-3BE5B8:lI115|H3BE6BC
-3BE6BC:lI104|H3BE7B0
-3BE7B0:lI100|H3BE89C
-3BE89C:lI117|H3BE988
-3BE988:lI109|H3BEA7C
-3BEA7C:lI112|H3BEB70
-3BEB70:lI95|H3BEC5C
-3BEC5C:lI101|H3BED48
-3BED48:lI114|H3BEE34
-3BEE34:lI116|H3BEF08
-3BEF08:lI115|H3BEFDC
-3BEFDC:lI95|H3BF0A8
-3BF0A8:lI100|H3BF17C
-3BF17C:lI111|H3BF240
-3BF240:lI99|N
-3BE044:lH3BE114|H3BE120
-3BE114:t2:A5:alias,H3BE1EC
-3BE1EC:t2:H3BE2D0,H3BE2D8
-3BE2D8:lI47|H3BE3C8
-3BE3C8:lI99|H3BE4CC
-3BE4CC:lI108|H3BE5D0
-3BE5D0:lI101|H3BE6D4
-3BE6D4:lI97|H3BE7C8
-3BE7C8:lI114|H3BE8B4
-3BE8B4:lI99|H3BE9A0
-3BE9A0:lI97|H3BEA94
-3BEA94:lI115|H3BEB88
-3BEB88:lI101|H3BEC74
-3BEC74:lI47|H3BED60
-3BED60:lI111|H3BEE4C
-3BEE4C:lI116|H3BEF20
-3BEF20:lI112|H3BEFEC
-3BEFEC:lI47|H3BF0B8
-3BF0B8:lI101|H3BF18C
-3BF18C:lI114|H3BF250
-3BF250:lI116|H3BF30C
-3BF30C:lI115|H3BF3B8
-3BF3B8:lI47|H3BF46C
-3BF46C:lI108|H3BF528
-3BF528:lI105|H3BF5EC
-3BF5EC:lI98|H3BF6C0
-3BF6C0:lI47|H3BF794
-3BF794:lI111|H3BF868
-3BF868:lI98|H3BF94C
-3BF94C:lI115|H3BFA28
-3BFA28:lI101|H3BFB04
-3BFB04:lI114|H3BFBE0
-3BFBE0:lI118|H3BFCAC
-3BFCAC:lI101|H3BFD70
-3BFD70:lI114|H3BFE34
-3BFE34:lI47|H3BFEE8
-3BFEE8:lI100|H3BFF9C
-3BFF9C:lI111|H3C0048
-3C0048:lI99|H3C00F4
-3C00F4:lI47|H3C01A0
-3C01A0:lI104|H3C0254
-3C0254:lI116|H3C0310
-3C0310:lI109|H3C03C4
-3C03C4:lI108|N
-3BE2D0:lI47|H3BE3C0
-3BE3C0:lI99|H3BE4C4
-3BE4C4:lI114|H3BE5C8
-3BE5C8:lI97|H3BE6CC
-3BE6CC:lI115|H3BE7C0
-3BE7C0:lI104|H3BE8AC
-3BE8AC:lI100|H3BE998
-3BE998:lI117|H3BEA8C
-3BEA8C:lI109|H3BEB80
-3BEB80:lI112|H3BEC6C
-3BEC6C:lI95|H3BED58
-3BED58:lI100|H3BEE44
-3BEE44:lI111|H3BEF18
-3BEF18:lI99|N
-3BE120:lH3BE1F8|N
-3BE1F8:t2:A10:erl_script_alias,H3BE2E0
-3BE2E0:t2:H3BE3D0,H3BE3D8
-3BE3D8:lH3BE4DC|N
-3BE4DC:lI99|H3BE5E0
-3BE5E0:lI114|H3BE6E4
-3BE6E4:lI97|H3BE7D8
-3BE7D8:lI115|H3BE8C4
-3BE8C4:lI104|H3BE9B0
-3BE9B0:lI100|H3BEAA4
-3BEAA4:lI117|H3BEB90
-3BEB90:lI109|H3BEC7C
-3BEC7C:lI112|H3BED68
-3BED68:lI95|H3BEE54
-3BEE54:lI118|H3BEF28
-3BEF28:lI105|H3BEFF4
-3BEFF4:lI101|H3BF0C0
-3BF0C0:lI119|H3BF194
-3BF194:lI101|H3BF258
-3BF258:lI114|N
-3BE3D0:lI47|H3BE4D4
-3BE4D4:lI99|H3BE5D8
-3BE5D8:lI100|H3BE6DC
-3BE6DC:lI118|H3BE7D0
-3BE7D0:lI95|H3BE8BC
-3BE8BC:lI101|H3BE9A8
-3BE9A8:lI114|H3BEA9C
-3BEA9C:lI108|N
-3BDE2C:lH3BDA9C|H3BDECC
-3BDA9C:t4:I127,I0,I0,I1
-3BDECC:lI8888|H3BDF88
-3BDF88:lN|N
-3BDD1C:lN|N
-3BDA50:t2:AD:$initial_call,H3BDAB8
-3BDAB8:t3:A3:gen,A7:init_it,H3BDAB0
-3BDA5C:t2:A9:verbosity,A7:silence
-3BDAC8:t2:AE:auth_verbosity,A7:silence
-3BDB28:t2:A12:security_verbosity,A7:silence
-3BDB9C:t2:A12:acceptor_verbosity,A7:silence
-3BDC00:t2:AA:$ancestors,H3BDC5C
-3BDC5C:lA1A:httpd_sup__127_0_0_1__8888|H3BDCB4
-3BDCB4:lA8:web_tool|H3BDD24
-3BDD24:lP<0.27.0>|N
-3BDADC:t2:A19:request_handler_verbosity,A7:silence
-3BDB3C:t2:A5:sname,A3:man
-=proc_dictionary:<0.47.0>
-H36E688
-H36E694
-H36E6A0
-H36E6AC
-=proc_stack:<0.47.0>
-36c520:SReturn addr 0x362C9C (inet_tcp:accept/2 + 20)
-y0:I5
-y1:p<0.161>
-y2:p<0.141>
-36c530:SReturn addr 0x500C5C (httpd_socket:accept/3 + 280)
-y0:N
-36c538:SReturn addr 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y0:N
-36c540:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:SCatch 0x502BFC (httpd_acceptor:acceptor/4 + 164)
-y1:P<0.46.0>
-y2:A7:ip_comm
-y3:p<0.141>
-y4:A1B:httpd_conf__127_0_0_1__8888
-36c558:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:AE:httpd_acceptor
-y2:A8:acceptor
-y3:H36E6C8
-=proc_heap:<0.47.0>
-36E6C8:lP<0.44.0>|H36E724
-36E724:lP<0.46.0>|H36E748
-36E748:lA7:ip_comm|H36E760
-36E760:lH36E6D0|H36E778
-36E6D0:t4:I127,I0,I0,I1
-36E778:lI8888|H36E788
-36E788:lA1B:httpd_conf__127_0_0_1__8888|H36E798
-36E798:lA7:silence|N
-36E688:t2:AD:$initial_call,H36E6F0
-36E6F0:t3:AE:httpd_acceptor,A8:acceptor,H36E6C8
-36E694:t2:A9:verbosity,A7:silence
-36E6A0:t2:AA:$ancestors,H36E700
-36E700:lA1E:httpd_acc_sup__127_0_0_1__8888|H36E72C
-36E72C:lA1A:httpd_sup__127_0_0_1__8888|H36E750
-36E750:lA8:web_tool|H36E768
-36E768:lP<0.27.0>|N
-36E6AC:t2:A5:sname,A3:acc
-=proc_dictionary:<0.48.0>
-H385E48
-H385E54
-=proc_stack:<0.48.0>
-3ac1bc:SReturn addr 0x225860 (proc_lib:init_p/5 + 164)
-y0:N
-y1:A8:infinity
-y2:A10:crashdump_viewer
-y3:H3AB280
-y4:A17:crashdump_viewer_server
-y5:P<0.41.0>
-3ac1d8:SReturn addr 0x156F90 (<terminate process normally>)
-y0:SCatch 0x225860 (proc_lib:init_p/5 + 164)
-y1:A3:gen
-y2:A7:init_it
-y3:H385E90
-=proc_heap:<0.48.0>
-3AB280:t8:A5:state,A9:undefined,A9:undefined,A9:undefined,A5:false,I4,A9:undefined,P<0.56.0>
-385E90:lAA:gen_server|H385ED8
-385ED8:lP<0.41.0>|H385F10
-385F10:lP<0.41.0>|H385F58
-385F58:lH385FA8|H385FB4
-385FA8:t2:A5:local,A17:crashdump_viewer_server
-385FB4:lA10:crashdump_viewer|H386014
-386014:lN|H38606C
-38606C:lN|N
-385E48:t2:AD:$initial_call,H385EB0
-385EB0:t3:A3:gen,A7:init_it,H385E90
-385E54:t2:AA:$ancestors,H385EC0
-385EC0:lA6:websup|H385F08
-385F08:lA8:web_tool|H385F50
-385F50:lP<0.27.0>|N
-=proc_stack:<0.49.0>
-36a114:SReturn addr 0x30174C (io:parse_erl_exprs/3 + 92)
-y0:H369E10
-y1:P<0.22.0>
-36a120:SReturn addr 0x2E5360 (shell:'-get_command/4-fun-0-'/1 + 20)
-y0:N
-36a128:SReturn addr 0x156F90 (<terminate process normally>)
-=proc_heap:<0.49.0>
-369E10:E21:8372000364000D6E6F6E6F6465406E6F686F737400000001330000000000000000
-=atoms
diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in
index fa81f36e98..f86146759c 100644
--- a/lib/odbc/configure.in
+++ b/lib/odbc/configure.in
@@ -136,7 +136,7 @@ AC_SUBST(THR_LIBS)
odbc_lib_link_success=no
AC_SUBST(TARGET_FLAGS)
case $host_os in
- darwin*)
+ darwin1[[0-2]].*|darwin[[0-9]].*)
TARGET_FLAGS="-DUNIX"
if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then
ODBC_LIB= -L"/usr/lib"
diff --git a/lib/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml
index 002f641f1d..bd19d0e434 100644
--- a/lib/public_key/doc/src/public_key.xml
+++ b/lib/public_key/doc/src/public_key.xml
@@ -71,7 +71,7 @@
<p>Use the following include directive to get access to the
records and constant macros described here and in the User's Guide.</p>
- <code> -include_lib("public_key/include/public_key.hrl"). </code>
+ <code> -include_lib("public_key/include/public_key.hrl").</code>
<p><em>Data Types </em></p>
@@ -84,44 +84,49 @@
<p><code>der_encoded() = binary()</code></p>
<p><code>pki_asn1_type() = 'Certificate' | 'RSAPrivateKey'| 'RSAPublicKey' |
- 'DSAPrivateKey' | 'DSAPublicKey' | 'DHParameter' | 'SubjectPublicKeyInfo' |
- 'PrivateKeyInfo' | 'CertificationRequest' | 'ECPrivateKey'|
- 'EcpkParameters'</code></p>
+ 'DSAPrivateKey' | 'DSAPublicKey' | 'DHParameter' |
+ 'SubjectPublicKeyInfo' | 'PrivateKeyInfo' |
+ 'CertificationRequest' | 'ECPrivateKey' | 'EcpkParameters'</code></p>
<p><code>pem_entry () = {pki_asn1_type(), binary(), %% DER or encrypted DER
- not_encrypted | cipher_info()} </code></p>
+ not_encrypted | cipher_info()}</code></p>
- <p><code>cipher_info() = {"RC2-CBC | "DES-CBC" | "DES-EDE3-CBC", crypto:rand_bytes(8)} |
- 'PBES2-params'} </code></p>
+ <p><code>cipher_info() = {"RC2-CBC | "DES-CBC" | "DES-EDE3-CBC",
+ crypto:rand_bytes(8)} | 'PBES2-params'}</code></p>
+ <p><code>public_key() = rsa_public_key() | dsa_public_key() | ec_public_key()</code></p>
+ <p><code>private_key() = rsa_public_key() | dsa_public_key() | ec_public_key()</code></p>
<p><code>rsa_public_key() = #'RSAPublicKey'{}</code></p>
- <p><code>rsa_private_key() = #'RSAPrivateKey'{} </code></p>
+ <p><code>rsa_private_key() = #'RSAPrivateKey'{}</code></p>
- <p><code>dsa_public_key() = {integer(), #'Dss-Parms'{}} </code></p>
+ <p><code>dsa_public_key() = {integer(), #'Dss-Parms'{}}</code></p>
<p><code>dsa_private_key() = #'DSAPrivateKey'{}</code></p>
- <p><code>ec_public_key() = {#'ECPoint'{}, #'EcpkParameters'{} | {namedCurve, oid()}} </code></p>
+ <p><code>ec_public_key() = {#'ECPoint'{}, #'EcpkParameters'{} |
+ {namedCurve, oid()}}</code></p>
<p><code>ec_private_key() = #'ECPrivateKey'{}</code></p>
- <p><code> public_crypt_options() = [{rsa_pad, rsa_padding()}]. </code></p>
+ <p><code>public_crypt_options() = [{rsa_pad, rsa_padding()}].</code></p>
- <p><code> rsa_padding() = 'rsa_pkcs1_padding' | 'rsa_pkcs1_oaep_padding'
- | 'rsa_no_padding'</code></p>
+ <p><code>rsa_padding() = 'rsa_pkcs1_padding' | 'rsa_pkcs1_oaep_padding' |
+ 'rsa_no_padding'</code></p>
- <p><code> rsa_digest_type() = 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' | 'sha512' </code></p>
+ <p><code>rsa_digest_type() = 'md5' | 'sha' | 'sha224' | 'sha256' | 'sha384' |
+ 'sha512'</code></p>
- <p><code> dss_digest_type() = 'sha' </code></p>
+ <p><code>dss_digest_type() = 'sha'</code></p>
- <p><code> ecdsa_digest_type() = 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512' </code></p>
+ <p><code>ecdsa_digest_type() = 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512'</code></p>
- <p><code> crl_reason() = unspecified | keyCompromise | cACompromise | affiliationChanged | superseded | cessationOfOperation | certificateHold | privilegeWithdrawn | aACompromise
- </code></p>
+ <p><code>crl_reason() = unspecified | keyCompromise | cACompromise |
+ affiliationChanged | superseded | cessationOfOperation |
+ certificateHold | privilegeWithdrawn | aACompromise</code></p>
- <p><code> ssh_file() = openssh_public_key | rfc4716_public_key |
- known_hosts | auth_keys </code></p>
+ <p><code>ssh_file() = openssh_public_key | rfc4716_public_key | known_hosts |
+ auth_keys</code></p>
<!-- <p><code>policy_tree() = [Root, Children]</code></p> -->
@@ -430,7 +435,7 @@
constructing the input to this function and that should be run through the <c>verify_fun</c>.</d>
<v> CertChain = [der_encode()]</v>
<d>A list of DER encoded certificates in trust order ending with the peer certificate.</d>
- <v> Options = proplists:proplists()</v>
+ <v> Options = proplists:proplist()</v>
<v>PublicKeyInfo = {?'rsaEncryption' | ?'id-dsa',
rsa_public_key() | integer(), 'NULL' | 'Dss-Parms'{}}</v>
<v> PolicyTree = term() </v>
@@ -492,7 +497,7 @@ fun(OtpCert :: #'OTPCertificate'{}, Event :: {bad_cert, Reason :: atom()} |
<type>
<v> OTPCertificate = #'OTPCertificate'{}</v>
<v> DPAndCRLs = [{DP::#'DistributionPoint'{} ,CRL::#'CertificateList'{}}] </v>
- <v> Options = proplists:proplists()</v>
+ <v> Options = proplists:proplist()</v>
<v> CRLStatus() = valid | {bad_cert, revocation_status_undetermined} |
{bad_cert, {revoked, crl_reason()}}</v>
</type>
diff --git a/lib/public_key/include/public_key.hrl b/lib/public_key/include/public_key.hrl
index 1e882e76ee..8afc841fa6 100644
--- a/lib/public_key/include/public_key.hrl
+++ b/lib/public_key/include/public_key.hrl
@@ -88,7 +88,8 @@
-define(privilegeWithdrawn, 9).
-define(aACompromise, 10).
--type public_key() :: rsa_public_key() | dsa_public_key().
+-type public_key() :: rsa_public_key() | dsa_public_key() | ec_public_key().
+-type private_key() :: rsa_private_key() | dsa_private_key() | ec_private_key().
-type rsa_public_key() :: #'RSAPublicKey'{}.
-type rsa_private_key() :: #'RSAPrivateKey'{}.
-type dsa_private_key() :: #'DSAPrivateKey'{}.
diff --git a/lib/runtime_tools/c_src/Makefile.in b/lib/runtime_tools/c_src/Makefile.in
index d315a90e18..2bcb93b4dd 100644
--- a/lib/runtime_tools/c_src/Makefile.in
+++ b/lib/runtime_tools/c_src/Makefile.in
@@ -21,11 +21,6 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
include $(ERL_TOP)/make/$(TARGET)/otp_ded.mk
# ----------------------------------------------------
-# Items from top-level configure
-# ----------------------------------------------------
-DTRACE_ENABLED=@DTRACE_ENABLED@
-DTRACE_ENABLED_2STEP=@DTRACE_ENABLED_2STEP@
-# ----------------------------------------------------
# Application version
# ----------------------------------------------------
include ../vsn.mk
@@ -108,28 +103,7 @@ _create_dirs := $(shell mkdir -p $(OBJDIR) $(LIBDIR))
debug opt valgrind: $(SOLIBS) $(OBJDIR) $(LIBDIR) $(NIF_LIB)
-ifdef DTRACE_ENABLED
-DTRACE_USER_HEADER=$(OBJDIR)/dtrace_user.h
-$(OBJDIR)/dtrace_user.h: ./dtrace_user.d
- $(dtrace_verbose)dtrace -h -C $(INCLUDES) \
- -s ./dtrace_user.d \
- -o ./dtrace_user.tmp
- $(V_at)sed -e '/^#define[ ]*ERLANG_[A-Z0-9_]*(.*)/y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/' ./dtrace_user.tmp > $@
- $(V_at)rm ./dtrace_user.tmp
-else
-DTRACE_USER_HEADER=
-endif
-
-DTRACE_OBJS =
-ifdef DTRACE_ENABLED_2STEP
-DTRACE_OBJS += $(OBJDIR)/dtrace_user.o
-$(OBJDIR)/dtrace_user.o: $(before_DTrace_OBJS) $(OBJDIR)/dtrace_user.h
- $(dtrace_verbose)dtrace -G -C \
- -s ./dtrace_user.d \
- -o $@ $(before_DTrace_OBJS)
-endif
-
-DYNTRACE_OBJS = $(before_DTrace_OBJS) $(DTRACE_OBJS)
+DYNTRACE_OBJS = $(before_DTrace_OBJS)
$(OBJDIR):
-@mkdir -p $(OBJDIR)
@@ -137,7 +111,7 @@ $(OBJDIR):
$(LIBDIR):
-@mkdir -p $(LIBDIR)
-$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c $(DTRACE_USER_HEADER)
+$(OBJDIR)/dyntrace$(TYPEMARKER).o: dyntrace.c
$(V_at)$(INSTALL_DIR) $(OBJDIR)
$(V_CC) -c -o $@ $(ALL_CFLAGS) $<
diff --git a/lib/runtime_tools/c_src/dyntrace.c b/lib/runtime_tools/c_src/dyntrace.c
index eef03afd1c..18f91cd7e7 100644
--- a/lib/runtime_tools/c_src/dyntrace.c
+++ b/lib/runtime_tools/c_src/dyntrace.c
@@ -30,9 +30,6 @@
#if defined(USE_DYNAMIC_TRACE) && (defined(USE_DTRACE) || defined(USE_SYSTEMTAP))
#define HAVE_USE_DTRACE 1
#endif
-#ifdef HAVE_USE_DTRACE
-#include "dtrace_user.h"
-#endif
void dtrace_nifenv_str(ErlNifEnv *env, char *process_buf);
void get_string_maybe(ErlNifEnv *env, const ERL_NIF_TERM term, char **ptr, char *buf, int bufsiz);
diff --git a/lib/runtime_tools/src/observer_backend.erl b/lib/runtime_tools/src/observer_backend.erl
index 202129c61a..68ef04f20c 100644
--- a/lib/runtime_tools/src/observer_backend.erl
+++ b/lib/runtime_tools/src/observer_backend.erl
@@ -53,6 +53,13 @@ sys_info() ->
Mem -> Mem
catch _:_ -> []
end,
+
+ SchedulersOnline = erlang:system_info(schedulers_online),
+ SchedulersAvailable = case erlang:system_info(multi_scheduling) of
+ enabled -> SchedulersOnline;
+ _ -> 1
+ end,
+
{{_,Input},{_,Output}} = erlang:statistics(io),
[{process_count, erlang:system_info(process_count)},
{process_limit, erlang:system_info(process_limit)},
@@ -60,9 +67,13 @@ sys_info() ->
{run_queue, erlang:statistics(run_queue)},
{io_input, Input},
{io_output, Output},
+
{logical_processors, erlang:system_info(logical_processors)},
- {logical_processors_available, erlang:system_info(logical_processors_available)},
{logical_processors_online, erlang:system_info(logical_processors_online)},
+ {logical_processors_available, erlang:system_info(logical_processors_available)},
+ {schedulers, erlang:system_info(schedulers)},
+ {schedulers_online, SchedulersOnline},
+ {schedulers_available, SchedulersAvailable},
{otp_release, erlang:system_info(otp_release)},
{version, erlang:system_info(version)},
@@ -221,7 +232,7 @@ fetch_stats_loop(Parent, Time) ->
_M = Parent ! {stats, 1,
erlang:statistics(scheduler_wall_time),
erlang:statistics(io),
- erlang:memory()},
+ try erlang:memory() catch _:_ -> [] end},
fetch_stats_loop(Parent, Time)
end.
%%
diff --git a/lib/sasl/test/sasl_SUITE.erl b/lib/sasl/test/sasl_SUITE.erl
index e8f6a4a2eb..e799230338 100644
--- a/lib/sasl/test/sasl_SUITE.erl
+++ b/lib/sasl/test/sasl_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2011-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2011-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -34,7 +34,7 @@
log_mf_h_env/1]).
all() ->
- [app_test, appup_test, log_mf_h_env].
+ [log_mf_h_env, app_test, appup_test].
groups() ->
[].
@@ -61,54 +61,60 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(sasl),
- {sasl,_,SaslVsn} = lists:keyfind(sasl,1,application:loaded_applications()),
- Ebin = filename:join(code:lib_dir(sasl),ebin),
- {ok,[{SaslVsn,UpFrom,DownTo}=Appup]} =
- file:consult(filename:join(Ebin,"sasl.appup")),
- ct:log("~p~n",[Appup]),
- {OkVsns,NokVsns} = create_test_vsns(SaslVsn),
+ {_,_,Vsn} = lists:keyfind(sasl,1,application:loaded_applications()),
+ AppupFile = filename:join([code:lib_dir(sasl),ebin,"sasl.appup"]),
+ {ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
+ ct:log("~p~n",[AppupScript]),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = sasl_vsn([FirstMajor,SecondMajor]),
+ Nok0 = sasl_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+sasl_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ _ = rpc:call(N,application,load,[sasl]),
+ As = rpc:call(N,application,loaded_applications,[]),
+ {_,_,V} = lists:keyfind(sasl,1,As),
+ test_server:stop_node(N),
+ [V|sasl_vsn(Rs)];
+ false ->
+ sasl_vsn(Rs)
+ end;
+sasl_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
@@ -119,7 +125,6 @@ check_appup([],_,_) ->
ok.
-
%% OTP-9185 - fail sasl start if some but not all log_mf_h env vars
%% are given.
log_mf_h_env(Config) ->
diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index d213b67052..ab5514e550 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1996</year><year>2013</year>
+ <year>1996</year><year>2014</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -34,6 +34,80 @@
<section>
+ <title>SNMP Development Toolkit 4.25.0.1</title>
+ <p>Version 4.25.0.1 supports code replacement in runtime from/to
+ version 4.25, 4.24.2, 4.24.1 and 4.24. </p>
+
+ <section>
+ <title>Improvements and new features</title>
+<!--
+ <p>-</p>
+-->
+
+ <list type="bulleted">
+ <item>
+ <p>Updated doc files to utf8. </p>
+ <p>Own Id: OTP-10907</p>
+ </item>
+
+ <item>
+ <p>Fixed test suite to support UTF-8 paths. </p>
+ <p>Own Id: OTP-10877</p>
+ </item>
+
+ </list>
+
+ </section>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>Wrong block cypher type used for AES ('aes_cbf128'
+ instead of 'aes_cfb128') when performing AES block
+ encrypt/decrypt which breaks SNMP usmAesCfb128Protocol
+ in agent and manager. </p>
+ <p>Own Id: OTP-11412</p>
+ </item>
+
+ <item>
+ <p>[manager] When performing the AES encryption, invalid values for
+ the EngineBoots and EngineTime was used. </p>
+ <p>The values of the local agent was used, which would have produced
+ "some" values if an agent was actually running.
+ If not it would have caused a crash. </p>
+ <p>Own Id: OTP-11413</p>
+ </item>
+
+ </list>
+-->
+
+ </section>
+
+ <section>
+ <title>Incompatibilities</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[manager] The old Addr-and-Port based API functions, previously
+ long deprecated and marked for deletion in R16B, has now been
+ removed. </p>
+ <p>Own Id: OTP-10027</p>
+ </item>
+
+ </list>
+-->
+ </section>
+
+ </section> <!-- 4.25.0.1 -->
+
+
+ <section>
<title>SNMP Development Toolkit 4.25</title>
<p>Version 4.25 supports code replacement in runtime from/to
version 4.24.2, 4.24.1, 4.24, 4.23.1 and 4.23. </p>
diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src
index fa4b72ab68..babc33e6a5 100644
--- a/lib/snmp/src/app/snmp.appup.src
+++ b/lib/snmp/src/app/snmp.appup.src
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -28,11 +28,10 @@
%% {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
%% {add_module, snmpm_net_if_mt}
[
+ {"4.25", [{restart_application, snmp}]},
{"4.24.2", [{restart_application, snmp}]},
{"4.24.1", [{restart_application, snmp}]},
- {"4.24", [{restart_application, snmp}]},
- {"4.23.1", [{restart_application, snmp}]},
- {"4.23", [{restart_application, snmp}]}
+ {"4.24", [{restart_application, snmp}]}
],
%% ------D o w n g r a d e ---------------------------------------------------
@@ -41,11 +40,10 @@
%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}}
[
+ {"4.25", [{restart_application, snmp}]},
{"4.24.2", [{restart_application, snmp}]},
{"4.24.1", [{restart_application, snmp}]},
- {"4.24", [{restart_application, snmp}]},
- {"4.23.1", [{restart_application, snmp}]},
- {"4.23", [{restart_application, snmp}]}
+ {"4.24", [{restart_application, snmp}]}
]
}.
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index 70f7c2b19a..533e313bdb 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -2,7 +2,7 @@
# %CopyrightBegin%
#
-# Copyright Ericsson AB 1997-2013. All Rights Reserved.
+# Copyright Ericsson AB 1997-2014. All Rights Reserved.
#
# The contents of this file are subject to the Erlang Public License,
# Version 1.1, (the "License"); you may not use this file except in
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = snmp
-SNMP_VSN = 4.25
+SNMP_VSN = 4.25.0.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)"
diff --git a/lib/ssh/src/ssh.erl b/lib/ssh/src/ssh.erl
index 2685b1553b..9f571adba2 100644
--- a/lib/ssh/src/ssh.erl
+++ b/lib/ssh/src/ssh.erl
@@ -59,8 +59,8 @@ stop() ->
application:stop(ssh).
%%--------------------------------------------------------------------
--spec connect(string(), integer(), proplists:proplists()) -> {ok, pid()} | {error, term()}.
--spec connect(string(), integer(), proplists:proplists(), timeout()) -> {ok, pid()} | {error, term()}.
+-spec connect(string(), integer(), proplists:proplist()) -> {ok, pid()} | {error, term()}.
+-spec connect(string(), integer(), proplists:proplist(), timeout()) -> {ok, pid()} | {error, term()}.
%%
%% Description: Starts an ssh connection.
%%--------------------------------------------------------------------
diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl
index 41febf9707..77453e8fd7 100644
--- a/lib/ssh/src/ssh_cli.erl
+++ b/lib/ssh/src/ssh_cli.erl
@@ -170,10 +170,19 @@ handle_msg({Group, get_unicode_state}, State) ->
{ok, State};
handle_msg({Group, tty_geometry}, #state{group = Group,
- pty = #ssh_pty{width=Width,
- height=Height}
+ pty = Pty
} = State) ->
- Group ! {self(),tty_geometry,{Width,Height}},
+ case Pty of
+ #ssh_pty{width=Width,height=Height} ->
+ Group ! {self(),tty_geometry,{Width,Height}};
+ _ ->
+ %% This is a dirty fix of the problem with the otp ssh:shell
+ %% client. That client will not allocate a tty, but someone
+ %% asks for the tty_geometry just before every erlang prompt.
+ %% If that question is not answered, there is a 2 sec timeout
+ %% Until the prompt is seen by the user at the client side ...
+ Group ! {self(),tty_geometry,{0,0}}
+ end,
{ok,State};
handle_msg({Group, Req}, #state{group = Group, buf = Buf, pty = Pty,
diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml
index 80ef419fb7..910dca3889 100644
--- a/lib/ssl/doc/src/ssl.xml
+++ b/lib/ssl/doc/src/ssl.xml
@@ -460,6 +460,10 @@ fun(srp, Username :: string(), UserState :: term()) ->
</item>
<tag>{log_alert, boolean()}</tag>
<item>If false, error reports will not be displayed.</item>
+ <tag>{honor_cipher_order, boolean()}</tag>
+ <item>If true, use the server's preference for cipher selection. If false
+ (the default), use the client's preference.
+ </item>
</taglist>
</section>
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index a7fd9f5f81..8c2b84bc1e 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -640,7 +640,8 @@ handle_options(Opts0, _Role) ->
make_next_protocol_selector(
handle_option(client_preferred_next_protocols, Opts, undefined)),
log_alert = handle_option(log_alert, Opts, true),
- server_name_indication = handle_option(server_name_indication, Opts, undefined)
+ server_name_indication = handle_option(server_name_indication, Opts, undefined),
+ honor_cipher_order = handle_option(honor_cipher_order, Opts, false)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -652,7 +653,8 @@ handle_options(Opts0, _Role) ->
reuse_session, reuse_sessions, ssl_imp,
cb_info, renegotiate_at, secure_renegotiate, hibernate_after,
erl_dist, next_protocols_advertised,
- client_preferred_next_protocols, log_alert, server_name_indication],
+ client_preferred_next_protocols, log_alert,
+ server_name_indication, honor_cipher_order],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -695,11 +697,9 @@ validate_option(verify_fun, Fun) when is_function(Fun) ->
end, Fun};
validate_option(verify_fun, {Fun, _} = Value) when is_function(Fun) ->
Value;
-validate_option(fail_if_no_peer_cert, Value)
- when Value == true; Value == false ->
+validate_option(fail_if_no_peer_cert, Value) when is_boolean(Value) ->
Value;
-validate_option(verify_client_once, Value)
- when Value == true; Value == false ->
+validate_option(verify_client_once, Value) when is_boolean(Value) ->
Value;
validate_option(depth, Value) when is_integer(Value),
Value >= 0, Value =< 255->
@@ -779,12 +779,10 @@ validate_option(ciphers, Value) when is_list(Value) ->
end;
validate_option(reuse_session, Value) when is_function(Value) ->
Value;
-validate_option(reuse_sessions, Value) when Value == true;
- Value == false ->
+validate_option(reuse_sessions, Value) when is_boolean(Value) ->
Value;
-validate_option(secure_renegotiate, Value) when Value == true;
- Value == false ->
+validate_option(secure_renegotiate, Value) when is_boolean(Value) ->
Value;
validate_option(renegotiate_at, Value) when is_integer(Value) ->
erlang:min(Value, ?DEFAULT_RENEGOTIATE_AT);
@@ -793,8 +791,7 @@ validate_option(hibernate_after, undefined) ->
undefined;
validate_option(hibernate_after, Value) when is_integer(Value), Value >= 0 ->
Value;
-validate_option(erl_dist,Value) when Value == true;
- Value == false ->
+validate_option(erl_dist,Value) when is_boolean(Value) ->
Value;
validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredProtocols} = Value)
when is_list(PreferredProtocols) ->
@@ -820,8 +817,7 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro
validate_option(client_preferred_next_protocols, undefined) ->
undefined;
-validate_option(log_alert, Value) when Value == true;
- Value == false ->
+validate_option(log_alert, Value) when is_boolean(Value) ->
Value;
validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) ->
case tls_record:highest_protocol_version([]) of
@@ -840,6 +836,8 @@ validate_option(server_name_indication, disable) ->
disable;
validate_option(server_name_indication, undefined) ->
undefined;
+validate_option(honor_cipher_order, Value) when is_boolean(Value) ->
+ Value;
validate_option(Opt, Value) ->
throw({error, {options, {Opt, Value}}}).
diff --git a/lib/ssl/src/ssl_connection.hrl b/lib/ssl/src/ssl_connection.hrl
index 27489ca325..adb2e1debe 100644
--- a/lib/ssl/src/ssl_connection.hrl
+++ b/lib/ssl/src/ssl_connection.hrl
@@ -41,7 +41,7 @@
data_tag :: atom(), % ex tcp.
close_tag :: atom(), % ex tcp_closed
error_tag :: atom(), % ex tcp_error
- host :: string() | inet:ipaddress(),
+ host :: string() | inet:ip_address(),
port :: integer(),
socket :: port(),
ssl_options :: #ssl_options{},
diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl
index 2b9bae6e80..7b4cf8eb06 100644
--- a/lib/ssl/src/ssl_handshake.erl
+++ b/lib/ssl/src/ssl_handshake.erl
@@ -164,7 +164,7 @@ next_protocol(SelectedProtocol) ->
%%--------------------------------------------------------------------
-spec client_certificate_verify(undefined | der_cert(), binary(),
- tls_version(), term(), private_key(),
+ tls_version(), term(), public_key:private_key(),
tls_handshake_history()) ->
#certificate_verify{} | ignore | #alert{}.
%%
@@ -207,12 +207,12 @@ certificate_request(CipherSuite, CertDbHandle, CertDbRef, Version) ->
{premaster_secret, binary(), public_key_info()} |
{dh, binary()} |
{dh, {binary(), binary()}, #'DHParameter'{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()} |
+ binary(), binary(), public_key:private_key()} |
{ecdh, #'ECPrivateKey'{}} |
{psk, binary()} |
{dhe_psk, binary(), binary()} |
{srp, {binary(), binary()}, #srp_user{}, {HashAlgo::atom(), SignAlgo::atom()},
- binary(), binary(), private_key()}) ->
+ binary(), binary(), public_key:private_key()}) ->
#client_key_exchange{} | #server_key_exchange{}.
%%
@@ -1029,14 +1029,15 @@ cipher_suites(Suites, true) ->
select_session(SuggestedSessionId, CipherSuites, Compressions, Port, #session{ecc = ECCCurve} =
Session, Version,
- #ssl_options{ciphers = UserSuites} = SslOpts, Cache, CacheCb, Cert) ->
+ #ssl_options{ciphers = UserSuites, honor_cipher_order = HCO} = SslOpts,
+ Cache, CacheCb, Cert) ->
{SessionId, Resumed} = ssl_session:server_id(Port, SuggestedSessionId,
SslOpts, Cert,
Cache, CacheCb),
case Resumed of
undefined ->
Suites = available_suites(Cert, UserSuites, Version, ECCCurve),
- CipherSuite = select_cipher_suite(CipherSuites, Suites),
+ CipherSuite = select_cipher_suite(CipherSuites, Suites, HCO),
Compression = select_compression(Compressions),
{new, Session#session{session_id = SessionId,
cipher_suite = CipherSuite,
@@ -1796,6 +1797,11 @@ handle_srp_extension(#srp{username = Username}, Session) ->
%%-------------Misc --------------------------------
+select_cipher_suite(CipherSuites, Suites, false) ->
+ select_cipher_suite(CipherSuites, Suites);
+select_cipher_suite(CipherSuites, Suites, true) ->
+ select_cipher_suite(Suites, CipherSuites).
+
select_cipher_suite([], _) ->
no_suite;
select_cipher_suite([Suite | ClientSuites], SupportedSuites) ->
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 0186f9fca2..102215119d 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -35,7 +35,6 @@
-type certdb_ref() :: reference().
-type db_handle() :: term().
-type der_cert() :: binary().
--type private_key() :: #'RSAPrivateKey'{} | #'DSAPrivateKey'{} | #'ECPrivateKey'{}.
-type issuer() :: tuple().
-type serialnumber() :: integer().
-type cert_key() :: {reference(), integer(), issuer()}.
@@ -114,7 +113,10 @@
next_protocols_advertised = undefined, %% [binary()],
next_protocol_selector = undefined, %% fun([binary()]) -> binary())
log_alert :: boolean(),
- server_name_indication = undefined
+ server_name_indication = undefined,
+ %% Should the server prefer its own cipher order over the one provided by
+ %% the client?
+ honor_cipher_order = false
}).
-record(config, {ssl, %% SSL parameters
diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl
index 1006b23a30..ddc511c652 100644
--- a/lib/ssl/test/ssl_basic_SUITE.erl
+++ b/lib/ssl/test/ssl_basic_SUITE.erl
@@ -110,7 +110,10 @@ options_tests() ->
empty_protocol_versions,
ipv6,
reuseaddr,
- tcp_reuseaddr].
+ tcp_reuseaddr,
+ honor_server_cipher_order,
+ honor_client_cipher_order
+].
api_tests() ->
[connection_info,
@@ -2443,6 +2446,51 @@ tcp_reuseaddr(Config) when is_list(Config) ->
%%--------------------------------------------------------------------
+honor_server_cipher_order() ->
+ [{doc,"Test API honor server cipher order."}].
+honor_server_cipher_order(Config) when is_list(Config) ->
+ ClientCiphers = [{rsa, aes_128_cbc, sha}, {rsa, aes_256_cbc, sha}],
+ ServerCiphers = [{rsa, aes_256_cbc, sha}, {rsa, aes_128_cbc, sha}],
+honor_cipher_order(Config, true, ServerCiphers, ClientCiphers, {rsa, aes_256_cbc, sha}).
+
+honor_client_cipher_order() ->
+ [{doc,"Test API honor server cipher order."}].
+honor_client_cipher_order(Config) when is_list(Config) ->
+ ClientCiphers = [{rsa, aes_128_cbc, sha}, {rsa, aes_256_cbc, sha}],
+ ServerCiphers = [{rsa, aes_256_cbc, sha}, {rsa, aes_128_cbc, sha}],
+honor_cipher_order(Config, false, ServerCiphers, ClientCiphers, {rsa, aes_128_cbc, sha}).
+
+honor_cipher_order(Config, Honor, ServerCiphers, ClientCiphers, Expected) ->
+ ClientOpts = ?config(client_opts, Config),
+ ServerOpts = ?config(server_opts, Config),
+
+ {ClientNode, ServerNode, Hostname} = ssl_test_lib:run_where(Config),
+
+ Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0},
+ {from, self()},
+ {mfa, {?MODULE, connection_info_result, []}},
+ {options, [{ciphers, ServerCiphers}, {honor_cipher_order, Honor}
+ | ServerOpts]}]),
+ Port = ssl_test_lib:inet_port(Server),
+ Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port},
+ {host, Hostname},
+ {from, self()},
+ {mfa, {?MODULE, connection_info_result, []}},
+ {options, [{ciphers, ClientCiphers}, {honor_cipher_order, Honor}
+ | ClientOpts]}]),
+
+ Version =
+ tls_record:protocol_version(tls_record:highest_protocol_version([])),
+
+ ServerMsg = ClientMsg = {ok, {Version, Expected}},
+
+ ssl_test_lib:check_result(Server, ServerMsg, Client, ClientMsg),
+
+ ssl_test_lib:close(Server),
+ ssl_test_lib:close(Client).
+
+%%--------------------------------------------------------------------
+
hibernate() ->
[{doc,"Check that an SSL connection that is started with option "
"{hibernate_after, 1000} indeed hibernates after 1000ms of "
diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl
index 74fadc0cc7..7ed9adfcd9 100644
--- a/lib/ssl/test/ssl_test_lib.erl
+++ b/lib/ssl/test/ssl_test_lib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2008-2013. All Rights Reserved.
+%% Copyright Ericsson AB 2008-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -146,7 +146,7 @@ remove_close_msg(ReconnectTimes) ->
end.
start_client(Args) ->
- Result = spawn_link(?MODULE, run_client, [lists:delete(return_socket, Args)]),
+ Result = spawn_link(?MODULE, run_client_init, [lists:delete(return_socket, Args)]),
receive
{ connected, Socket } ->
case lists:member(return_socket, Args) of
@@ -155,6 +155,10 @@ start_client(Args) ->
end
end.
+run_client_init(Opts) ->
+ put(retries, 0),
+ run_client(Opts).
+
run_client(Opts) ->
Node = proplists:get_value(node, Opts),
Host = proplists:get_value(host, Opts),
@@ -189,9 +193,19 @@ run_client(Opts) ->
{gen_tcp, closed} ->
ok
end;
+ {error, econnrefused = Reason} ->
+ case get(retries) of
+ N when N < 5 ->
+ put(retries, N+1),
+ ct:sleep(?SLEEP),
+ run_client(Opts);
+ _ ->
+ ct:log("Client faild several times: connection failed: ~p ~n", [Reason]),
+ Pid ! {self(), {error, Reason}}
+ end;
{error, Reason} ->
ct:log("Client: connection failed: ~p ~n", [Reason]),
- Pid ! {self(), {error, Reason}}
+ Pid ! {self(), {error, Reason}}
end.
close(Pid) ->
diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl
index 4682a109af..68784a175e 100644
--- a/lib/ssl/test/ssl_to_openssl_SUITE.erl
+++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl
@@ -912,8 +912,16 @@ ssl2_erlang_server_openssl_client(Config) when is_list(Config) ->
{'EXIT', OpenSslPort, _} = Exit ->
ct:log("Received: ~p ~n", [Exit]),
ok
-
end,
+ receive
+ {'EXIT', _, _} = UnkownExit ->
+ Msg = lists:flatten(io_lib:format("Received: ~p ~n", [UnkownExit])),
+ ct:log(Msg),
+ ct:comment(Msg),
+ ok
+ after 0 ->
+ ok
+ end,
ssl_test_lib:check_result(Server, {error, {tls_alert, "protocol version"}}),
process_flag(trap_exit, false).
diff --git a/lib/stdlib/doc/src/unicode_usage.xml b/lib/stdlib/doc/src/unicode_usage.xml
index 33cd70e0b7..ee7dd128f1 100644
--- a/lib/stdlib/doc/src/unicode_usage.xml
+++ b/lib/stdlib/doc/src/unicode_usage.xml
@@ -52,8 +52,8 @@
for UTF-8 and more support for Unicode character sets in the
I/O-system.</p>
- <p>In R17, the encoding default for Erlang source files will be
- switched to UTF-8 and in R18 Erlang will support atoms in the full
+ <p>In 17.0, the encoding default for Erlang source files was
+ switched to UTF-8 and in 18.0 Erlang will support atoms in the full
Unicode range, meaning full Unicode function and module
names</p>
@@ -290,7 +290,7 @@
<item>Having the source code in UTF-8 also allows you to write
string literals containing Unicode characters with code points &gt;
255, although atoms, module names and function names will be
- restricted to the ISO-Latin-1 range until the R18 release. Binary
+ restricted to the ISO-Latin-1 range until the 18.0 release. Binary
literals where you use the <c>/utf8</c> type, can also be
expressed using Unicode characters &gt; 255. Having module names
using characters other than 7-bit ASCII can cause trouble on
@@ -385,7 +385,7 @@ external_charlist() = maybe_improper_list(char() |
using characters from the ISO-latin-1 character set and atoms are
restricted to the same ISO-latin-1 range. These restrictions in the
language are of course independent of the encoding of the source
- file. Erlang/OTP R18 is expected to handle functions named in
+ file. Erlang/OTP 18.0 is expected to handle functions named in
Unicode as well as Unicode atoms.</p>
<section>
<title>Bit-syntax</title>
@@ -662,11 +662,14 @@ Eshell V5.10.1 (abort with ^G)
containing characters having code points between 128 and 255 may
be named either as plain ISO-latin-1 or using UTF-8 encoding. As
no consistency is enforced, the Erlang VM can do no consistent
- translation of all file names. If the VM would automatically
- select encoding based on heuristics, one could get unexpected
- behavior on these systems. By default, Erlang starts in "latin1"
- file name mode on such systems, meaning bytewise encoding in file
- names. This allows for list representation of all file names in
+ translation of all file names.</p>
+
+ <p>By default on such systems, Erlang starts in <c>utf8</c> file
+ name mode if the terminal supports UTF-8, otherwise in
+ <c>latin1</c> mode.</p>
+
+ <p>In the <c>latin1</c> mode, file names are bytewise endcoded.
+ This allows for list representation of all file names in
the system, but, for example, a file named "Östersund.txt", will
appear in <c>file:list_dir/1</c> as either "Östersund.txt" (if
the file name was encoded in bytewise ISO-Latin-1 by the program
@@ -752,7 +755,7 @@ Eshell V5.10.1 (abort with ^G)
<section>
<title>Notes About Raw File Names</title>
-
+ <marker id="notes-about-raw-filenames"/>
<p>Raw file names were introduced together with Unicode file name
support in erts-5.8.2 (OTP R14B01). The reason &quot;raw file
names&quot; was introduced in the system was to be able to
@@ -1014,7 +1017,8 @@ ok
allowed. This setting should correspond to the actual terminal
you are using.</p>
<p>The environment can also affect file name interpretation, if
- Erlang is started with the <c>+fna</c> flag.</p>
+ Erlang is started with the <c>+fna</c> flag (which is default from
+ Erlang/OTP 17.0).</p>
<p>You can check the setting of this by calling
<c>io:getopts()</c>, which will give you an option list
containing <c>{encoding,unicode}</c> or
@@ -1046,8 +1050,7 @@ ok
&gt; 255.</p>
<p><c>+fnl</c> means bytewise interpretation of file names, which
was the usual way to represent ISO-Latin-1 file names before
- UTF-8 file naming got widespread. This is the default on all
- Unix-like operating systems except MacOS X.</p>
+ UTF-8 file naming got widespread.</p>
<p><c>+fnu</c> means that file names are encoded in UTF-8, which
is nowadays the common scheme (although not enforced).</p>
<p><c>+fna</c> means that you automatically select between
@@ -1055,8 +1058,8 @@ ok
<c>LC_CTYPE</c> environment variables. This is optimistic
heuristics indeed, nothing enforces a user to have a terminal
with the same encoding as the file system, but usually, this is
- the case. This might be the default behavior in a future
- release.</p>
+ the case. This is the default on all Unix-like operating
+ systems except MacOS X.</p>
<p>The file name translation mode can be read with the
<c>file:native_name_encoding/0</c> function, which returns
@@ -1068,7 +1071,7 @@ ok
<p>This function returns the default encoding for Erlang source
files (if no encoding comment is present) in the currently
running release. For R16 this returns <c>latin1</c> (meaning
- bytewise encoding). In R17 and forward it is expected to return
+ bytewise encoding). In 17.0 and forward it returns
<c>utf8</c>.</p>
<p>The encoding of each file can be specified using comments as
described in
diff --git a/lib/stdlib/examples/erl_id_trans.erl b/lib/stdlib/examples/erl_id_trans.erl
index 2c842fafc7..5fcb74310e 100644
--- a/lib/stdlib/examples/erl_id_trans.erl
+++ b/lib/stdlib/examples/erl_id_trans.erl
@@ -144,6 +144,13 @@ pattern({cons,Line,H0,T0}) ->
pattern({tuple,Line,Ps0}) ->
Ps1 = pattern_list(Ps0),
{tuple,Line,Ps1};
+pattern({map,Line,Ps0}) ->
+ Ps1 = pattern_list(Ps0),
+ {map,Line,Ps1};
+pattern({map_field_exact,Line,K,V}) ->
+ Ke = pattern(K),
+ Ve = pattern(V),
+ {map_field_exact,Line,Ke,Ve};
%%pattern({struct,Line,Tag,Ps0}) ->
%% Ps1 = pattern_list(Ps0),
%% {struct,Line,Tag,Ps1};
@@ -251,6 +258,20 @@ gexpr({float,Line,F}) -> {float,Line,F};
gexpr({atom,Line,A}) -> {atom,Line,A};
gexpr({string,Line,S}) -> {string,Line,S};
gexpr({nil,Line}) -> {nil,Line};
+gexpr({map,Line,Map0,Es0}) ->
+ [Map1|Es1] = gexpr_list([Map0|Es0]),
+ {map,Line,Map1,Es1};
+gexpr({map,Line,Es0}) ->
+ Es1 = gexpr_list(Es0),
+ {map,Line,Es1};
+gexpr({map_field_assoc,Line,K,V}) ->
+ Ke = gexpr(K),
+ Ve = gexpr(V),
+ {map_field_assoc,Line,Ke,Ve};
+gexpr({map_field_exact,Line,K,V}) ->
+ Ke = gexpr(K),
+ Ve = gexpr(V),
+ {map_field_exact,Line,Ke,Ve};
gexpr({cons,Line,H0,T0}) ->
H1 = gexpr(H0),
T1 = gexpr(T0), %They see the same variables
@@ -356,6 +377,20 @@ expr({bc,Line,E0,Qs0}) ->
expr({tuple,Line,Es0}) ->
Es1 = expr_list(Es0),
{tuple,Line,Es1};
+expr({map,Line,Map0,Es0}) ->
+ [Map1|Es1] = exprs([Map0|Es0]),
+ {map,Line,Map1,Es1};
+expr({map,Line,Es0}) ->
+ Es1 = exprs(Es0),
+ {map,Line,Es1};
+expr({map_field_assoc,Line,K,V}) ->
+ Ke = expr(K),
+ Ve = expr(V),
+ {map_field_assoc,Line,Ke,Ve};
+expr({map_field_exact,Line,K,V}) ->
+ Ke = expr(K),
+ Ve = expr(V),
+ {map_field_exact,Line,Ke,Ve};
%%expr({struct,Line,Tag,Es0}) ->
%% Es1 = pattern_list(Es0),
%% {struct,Line,Tag,Es1};
diff --git a/lib/stdlib/src/Makefile b/lib/stdlib/src/Makefile
index f3387d669b..9ab2cd4134 100644
--- a/lib/stdlib/src/Makefile
+++ b/lib/stdlib/src/Makefile
@@ -91,6 +91,7 @@ MODULES= \
lib \
lists \
log_mf_h \
+ maps \
math \
ms_transform \
otp_internal \
diff --git a/lib/stdlib/src/erl_eval.erl b/lib/stdlib/src/erl_eval.erl
index 18d8148b15..5f96795d92 100644
--- a/lib/stdlib/src/erl_eval.erl
+++ b/lib/stdlib/src/erl_eval.erl
@@ -239,6 +239,29 @@ expr({record,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
erlang:raise(error, {undef_record,Name}, stacktrace());
expr({record,_,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
erlang:raise(error, {undef_record,Name}, stacktrace());
+
+%% map
+expr({map_field_assoc,_,EK, EV}, Bs0, Lf, Ef, RBs) ->
+ {value,K,Bs1} = expr(EK, Bs0, Lf, Ef, none),
+ {value,V,Bs2} = expr(EV, Bs0, Lf, Ef, none),
+ ret_expr({map_assoc,K,V}, merge_bindings(Bs1,Bs2), RBs);
+expr({map_field_exact,_,EK, EV}, Bs0, Lf, Ef, RBs) ->
+ {value,K,Bs1} = expr(EK, Bs0, Lf, Ef, none),
+ {value,V,Bs2} = expr(EV, Bs0, Lf, Ef, none),
+ ret_expr({map_exact,K,V}, merge_bindings(Bs1,Bs2), RBs);
+expr({map,_, Binding,Es}, Bs0, Lf, Ef, RBs) ->
+ {value, Map0, Bs1} = expr(Binding, Bs0, Lf, Ef, RBs),
+ {Vs,Bs} = expr_list(Es, Bs1, Lf, Ef),
+ ret_expr(lists:foldl(fun
+ ({map_assoc,K,V}, Mi) -> maps:put(K,V,Mi);
+ ({map_exact,K,V}, Mi) -> maps:update(K,V,Mi)
+ end, Map0, Vs), Bs, RBs);
+expr({map,_,Es}, Bs0, Lf, Ef, RBs) ->
+ {Vs,Bs} = expr_list(Es, Bs0, Lf, Ef),
+ ret_expr(lists:foldl(fun
+ ({map_assoc,K,V}, Mi) -> maps:put(K,V,Mi)
+ end, maps:new(), Vs), Bs, RBs);
+
expr({block,_,Es}, Bs, Lf, Ef, RBs) ->
exprs(Es, Bs, Lf, Ef, RBs);
expr({'if',_,Cs}, Bs, Lf, Ef, RBs) ->
@@ -994,6 +1017,7 @@ type_test(port) -> is_port;
type_test(function) -> is_function;
type_test(binary) -> is_binary;
type_test(record) -> is_record;
+type_test(map) -> is_map;
type_test(Test) -> Test.
@@ -1075,6 +1099,9 @@ match1({tuple,_,Elts}, Tuple, Bs, BBs)
match_tuple(Elts, Tuple, 1, Bs, BBs);
match1({tuple,_,_}, _, _Bs, _BBs) ->
throw(nomatch);
+match1({map,_,Fs}, Map, Bs, BBs) ->
+ match_map(Fs, Map, Bs, BBs);
+
match1({bin, _, Fs}, <<_/bitstring>>=B, Bs0, BBs) ->
eval_bits:match_bits(Fs, B, Bs0, BBs,
match_fun(BBs),
@@ -1118,6 +1145,18 @@ match_tuple([E|Es], Tuple, I, Bs0, BBs) ->
match_tuple([], _, _, Bs, _BBs) ->
{match,Bs}.
+match_map([{map_field_exact, _, K, V}|Fs], Map, Bs0, BBs) ->
+ Vm = try
+ {value, Ke, _} = expr(K, new_bindings()),
+ maps:get(Ke,Map)
+ catch error:_ ->
+ throw(nomatch)
+ end,
+ {match, Bs} = match1(V, Vm, Bs0, BBs),
+ match_map(Fs, Map, Bs, BBs);
+match_map([], _, Bs, _) ->
+ {match, Bs}.
+
%% match_list(PatternList, TermList, Bindings) ->
%% {match,NewBindings} | nomatch
%% Try to match a list of patterns against a list of terms with the
diff --git a/lib/stdlib/src/erl_expand_records.erl b/lib/stdlib/src/erl_expand_records.erl
index 776b433613..4741bef6b9 100644
--- a/lib/stdlib/src/erl_expand_records.erl
+++ b/lib/stdlib/src/erl_expand_records.erl
@@ -132,6 +132,12 @@ pattern({cons,Line,H,T}, St0) ->
pattern({tuple,Line,Ps}, St0) ->
{TPs,St1} = pattern_list(Ps, St0),
{{tuple,Line,TPs},St1};
+pattern({map,Line,Ps}, St0) ->
+ {TPs,St1} = pattern_list(Ps, St0),
+ {{map,Line,TPs},St1};
+pattern({map_field_exact,Line,Key,V0}, St0) ->
+ {V,St1} = pattern(V0, St0),
+ {{map_field_exact,Line,Key,V},St1};
%%pattern({struct,Line,Tag,Ps}, St0) ->
%% {TPs,TPsvs,St1} = pattern_list(Ps, St0),
%% {{struct,Line,Tag,TPs},TPsvs,St1};
@@ -301,6 +307,20 @@ expr({bc,Line,E0,Qs0}, St0) ->
expr({tuple,Line,Es0}, St0) ->
{Es1,St1} = expr_list(Es0, St0),
{{tuple,Line,Es1},St1};
+expr({map,Line,Es0}, St0) ->
+ {Es1,St1} = expr_list(Es0, St0),
+ {{map,Line,Es1},St1};
+expr({map,Line,Var,Es0}, St0) ->
+ {Es1,St1} = expr_list(Es0, St0),
+ {{map,Line,Var,Es1},St1};
+expr({map_field_assoc,Line,K0,V0}, St0) ->
+ {K,St1} = expr(K0, St0),
+ {V,St2} = expr(V0, St1),
+ {{map_field_assoc,Line,K,V},St2};
+expr({map_field_exact,Line,K0,V0}, St0) ->
+ {K,St1} = expr(K0, St0),
+ {V,St2} = expr(V0, St1),
+ {{map_field_exact,Line,K,V},St2};
%%expr({struct,Line,Tag,Es0}, Vs, St0) ->
%% {Es1,Esvs,Esus,St1} = expr_list(Es0, Vs, St0),
%% {{struct,Line,Tag,Es1},Esvs,Esus,St1};
diff --git a/lib/stdlib/src/erl_internal.erl b/lib/stdlib/src/erl_internal.erl
index 28de7205ea..edfb097de0 100644
--- a/lib/stdlib/src/erl_internal.erl
+++ b/lib/stdlib/src/erl_internal.erl
@@ -70,6 +70,7 @@ guard_bif(bit_size, 1) -> true;
guard_bif(byte_size, 1) -> true;
guard_bif(element, 2) -> true;
guard_bif(self, 0) -> true;
+guard_bif(map_size, 1) -> true;
guard_bif(node, 0) -> true;
guard_bif(node, 1) -> true;
guard_bif(tuple_size, 1) -> true;
@@ -82,6 +83,7 @@ guard_bif(is_function, 1) -> true;
guard_bif(is_function, 2) -> true;
guard_bif(is_integer, 1) -> true;
guard_bif(is_list, 1) -> true;
+guard_bif(is_map, 1) -> true;
guard_bif(is_number, 1) -> true;
guard_bif(is_pid, 1) -> true;
guard_bif(is_port, 1) -> true;
@@ -113,6 +115,7 @@ new_type_test(is_function, 1) -> true;
new_type_test(is_function, 2) -> true;
new_type_test(is_integer, 1) -> true;
new_type_test(is_list, 1) -> true;
+new_type_test(is_map, 1) -> true;
new_type_test(is_number, 1) -> true;
new_type_test(is_pid, 1) -> true;
new_type_test(is_port, 1) -> true;
@@ -315,6 +318,7 @@ bif(is_function, 1) -> true;
bif(is_function, 2) -> true;
bif(is_integer, 1) -> true;
bif(is_list, 1) -> true;
+bif(is_map, 1) -> true;
bif(is_number, 1) -> true;
bif(is_pid, 1) -> true;
bif(is_port, 1) -> true;
@@ -335,6 +339,7 @@ bif(list_to_pid, 1) -> true;
bif(list_to_tuple, 1) -> true;
bif(load_module, 2) -> true;
bif(make_ref, 0) -> true;
+bif(map_size,1) -> true;
bif(max,2) -> true;
bif(min,2) -> true;
bif(module_loaded, 1) -> true;
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index cf01e1f8cf..f630db6032 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -225,6 +225,8 @@ format_error({too_many_arguments,Arity}) ->
"maximum allowed is ~w", [Arity,?MAX_ARGUMENTS]);
%% --- patterns and guards ---
format_error(illegal_pattern) -> "illegal pattern";
+format_error({illegal_map_key_variable,K}) ->
+ io_lib:format("illegal use of variable ~w in map",[K]);
format_error(illegal_bin_pattern) ->
"binary patterns cannot be matched in parallel using '='";
format_error(illegal_expr) -> "illegal expression";
@@ -232,6 +234,9 @@ format_error({illegal_guard_local_call, {F,A}}) ->
io_lib:format("call to local/imported function ~w/~w is illegal in guard",
[F,A]);
format_error(illegal_guard_expr) -> "illegal guard expression";
+%% --- maps ---
+format_error(illegal_map_construction) ->
+ "only association operators '=>' are allowed in map construction";
%% --- records ---
format_error({undefined_record,T}) ->
io_lib:format("record ~w undefined", [T]);
@@ -844,8 +849,9 @@ behaviour_callbacks(Line, B, St0) ->
{[], St1}
end.
-behaviour_missing_callbacks([{{Line,B},Bfs}|T], #lint{exports=Exp}=St0) ->
- Missing = ordsets:subtract(ordsets:from_list(Bfs), gb_sets:to_list(Exp)),
+behaviour_missing_callbacks([{{Line,B},Bfs}|T], St0) ->
+ Exports = gb_sets:to_list(exports(St0)),
+ Missing = ordsets:subtract(ordsets:from_list(Bfs), Exports),
St = foldl(fun (F, S0) ->
add_warning(Line, {undefined_behaviour_func,F,B}, S0)
end, St0, Missing),
@@ -1149,6 +1155,14 @@ export_type(Line, ETs, #lint{usage = Usage, exp_types = ETs0} = St0) ->
add_error(Line, {bad_export_type, ETs}, St0)
end.
+-spec exports(lint_state()) -> gb_set().
+
+exports(#lint{compile = Opts, defined = Defs, exports = Es}) ->
+ case lists:member(export_all, Opts) of
+ true -> Defs;
+ false -> Es
+ end.
+
-type import() :: {module(), [fa()]} | module().
-spec import(line(), import(), lint_state()) -> lint_state().
@@ -1357,6 +1371,19 @@ pattern({cons,_Line,H,T}, Vt, Old, Bvt, St0) ->
{vtmerge_pat(Hvt, Tvt),vtmerge_pat(Bvt1,Bvt2),St2};
pattern({tuple,_Line,Ps}, Vt, Old, Bvt, St) ->
pattern_list(Ps, Vt, Old, Bvt, St);
+pattern({map,_Line,Ps}, Vt, Old, Bvt, St) ->
+ pattern_list(Ps, Vt, Old, Bvt, St);
+pattern({map_field_assoc,Line,_,_}, _, _, _, St) ->
+ {[],[],add_error(Line, illegal_pattern, St)};
+pattern({map_field_exact,Line,KP,VP}, Vt, Old, Bvt0, St0) ->
+ %% if the key pattern has variables we should fail
+ case expr(KP,[],St0) of
+ {[],_} ->
+ pattern(VP, Vt, Old, Bvt0, St0);
+ {[Var|_],_} ->
+ %% found variables in key expression
+ {Vt,Old,add_error(Line,{illegal_map_key_variable,element(1,Var)},St0)}
+ end;
%%pattern({struct,_Line,_Tag,Ps}, Vt, Old, Bvt, St) ->
%% pattern_list(Ps, Vt, Old, Bvt, St);
pattern({record_index,Line,Name,Field}, _Vt, _Old, _Bvt, St) ->
@@ -1744,6 +1771,14 @@ gexpr({cons,_Line,H,T}, Vt, St) ->
gexpr_list([H,T], Vt, St);
gexpr({tuple,_Line,Es}, Vt, St) ->
gexpr_list(Es, Vt, St);
+gexpr({map,_Line,Es}, Vt, St) ->
+ gexpr_list(Es, Vt, St);
+gexpr({map,_Line,Src,Es}, Vt, St) ->
+ gexpr_list([Src|Es], Vt, St);
+gexpr({map_field_assoc,_Line,K,V}, Vt, St) ->
+ gexpr_list([K,V], Vt, St);
+gexpr({map_field_exact,_Line,K,V}, Vt, St) ->
+ gexpr_list([K,V], Vt, St);
gexpr({record_index,Line,Name,Field}, _Vt, St) ->
check_record(Line, Name, St,
fun (Dfs, St1) -> record_field(Field, Name, Dfs, St1) end );
@@ -1961,6 +1996,24 @@ expr({bc,_Line,E,Qs}, Vt, St) ->
handle_comprehension(E, Qs, Vt, St);
expr({tuple,_Line,Es}, Vt, St) ->
expr_list(Es, Vt, St);
+expr({map,Line,Es}, Vt, St) ->
+ {Rvt,St1} = expr_list(Es,Vt,St),
+ case is_valid_map_construction(Es) of
+ true -> {Rvt,St1};
+ false -> {[],add_error(Line,illegal_map_construction,St1)}
+ end;
+expr({map,_Line,Src,Es}, Vt, St) ->
+ expr_list([Src|Es], Vt, St);
+expr({map_field_assoc,Line,K,V}, Vt, St) ->
+ case is_valid_map_key(K,St) of
+ true -> expr_list([K,V], Vt, St);
+ {false,Var} -> {[],add_error(Line,{illegal_map_key_variable,Var},St)}
+ end;
+expr({map_field_exact,Line,K,V}, Vt, St) ->
+ case is_valid_map_key(K,St) of
+ true -> expr_list([K,V], Vt, St);
+ {false,Var} -> {[],add_error(Line,{illegal_map_key_variable,Var},St)}
+ end;
expr({record_index,Line,Name,Field}, _Vt, St) ->
check_record(Line, Name, St,
fun (Dfs, St1) -> record_field(Field, Name, Dfs, St1) end);
@@ -2220,6 +2273,20 @@ is_valid_call(Call) ->
_ -> true
end.
+%% check_map_construction
+%% Only #{ K => V }, i.e. assoc is a valid construction
+is_valid_map_construction([{map_field_assoc,_,_,_}|Es]) ->
+ is_valid_map_construction(Es);
+is_valid_map_construction([]) -> true;
+is_valid_map_construction(_) -> false.
+
+is_valid_map_key(K,St) ->
+ case expr(K,[],St) of
+ {[],_} -> true;
+ {[Var|_],_} ->
+ {false,element(1,Var)}
+ end.
+
%% record_def(Line, RecordName, [RecField], State) -> State.
%% Add a record definition if it does not already exist. Normalise
%% so that all fields have explicit initial value.
@@ -2540,6 +2607,13 @@ check_type({type, L, range, [From, To]}, SeenVars, St) ->
_ -> add_error(L, {type_syntax, range}, St)
end,
{SeenVars, St1};
+check_type({type, _L, map, any}, SeenVars, St) -> {SeenVars, St};
+check_type({type, _L, map, Pairs}, SeenVars, St) ->
+ lists:foldl(fun(Pair, {AccSeenVars, AccSt}) ->
+ check_type(Pair, AccSeenVars, AccSt)
+ end, {SeenVars, St}, Pairs);
+check_type({type, _L, map_field_assoc, Dom, Range}, SeenVars, St) ->
+ check_type({type, -1, product, [Dom, Range]}, SeenVars, St);
check_type({type, _L, tuple, any}, SeenVars, St) -> {SeenVars, St};
check_type({type, _L, any}, SeenVars, St) -> {SeenVars, St};
check_type({type, L, binary, [Base, Unit]}, SeenVars, St) ->
@@ -2645,6 +2719,7 @@ is_default_type({iodata, 0}) -> true;
is_default_type({iolist, 0}) -> true;
is_default_type({list, 0}) -> true;
is_default_type({list, 1}) -> true;
+is_default_type({map, 0}) -> true;
is_default_type({maybe_improper_list, 0}) -> true;
is_default_type({maybe_improper_list, 2}) -> true;
is_default_type({mfa, 0}) -> true;
diff --git a/lib/stdlib/src/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl
index 59a05a48ee..6316db7054 100644
--- a/lib/stdlib/src/erl_parse.yrl
+++ b/lib/stdlib/src/erl_parse.yrl
@@ -34,6 +34,7 @@ binary_comprehension
tuple
%struct
record_expr record_tuple record_field record_fields
+map_expr map_tuple map_field map_field_assoc map_field_exact map_fields map_key
if_expr if_clause if_clauses case_expr cr_clause cr_clauses receive_expr
fun_expr fun_clause fun_clauses atom_or_var integer_or_var
try_expr try_catch try_clause try_clauses
@@ -47,6 +48,7 @@ opt_bit_size_expr bit_size_expr opt_bit_type_list bit_type_list bit_type
top_type top_type_100 top_types type typed_expr typed_attr_val
type_sig type_sigs type_guard type_guards fun_type fun_type_100 binary_type
type_spec spec_fun typed_exprs typed_record_fields field_types field_type
+map_pair_types map_pair_type
bin_base_type bin_unit_type type_200 type_300 type_400 type_500.
Terminals
@@ -59,7 +61,7 @@ char integer float atom string var
'*' '/' 'div' 'rem' 'band' 'and'
'+' '-' 'bor' 'bxor' 'bsl' 'bsr' 'or' 'xor'
'++' '--'
-'==' '/=' '=<' '<' '>=' '>' '=:=' '=/=' '<='
+'==' '/=' '=<' '<' '>=' '>' '=:=' '=/=' '<=' '=>' ':='
'<<' '>>'
'!' '=' '::' '..' '...'
'spec' 'callback' % helper
@@ -154,6 +156,8 @@ type -> '[' ']' : {type, ?line('$1'), nil, []}.
type -> '[' top_type ']' : {type, ?line('$1'), list, ['$2']}.
type -> '[' top_type ',' '...' ']' : {type, ?line('$1'),
nonempty_list, ['$2']}.
+type -> '#' '{' '}' : {type, ?line('$1'), map, []}.
+type -> '#' '{' map_pair_types '}' : {type, ?line('$1'), map, '$3'}.
type -> '{' '}' : {type, ?line('$1'), tuple, []}.
type -> '{' top_types '}' : {type, ?line('$1'), tuple, '$2'}.
type -> '#' atom '{' '}' : {type, ?line('$1'), record, ['$2']}.
@@ -175,6 +179,10 @@ fun_type -> '(' top_types ')' '->' top_type
: {type, ?line('$1'), 'fun',
[{type, ?line('$1'), product, '$2'},'$5']}.
+map_pair_types -> map_pair_type : ['$1'].
+map_pair_types -> map_pair_type ',' map_pair_types : ['$1'|'$3'].
+map_pair_type -> top_type '=>' top_type : {type, ?line('$2'), map_field_assoc,'$1','$3'}.
+
field_types -> field_type : ['$1'].
field_types -> field_type ',' field_types : ['$1'|'$3'].
@@ -247,6 +255,7 @@ expr_500 -> expr_600 : '$1'.
expr_600 -> prefix_op expr_700 :
?mkop1('$1', '$2').
+expr_600 -> map_expr : '$1'.
expr_600 -> expr_700 : '$1'.
expr_700 -> function_call : '$1'.
@@ -327,6 +336,30 @@ tuple -> '{' exprs '}' : {tuple,?line('$1'),'$2'}.
%%struct -> atom tuple :
%% {struct,?line('$1'),element(3, '$1'),element(3, '$2')}.
+map_expr -> '#' map_tuple :
+ {map, ?line('$1'),'$2'}.
+map_expr -> expr_max '#' map_tuple :
+ {map, ?line('$2'),'$1','$3'}.
+map_expr -> map_expr '#' map_tuple :
+ {map, ?line('$2'),'$1','$3'}.
+
+map_tuple -> '{' '}' : [].
+map_tuple -> '{' map_fields '}' : '$2'.
+
+map_fields -> map_field : ['$1'].
+map_fields -> map_field ',' map_fields : ['$1' | '$3'].
+
+map_field -> map_field_assoc : '$1'.
+map_field -> map_field_exact : '$1'.
+
+map_field_assoc -> map_key '=>' expr :
+ {map_field_assoc,?line('$1'),'$1','$3'}.
+
+map_field_exact -> map_key ':=' expr :
+ {map_field_exact,?line('$1'),'$1','$3'}.
+
+map_key -> expr : '$1'.
+
%% N.B. This is called from expr_700.
%% N.B. Field names are returned as the complete object, even if they are
@@ -648,6 +681,8 @@ skip_paren(Type) ->
build_gen_type({atom, La, tuple}) ->
{type, La, tuple, any};
+build_gen_type({atom, La, map}) ->
+ {type, La, map, any};
build_gen_type({atom, La, Name}) ->
{type, La, Name, []}.
@@ -860,6 +895,12 @@ normalise({cons,_,Head,Tail}) ->
[normalise(Head)|normalise(Tail)];
normalise({tuple,_,Args}) ->
list_to_tuple(normalise_list(Args));
+normalise({map,_,Pairs}=M) ->
+ maps:from_list(lists:map(fun
+ %% only allow '=>'
+ ({map_field_assoc,_,K,V}) -> {normalise(K),normalise(V)};
+ (_) -> erlang:error({badarg,M})
+ end, Pairs));
%% Special case for unary +/-.
normalise({op,_,'+',{char,_,I}}) -> I;
normalise({op,_,'+',{integer,_,I}}) -> I;
@@ -1060,3 +1101,5 @@ get_attribute(L, Name) ->
get_attributes(L) ->
erl_scan:attributes_info(L).
+
+%% vim: ft=erlang
diff --git a/lib/stdlib/src/erl_scan.erl b/lib/stdlib/src/erl_scan.erl
index 4ba6dd01fa..ae59d5f44f 100644
--- a/lib/stdlib/src/erl_scan.erl
+++ b/lib/stdlib/src/erl_scan.erl
@@ -569,7 +569,7 @@ scan1("++"++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, "++", '++', 2);
scan1("+"=Cs, _St, Line, Col, Toks) ->
{more,{Cs,Col,Toks,Line,[],fun scan/6}};
-%% =:= =/= =< ==
+%% =:= =/= =< == =>
scan1("=:="++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, "=:=", '=:=', 3);
scan1("=:"=Cs, _St, Line, Col, Toks) ->
@@ -580,6 +580,8 @@ scan1("=/"=Cs, _St, Line, Col, Toks) ->
{more,{Cs,Col,Toks,Line,[],fun scan/6}};
scan1("=<"++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, "=<", '=<', 2);
+scan1("=>"++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, "=>", '=>', 2);
scan1("=="++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, "==", '==', 2);
scan1("="=Cs, _St, Line, Col, Toks) ->
@@ -594,6 +596,9 @@ scan1("||"++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, "||", '||', 2);
scan1("|"=Cs, _St, Line, Col, Toks) ->
{more,{Cs,Col,Toks,Line,[],fun scan/6}};
+%% :=
+scan1(":="++Cs, St, Line, Col, Toks) ->
+ tok2(Cs, St, Line, Col, Toks, ":=", ':=', 2);
%% :-
scan1(":-"++Cs, St, Line, Col, Toks) ->
tok2(Cs, St, Line, Col, Toks, ":-", ':-', 2);
diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl
index 375d05f359..adc9a0cf5f 100644
--- a/lib/stdlib/src/io_lib.erl
+++ b/lib/stdlib/src/io_lib.erl
@@ -257,7 +257,9 @@ write(T, D) when is_tuple(T) ->
[write(element(1, T), D-1)|
write_tail(tl(tuple_to_list(T)), D-1, $,)],
$}]
- end.
+ end;
+%write(Term, D) when is_map(Term) -> write_map(Term, D);
+write(Term, D) -> write_map(Term, D).
%% write_tail(List, Depth, CharacterBeforeDots)
%% Test the terminating case first as this looks better with depth.
@@ -275,6 +277,18 @@ write_port(Port) ->
write_ref(Ref) ->
erlang:ref_to_list(Ref).
+write_map(Map, D) when is_integer(D) ->
+ [$#,${,write_map_body(maps:to_list(Map), D),$}].
+
+write_map_body(_, 0) -> "...";
+write_map_body([],_) -> [];
+write_map_body([{K,V}],D) -> write_map_assoc(K,V,D);
+write_map_body([{K,V}|KVs], D) ->
+ [write_map_assoc(K,V,D),$, | write_map_body(KVs,D-1)].
+
+write_map_assoc(K,V,D) ->
+ [write(K,D - 1),"=>",write(V,D-1)].
+
write_binary(B, D) when is_integer(D) ->
[$<,$<,write_binary_body(B, D),$>,$>].
diff --git a/lib/stdlib/src/io_lib_pretty.erl b/lib/stdlib/src/io_lib_pretty.erl
index 7637ad7a3d..f02a7921f8 100644
--- a/lib/stdlib/src/io_lib_pretty.erl
+++ b/lib/stdlib/src/io_lib_pretty.erl
@@ -101,6 +101,7 @@ print(Term, Col, Ll, D, M, RecDefFun, Enc, Str) when Col =< 0 ->
print(Term, 1, Ll, D, M, RecDefFun, Enc, Str);
print(Term, Col, Ll, D, M0, RecDefFun, Enc, Str) when is_tuple(Term);
is_list(Term);
+ is_map(Term);
is_bitstring(Term) ->
If = {_S, Len} = print_length(Term, D, RecDefFun, Enc, Str),
M = max_cs(M0, Len),
@@ -137,6 +138,10 @@ pp({{tuple,true,L}, _Len}, Col, Ll, M, TInd, Ind, LD, W) ->
[${, pp_tag_tuple(L, Col, Ll, M, TInd, Ind, LD, W + 1), $}];
pp({{tuple,false,L}, _Len}, Col, Ll, M, TInd, Ind, LD, W) ->
[${, pp_list(L, Col + 1, Ll, M, TInd, indent(1, Ind), LD, $,, W + 1), $}];
+pp({{map,Pairs},_Len}, Col, Ll, M, TInd, Ind, LD, W) ->
+ [$#,${, pp_list(Pairs, Col + 2, Ll, M, TInd, indent(2, Ind), LD, $,, W + 1), $}];
+pp({{map_pair,K,V},_Len}, Col, Ll, M, TInd, Ind, LD, W) ->
+ [pp(K, Col, Ll, M, TInd, Ind, LD, W), " => ", pp(V, Col, Ll, M, TInd, Ind, LD, W)];
pp({{record,[{Name,NLen} | L]}, _Len}, Col, Ll, M, TInd, Ind, LD, W) ->
[Name, ${, pp_record(L, NLen, Col, Ll, M, TInd, Ind, LD, W + NLen+1), $}];
pp({{bin,S}, _Len}, Col, Ll, M, _TInd, Ind, LD, W) ->
@@ -283,6 +288,10 @@ write({{tuple, _IsTagged, L}, _}) ->
[${, write_list(L, $,), $}];
write({{list, L}, _}) ->
[$[, write_list(L, $|), $]];
+write({{map, Pairs}, _}) ->
+ [$#,${, write_list(Pairs, $,), $}];
+write({{map_pair, K, V}, _}) ->
+ [write(K)," => ",write(V)];
write({{record, [{Name,_} | L]}, _}) ->
[Name, ${, write_fields(L), $}];
write({{bin, S}, _}) ->
@@ -331,6 +340,8 @@ print_length([], _D, _RF, _Enc, _Str) ->
{"[]", 2};
print_length({}, _D, _RF, _Enc, _Str) ->
{"{}", 2};
+print_length(#{}=M, _D, _RF, _Enc, _Str) when map_size(M) =:= 0 ->
+ {"#{}", 3};
print_length(List, D, RF, Enc, Str) when is_list(List) ->
case Str andalso printable_list(List, D, Enc) of
true ->
@@ -356,6 +367,8 @@ print_length(R, D, RF, Enc, Str) when is_atom(element(1, R)),
end;
print_length(Tuple, D, RF, Enc, Str) when is_tuple(Tuple) ->
print_length_tuple(Tuple, D, RF, Enc, Str);
+print_length(Map, D, RF, Enc, Str) when is_map(Map) ->
+ print_length_map(Map, D, RF, Enc, Str);
print_length(<<>>, _D, _RF, _Enc, _Str) ->
{"<<>>", 4};
print_length(<<_/bitstring>>, 1, _RF, _Enc, _Str) ->
@@ -389,6 +402,25 @@ print_length(Term, _D, _RF, _Enc, _Str) ->
S = io_lib:write(Term),
{S, lists:flatlength(S)}.
+print_length_map(_Map, 1, _RF, _Enc, _Str) ->
+ {"#{...}", 6};
+print_length_map(Map, D, RF, Enc, Str) when is_map(Map) ->
+ Pairs = print_length_map_pairs(maps:to_list(Map), D, RF, Enc, Str),
+ {{map, Pairs}, list_length(Pairs, 3)}.
+
+print_length_map_pairs([], _D, _RF, _Enc, _Str) ->
+ [];
+print_length_map_pairs(_Pairs, 1, _RF, _Enc, _Str) ->
+ {dots, 3};
+print_length_map_pairs([{K,V}|Pairs], D, RF, Enc, Str) ->
+ [print_length_map_pair(K,V,D-1,RF,Enc,Str) |
+ print_length_map_pairs(Pairs,D-1,RF,Enc,Str)].
+
+print_length_map_pair(K, V, D, RF, Enc, Str) ->
+ {KS, KL} = print_length(K, D, RF, Enc, Str),
+ {VS, VL} = print_length(V, D, RF, Enc, Str),
+ {{map_pair, {KS,KL}, {VS,VL}}, KL + VL}.
+
print_length_tuple(_Tuple, 1, _RF, _Enc, _Str) ->
{"{...}", 5};
print_length_tuple(Tuple, D, RF, Enc, Str) ->
diff --git a/lib/stdlib/src/maps.erl b/lib/stdlib/src/maps.erl
new file mode 100644
index 0000000000..41de174e7d
--- /dev/null
+++ b/lib/stdlib/src/maps.erl
@@ -0,0 +1,198 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(maps).
+
+-export([
+ fold/3,
+ map/2,
+ size/1,
+ without/2
+ ]).
+
+
+%%% BIFs
+-export([
+ get/2,
+ find/2,
+ from_list/1,
+ is_key/2,
+ keys/1,
+ merge/2,
+ new/0,
+ put/3,
+ remove/2,
+ to_list/1,
+ update/3,
+ values/1
+ ]).
+
+%% Shadowed by erl_bif_types: maps:get/3
+-spec get(Key,Map) -> Value when
+ Key :: term(),
+ Map :: map(),
+ Value :: term().
+
+get(_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:find/3
+-spec find(Key,Map) -> {ok, Value} | error when
+ Key :: term(),
+ Map :: map(),
+ Value :: term().
+
+find(_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:from_list/1
+-spec from_list([{Key,Value}]) -> Map when
+ Key :: term(),
+ Value :: term(),
+ Map :: map().
+
+from_list(_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:is_key/2
+-spec is_key(Key,Map) -> boolean() when
+ Key :: term(),
+ Map :: map().
+
+is_key(_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:keys/1
+-spec keys(Map) -> Keys when
+ Map :: map(),
+ Keys :: [Key],
+ Key :: term().
+
+keys(_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:merge/2
+-spec merge(Map1,Map2) -> Map3 when
+ Map1 :: map(),
+ Map2 :: map(),
+ Map3 :: map().
+
+merge(_,_) -> erlang:nif_error(undef).
+
+
+
+%% Shadowed by erl_bif_types: maps:new/0
+-spec new() -> Map when
+ Map :: map().
+
+new() -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:put/3
+-spec put(Key,Value,Map1) -> Map2 when
+ Key :: term(),
+ Value :: term(),
+ Map1 :: map(),
+ Map2 :: map().
+
+put(_,_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:put/3
+-spec remove(Key,Map1) -> Map2 when
+ Key :: term(),
+ Map1 :: map(),
+ Map2 :: map().
+
+remove(_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:to_list/1
+-spec to_list(Map) -> [{Key,Value}] when
+ Map :: map(),
+ Key :: term(),
+ Value :: term().
+
+to_list(_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:update/3
+-spec update(Key,Value,Map1) -> Map2 when
+ Key :: term(),
+ Value :: term(),
+ Map1 :: map(),
+ Map2 :: map().
+
+update(_,_,_) -> erlang:nif_error(undef).
+
+
+%% Shadowed by erl_bif_types: maps:values/1
+-spec values(Map) -> Keys when
+ Map :: map(),
+ Keys :: [Key],
+ Key :: term().
+
+values(_) -> erlang:nif_error(undef).
+
+
+%%% End of BIFs
+
+-spec fold(Fun,Init,Map) -> Acc when
+ Fun :: fun((K, V, AccIn) -> AccOut),
+ Init :: term(),
+ Acc :: term(),
+ AccIn :: term(),
+ AccOut :: term(),
+ Map :: map(),
+ K :: term(),
+ V :: term().
+
+fold(Fun, Init, Map) when is_function(Fun,3), is_map(Map) ->
+ lists:foldl(fun({K,V},A) -> Fun(K,V,A) end,Init,maps:to_list(Map)).
+
+-spec map(Fun,Map1) -> Map2 when
+ Fun :: fun((K, V1) -> V2),
+ Map1 :: map(),
+ Map2 :: map(),
+ K :: term(),
+ V1 :: term(),
+ V2 :: term().
+
+map(Fun, Map) when is_function(Fun, 2), is_map(Map) ->
+ maps:from_list(lists:map(fun
+ ({K,V}) ->
+ {K,Fun(K,V)}
+ end,maps:to_list(Map))).
+
+
+-spec size(Map) -> non_neg_integer() when
+ Map :: map().
+
+size(Map) when is_map(Map) ->
+ erlang:map_size(Map).
+
+
+-spec without(Ks,Map1) -> Map2 when
+ Ks :: [K],
+ Map1 :: map(),
+ Map2 :: map(),
+ K :: term().
+
+without(Ks, M) when is_list(Ks), is_map(M) ->
+ maps:from_list([{K,V}||{K,V} <- maps:to_list(M), not lists:member(K, Ks)]).
diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl
index 25b04fe45e..27dfcf52e1 100644
--- a/lib/stdlib/src/ms_transform.erl
+++ b/lib/stdlib/src/ms_transform.erl
@@ -910,6 +910,7 @@ bool_test(is_pid,1) -> true;
bool_test(is_port,1) -> true;
bool_test(is_reference,1) -> true;
bool_test(is_tuple,1) -> true;
+bool_test(is_map,1) -> true;
bool_test(is_binary,1) -> true;
bool_test(is_function,1) -> true;
bool_test(is_record,2) -> true;
@@ -924,6 +925,7 @@ real_guard_function(node,0) -> true;
real_guard_function(node,1) -> true;
real_guard_function(round,1) -> true;
real_guard_function(size,1) -> true;
+real_guard_function(map_size,1) -> true;
real_guard_function(tl,1) -> true;
real_guard_function(trunc,1) -> true;
real_guard_function(self,0) -> true;
diff --git a/lib/stdlib/src/stdlib.app.src b/lib/stdlib/src/stdlib.app.src
index a30685e830..a64b8e13c0 100644
--- a/lib/stdlib/src/stdlib.app.src
+++ b/lib/stdlib/src/stdlib.app.src
@@ -71,6 +71,7 @@
lib,
lists,
log_mf_h,
+ maps,
math,
ms_transform,
orddict,
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index a71d7f3018..6e9a9dd7bf 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -2859,7 +2859,15 @@ behaviour_basic(Config) when is_list(Config) ->
stop(_) -> ok.
">>,
[],
- []}
+ []},
+
+ {behaviour4,
+ <<"-behavior(application). %% Test callbacks with export_all
+ -compile(export_all).
+ stop(_) -> ok.
+ ">>,
+ [],
+ {warnings,[{1,erl_lint,{undefined_behaviour_func,{start,2},application}}]}}
],
?line [] = run(Config, Ts),
ok.
diff --git a/lib/stdlib/test/erl_scan_SUITE.erl b/lib/stdlib/test/erl_scan_SUITE.erl
index e628f7248d..447e159cd4 100644
--- a/lib/stdlib/test/erl_scan_SUITE.erl
+++ b/lib/stdlib/test/erl_scan_SUITE.erl
@@ -224,8 +224,8 @@ atoms() ->
punctuations() ->
L = ["<<", "<-", "<=", "<", ">>", ">=", ">", "->", "--",
- "-", "++", "+", "=:=", "=/=", "=<", "==", "=", "/=",
- "/", "||", "|", ":-", "::", ":"],
+ "-", "++", "+", "=:=", "=/=", "=<", "=>", "==", "=", "/=",
+ "/", "||", "|", ":=", ":-", "::", ":"],
%% One token at a time:
[begin
W = list_to_atom(S),
diff --git a/lib/stdlib/test/stdlib_SUITE.erl b/lib/stdlib/test/stdlib_SUITE.erl
index 8a2cb5ea6b..8fff5e2e05 100644
--- a/lib/stdlib/test/stdlib_SUITE.erl
+++ b/lib/stdlib/test/stdlib_SUITE.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1997-2011. All Rights Reserved.
+%% Copyright Ericsson AB 1997-2014. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -81,53 +81,59 @@ app_test(Config) when is_list(Config) ->
%% Test that appup allows upgrade from/downgrade to a maximum of two
%% major releases back.
appup_test(_Config) ->
+ do_appup_tests(create_test_vsns()).
+
+do_appup_tests({[],[]}) ->
+ {skip,"no previous releases available"};
+do_appup_tests({OkVsns,NokVsns}) ->
application:load(stdlib),
{_,_,Vsn} = lists:keyfind(stdlib,1,application:loaded_applications()),
AppupFile = filename:join([code:lib_dir(stdlib),ebin,"stdlib.appup"]),
{ok,[{Vsn,UpFrom,DownTo}=AppupScript]} = file:consult(AppupFile),
ct:log("~p~n",[AppupScript]),
- {OkVsns,NokVsns} = create_test_vsns(Vsn),
+ ct:log("Testing ok versions: ~p~n",[OkVsns]),
check_appup(OkVsns,UpFrom,{ok,[restart_new_emulator]}),
check_appup(OkVsns,DownTo,{ok,[restart_new_emulator]}),
+ ct:log("Testing not ok versions: ~p~n",[NokVsns]),
check_appup(NokVsns,UpFrom,error),
check_appup(NokVsns,DownTo,error),
ok.
-create_test_vsns(Current) ->
- [XStr,YStr|Rest] = string:tokens(Current,"."),
- X = list_to_integer(XStr),
- Y = list_to_integer(YStr),
- SecondMajor = vsn(X,Y-2),
- SecondMinor = SecondMajor ++ ".1.3",
- FirstMajor = vsn(X,Y-1),
- FirstMinor = FirstMajor ++ ".57",
- ThisMajor = vsn(X,Y),
- This =
- case Rest of
- [] ->
- [];
- ["1"] ->
- [ThisMajor];
- _ ->
- ThisMinor = ThisMajor ++ ".1",
- [ThisMajor,ThisMinor]
- end,
- OkVsns = This ++ [FirstMajor, FirstMinor, SecondMajor, SecondMinor],
-
- ThirdMajor = vsn(X,Y-3),
- ThirdMinor = ThirdMajor ++ ".10.12",
- Illegal = ThisMajor ++ ",1",
- Newer1Major = vsn(X,Y+1),
- Newer1Minor = Newer1Major ++ ".1",
- Newer2Major = ThisMajor ++ "1",
- NokVsns = [ThirdMajor,ThirdMinor,
- Illegal,
- Newer1Major,Newer1Minor,
- Newer2Major],
- {OkVsns,NokVsns}.
-
-vsn(X,Y) ->
- integer_to_list(X) ++ "." ++ integer_to_list(Y).
+create_test_vsns() ->
+ This = erlang:system_info(otp_release),
+ FirstMajor = previous_major(This),
+ SecondMajor = previous_major(FirstMajor),
+ ThirdMajor = previous_major(SecondMajor),
+ Ok = stdlib_vsn([FirstMajor,SecondMajor]),
+ Nok0 = stdlib_vsn([ThirdMajor]),
+ Nok = case Ok of
+ [Ok1|_] ->
+ [Ok1 ++ ",1" | Nok0]; % illegal
+ _ ->
+ Nok0
+ end,
+ {Ok,Nok}.
+
+previous_major("17") ->
+ "r16";
+previous_major("r"++Rel) ->
+ "r"++previous_major(Rel);
+previous_major(Rel) ->
+ integer_to_list(list_to_integer(Rel)-1).
+
+stdlib_vsn([R|Rs]) ->
+ case test_server:is_release_available(R) of
+ true ->
+ {ok,N} = test_server:start_node(prevrel,peer,[{erl,[{release,R}]}]),
+ As = rpc:call(N,application,which_applications,[]),
+ {_,_,KV} = lists:keyfind(stdlib,1,As),
+ test_server:stop_node(N),
+ [KV|stdlib_vsn(Rs)];
+ false ->
+ stdlib_vsn(Rs)
+ end;
+stdlib_vsn([]) ->
+ [].
check_appup([Vsn|Vsns],Instrs,Expected) ->
case systools_relup:appup_search_for_version(Vsn, Instrs) of
diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl
index 4f7f9e83ac..78a37445ed 100644
--- a/lib/syntax_tools/src/erl_syntax.erl
+++ b/lib/syntax_tools/src/erl_syntax.erl
@@ -582,6 +582,9 @@ type(Node) ->
{match, _, _, _} -> match_expr;
{op, _, _, _, _} -> infix_expr;
{op, _, _, _} -> prefix_expr;
+ {map,_,_} -> map;
+ {map_field_assoc,_,_,_} -> map_field_assoc;
+ {map_field_exact,_,_,_} -> map_field_exact;
{record, _, _, _, _} -> record_expr;
{record, _, _, _} -> record_expr;
{record_field, _, _, _, _} -> record_access;
@@ -1910,6 +1913,28 @@ atom_literal(Node) ->
%% =====================================================================
+
+map_elements(Node) ->
+ case unwrap(Node) of
+ {map, _, List} ->
+ List;
+ Node1 ->
+ data(Node1)
+ end.
+
+map_field_elements({_,_,K,V}) ->
+ [K,V].
+
+map(List) ->
+ tree(map, List).
+
+map_field_assoc(List) ->
+ tree(map_field_assoc, List).
+
+map_field_exact(List) ->
+ tree(map_field_exact, List).
+
+%% =====================================================================
%% @doc Creates an abstract tuple. If `Elements' is
%% `[X1, ..., Xn]', the result represents
%% "<code>{<em>X1</em>, ..., <em>Xn</em>}</code>".
@@ -6396,6 +6421,12 @@ subtrees(T) ->
try_expr_clauses(T),
try_expr_handlers(T),
try_expr_after(T)];
+ map ->
+ [map_elements(T)];
+ map_field_assoc ->
+ [map_field_elements(T)];
+ map_field_exact ->
+ [map_field_elements(T)];
tuple ->
[tuple_elements(T)]
end
@@ -6491,7 +6522,10 @@ make_tree(record_index_expr, [[T], [F]]) ->
make_tree(rule, [[N], C]) -> rule(N, C);
make_tree(size_qualifier, [[N], [A]]) -> size_qualifier(N, A);
make_tree(try_expr, [B, C, H, A]) -> try_expr(B, C, H, A);
-make_tree(tuple, [E]) -> tuple(E).
+make_tree(tuple, [E]) -> tuple(E);
+make_tree(map, [E]) -> map(E);
+make_tree(map_field_assoc, [E]) -> map_field_assoc(E);
+make_tree(map_field_exact, [E]) -> map_field_exact(E).
%% =====================================================================
diff --git a/lib/syntax_tools/src/erl_tidy.erl b/lib/syntax_tools/src/erl_tidy.erl
index 0c149634f6..7444d8dc67 100644
--- a/lib/syntax_tools/src/erl_tidy.erl
+++ b/lib/syntax_tools/src/erl_tidy.erl
@@ -269,6 +269,13 @@ file(Name) ->
%% is typically most useful if the `verbose' flag is enabled, to
%% generate reports about the program files without affecting
%% them. The default value is `false'.</dd>
+%%
+%% <dt>{stdout, boolean()}</dt>
+%%
+%% <dd>If the value is `true', instead of the file being written
+%% to disk it will be printed to stdout. The default value is
+%% `false'.</dd>
+%%
%% </dl>
%%
%% See the function `module/2' for further options.
@@ -309,9 +316,15 @@ file_2(Name, Opts) ->
true ->
ok;
false ->
- write_module(Tree, Name, Opts1),
- ok
- end.
+ case proplists:get_bool(stdout, Opts1) of
+ true ->
+ print_module(Tree, Opts1),
+ ok;
+ false ->
+ write_module(Tree, Name, Opts1),
+ ok
+ end
+ end.
read_module(Name, Opts) ->
verbose("reading module `~ts'.", [filename(Name)], Opts),
@@ -399,6 +412,10 @@ write_module(Tree, Name, Opts) ->
throw(R)
end.
+print_module(Tree, Opts) ->
+ Printer = proplists:get_value(printer, Opts),
+ io:format(Printer(Tree, Opts)).
+
output(FD, Printer, Tree, Opts) ->
io:put_chars(FD, Printer(Tree, Opts)),
io:nl(FD).
diff --git a/lib/typer/src/typer.erl b/lib/typer/src/typer.erl
index 0ace1d5fb8..20ae4d6066 100644
--- a/lib/typer/src/typer.erl
+++ b/lib/typer/src/typer.erl
@@ -63,10 +63,10 @@
%% Files in 'fms' are compilable with option 'to_pp'; we keep them
%% as {FileName, ModuleName} in case the ModuleName is different
fms = [] :: [{file:filename(), module()}],
- ex_func = map__new() :: map(),
- record = map__new() :: map(),
- func = map__new() :: map(),
- inc_func = map__new() :: map(),
+ ex_func = map__new() :: map_dict(),
+ record = map__new() :: map_dict(),
+ func = map__new() :: map_dict(),
+ inc_func = map__new() :: map_dict(),
trust_plt = dialyzer_plt:new() :: plt()}).
-type analysis() :: #analysis{}.
@@ -220,11 +220,11 @@ get_external(Exts, Plt) ->
-type fa() :: {atom(), arity()}.
-type func_info() :: {line(), atom(), arity()}.
--record(info, {records = map__new() :: map(),
+-record(info, {records = map__new() :: map_dict(),
functions = [] :: [func_info()],
- types = map__new() :: map(),
+ types = map__new() :: map_dict(),
edoc = false :: boolean()}).
--record(inc, {map = map__new() :: map(), filter = [] :: files()}).
+-record(inc, {map = map__new() :: map_dict(), filter = [] :: files()}).
-type inc() :: #inc{}.
-spec show_or_annotate(analysis()) -> 'ok'.
@@ -1094,29 +1094,29 @@ rcv_ext_types(Self, ExtTypes) ->
%% specialized for the uses in this module
%%--------------------------------------------------------------------
--type map() :: dict().
+-type map_dict() :: dict().
--spec map__new() -> map().
+-spec map__new() -> map_dict().
map__new() ->
dict:new().
--spec map__insert({term(), term()}, map()) -> map().
+-spec map__insert({term(), term()}, map_dict()) -> map_dict().
map__insert(Object, Map) ->
{Key, Value} = Object,
dict:store(Key, Value, Map).
--spec map__lookup(term(), map()) -> term().
+-spec map__lookup(term(), map_dict()) -> term().
map__lookup(Key, Map) ->
try dict:fetch(Key, Map) catch error:_ -> none end.
--spec map__from_list([{fa(), term()}]) -> map().
+-spec map__from_list([{fa(), term()}]) -> map_dict().
map__from_list(List) ->
dict:from_list(List).
--spec map__remove(term(), map()) -> map().
+-spec map__remove(term(), map_dict()) -> map_dict().
map__remove(Key, Dict) ->
dict:erase(Key, Dict).
--spec map__fold(fun((term(), term(), term()) -> map()), map(), map()) -> map().
+-spec map__fold(fun((term(), term(), term()) -> map_dict()), map_dict(), map_dict()) -> map_dict().
map__fold(Fun, Acc0, Dict) ->
dict:fold(Fun, Acc0, Dict).