diff options
Diffstat (limited to 'lib')
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 = <<0:1,1:1,0:1,1:1,1:1>>, -Bits1Val2 = 16#1A, -Bits1Val3 = {3,<<0:1,1:1,0:1,1:1,1:1,0:3>>}, -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 = <<2#1110:4>>, 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 = <<17,13,19,20,0,0,255,254>>, +O2Val = <<"must be exactly 28 chars....">>,</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 "raw - file names", 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én, Hå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 © 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 <pid>".</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 <port>". From + the right click menu you can also select "Properties for + <pid>", where <pid> 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 + <pid>".</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 + <pid>".</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 + <mod>".</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 + <node>". From the right click menu you can also select + "Properties for <port>", 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 + <mod>".</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><Allocator></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, " "). +-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"), - " ", - 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 "<" and ">" is changed to ">" -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], - ["<< ",Size," bytes >>"]) | 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\"><<...(Truncated Binary)>>" - "</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\"><<...(Nonexisting Binary)>>" - "</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 "<" and ">" is changed to ">" -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 - "<<" ++ _Binary -> - H; - "<" ++ _Pid -> - href("TARGET=\"main\"",["./proc_details?pid=",H],H); - "#Port<" ++ Port -> - href("TARGET=\"main\"",["./port?port=","Port<"++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 "<" and ">" is changed to ">" +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<"|Acc],LTB); +href_proc_port("#Fun<"++T,Acc,LTB) -> + %% No links to funs + href_proc_port(T,["#Fun<"|Acc],LTB); +href_proc_port("#Port<"++T,Acc,LTB) -> + {Port0,Rest} = split($>,T), + Port = "#Port<"++Port0 ++ ">", + href_proc_port(Rest,[href(Port,Port)|Acc],LTB); +href_proc_port("<<"++T,Acc,LTB) -> + %% No links to binaries + href_proc_port(T,["<<"|Acc],LTB); +href_proc_port("<"++([C|_]=T),Acc,LTB) when $0 =< C, C =< $9 -> + %% Pid + {Pid0,Rest} = split($>,T), + Pid = "<" ++ Pid0 ++ ">", + 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<"++X++"."++Y++">", + href(Port,Port); + Ns -> + "#Port<" ++ string:join(Ns,".") ++"...>" + 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 = "<"++X++"."++Y++"."++Z++">", + href(Pid,Pid); + Ns -> + "<" ++ string:join(Ns,".") ++ "...>" + 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\"><<...(Truncated Binary)>>" + "</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\"><<...(Nonexisting Binary)>>" + "</FONT>")), + href_proc_port(T,IH++Acc,LTB); +href_proc_port("<"++T,Acc,LTB) -> + href_proc_port(T,["<"|Acc],LTB); +href_proc_port(">"++T,Acc,LTB) -> + href_proc_port(T,[">"|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 = ["<<", + [integer_to_list(X)++"," || <<X:8>> <= PreviewBin], + "...(", + observer_lib:to_str({bytes,Size}), + ")>>"], + 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 = ["<<", + [integer_to_list(X)++"," || <<X:8>> <= PreviewBin], + "...(", + observer_lib:to_str({bytes,list_to_integer(Size)}), + ")>>"], + if LTB -> + href("TARGET=\"expanded\"", + ["#OBSBinary?key1="++Preview++ + "&key2="++Size++ + "&key3="++Md5], + PreviewStr); + true -> + PreviewStr + end; + _ -> + "<< ... >>" + 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 > 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 > 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 "raw file names" 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 > 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). |