| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Data::Printer::Common; |
|
2
|
|
|
|
|
|
|
# Private library of shared Data::Printer code. |
|
3
|
81
|
|
|
81
|
|
277678
|
use strict; |
|
|
81
|
|
|
|
|
222
|
|
|
|
81
|
|
|
|
|
1826
|
|
|
4
|
81
|
|
|
81
|
|
850
|
use warnings; |
|
|
81
|
|
|
|
|
163
|
|
|
|
81
|
|
|
|
|
1601
|
|
|
5
|
81
|
|
|
81
|
|
1262
|
use Scalar::Util; |
|
|
80
|
|
|
|
|
224
|
|
|
|
80
|
|
|
|
|
63989
|
|
|
6
|
|
|
|
|
|
|
|
|
7
|
|
|
|
|
|
|
my $mro_initialized = 0; |
|
8
|
|
|
|
|
|
|
my $nsort_initialized; |
|
9
|
|
|
|
|
|
|
|
|
10
|
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
sub _filter_category_for { |
|
12
|
502
|
|
|
502
|
|
1115
|
my ($name) = @_; |
|
13
|
502
|
|
|
|
|
995
|
my %core_types = map { $_ => 1 } |
|
|
4660
|
|
|
|
|
9374
|
|
|
14
|
|
|
|
|
|
|
qw(SCALAR LVALUE ARRAY HASH REF VSTRING GLOB FORMAT Regexp CODE); |
|
15
|
502
|
100
|
|
|
|
2820
|
return exists $core_types{$name} ? 'type_filters' : 'class_filters'; |
|
16
|
|
|
|
|
|
|
} |
|
17
|
|
|
|
|
|
|
|
|
18
|
|
|
|
|
|
|
# strings are tough to process: there are control characters like "\t", |
|
19
|
|
|
|
|
|
|
# unicode characters to name or escape (or do nothing), max_string to |
|
20
|
|
|
|
|
|
|
# worry about, and every single piece of that could have its own color. |
|
21
|
|
|
|
|
|
|
# That, and hash keys and strings share this. So we put it all in one place. |
|
22
|
|
|
|
|
|
|
sub _process_string { |
|
23
|
261
|
|
|
261
|
|
597
|
my ($ddp, $string, $src_color) = @_; |
|
24
|
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
# colorizing messes with reduce_string because we are effectively |
|
26
|
|
|
|
|
|
|
# adding new (invisible) characters to the string. So we need to |
|
27
|
|
|
|
|
|
|
# handle reduction first. But! Because we colorize string_max |
|
28
|
|
|
|
|
|
|
# *and* we should escape any colors already present, we need to |
|
29
|
|
|
|
|
|
|
# do both at the same time. |
|
30
|
261
|
|
|
|
|
1231
|
$string = _reduce_string($ddp, $string, $src_color); |
|
31
|
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
# now we escape all other control characters except for "\e", which was |
|
33
|
|
|
|
|
|
|
# already escaped in _reduce_string(), and convert any chosen charset |
|
34
|
|
|
|
|
|
|
# to the \x{} format. These could go in any particular order: |
|
35
|
261
|
|
|
|
|
860
|
$string = _escape_chars($ddp, $string, $src_color); |
|
36
|
261
|
|
|
|
|
625
|
$string = _print_escapes($ddp, $string, $src_color); |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
# finally, send our wrapped string: |
|
39
|
261
|
|
|
|
|
1403
|
return $ddp->maybe_colorize($string, $src_color); |
|
40
|
|
|
|
|
|
|
} |
|
41
|
|
|
|
|
|
|
|
|
42
|
|
|
|
|
|
|
sub _colorstrip { |
|
43
|
181
|
|
|
186
|
|
3223
|
my ($string) = @_; |
|
44
|
178
|
|
|
|
|
315
|
$string =~ s{ \e\[ [\d;]* m }{}xmsg; |
|
45
|
178
|
|
|
|
|
881
|
return $string; |
|
46
|
|
|
|
|
|
|
} |
|
47
|
|
|
|
|
|
|
|
|
48
|
|
|
|
|
|
|
sub _reduce_string { |
|
49
|
256
|
|
|
256
|
|
1246
|
my ($ddp, $string, $src_color) = @_; |
|
50
|
252
|
|
|
|
|
633
|
my $max = $ddp->string_max; |
|
51
|
252
|
|
|
|
|
986
|
my $str_len = length($string); |
|
52
|
254
|
100
|
66
|
|
|
1846
|
if ($max && $str_len && $str_len > $max) { |
|
|
|
|
100
|
|
|
|
|
|
53
|
35
|
|
|
|
|
81
|
my $preserve = $ddp->string_preserve; |
|
54
|
35
|
100
|
|
|
|
480
|
my $skipped_chars = $str_len - ($preserve eq 'none' ? 0 : $max); |
|
55
|
38
|
|
|
|
|
516
|
my $skip_message = $ddp->maybe_colorize( |
|
56
|
|
|
|
|
|
|
$ddp->string_overflow, |
|
57
|
|
|
|
|
|
|
'caller_info', |
|
58
|
|
|
|
|
|
|
undef, |
|
59
|
|
|
|
|
|
|
$src_color |
|
60
|
|
|
|
|
|
|
); |
|
61
|
36
|
|
|
|
|
92
|
$skip_message =~ s/__SKIPPED__/$skipped_chars/g; |
|
62
|
36
|
100
|
|
|
|
512
|
if ($preserve eq 'end') { |
|
|
|
100
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
63
|
34
|
|
|
|
|
1646
|
substr $string, 0, $skipped_chars, ''; |
|
64
|
33
|
50
|
|
|
|
12767
|
$string =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge |
|
|
32
|
|
|
|
|
507
|
|
|
65
|
|
|
|
|
|
|
if $ddp->print_escapes; |
|
66
|
33
|
|
|
|
|
1297
|
$string = $skip_message . $string; |
|
67
|
|
|
|
|
|
|
} |
|
68
|
|
|
|
|
|
|
elsif ($preserve eq 'begin') { |
|
69
|
33
|
|
|
|
|
2783
|
$string = substr($string, 0, $max); |
|
70
|
33
|
50
|
|
|
|
461
|
$string =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge |
|
|
32
|
|
|
|
|
1723
|
|
|
71
|
|
|
|
|
|
|
if $ddp->print_escapes; |
|
72
|
33
|
|
|
|
|
73
|
$string = $string . $skip_message; |
|
73
|
|
|
|
|
|
|
} |
|
74
|
|
|
|
|
|
|
elsif ($preserve eq 'extremes') { |
|
75
|
33
|
|
|
|
|
466
|
my $leftside_chars = int($max / 2); |
|
76
|
33
|
|
|
|
|
241
|
my $rightside_chars = $max - $leftside_chars; |
|
77
|
33
|
|
|
|
|
78
|
my $leftside = substr($string, 0, $leftside_chars); |
|
78
|
33
|
|
|
|
|
466
|
my $rightside = substr($string, -$rightside_chars); |
|
79
|
32
|
50
|
|
|
|
217
|
if ($ddp->print_escapes) { |
|
80
|
31
|
|
|
|
|
70
|
$leftside =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge; |
|
|
31
|
|
|
|
|
425
|
|
|
81
|
30
|
|
|
|
|
220
|
$rightside =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge; |
|
|
30
|
|
|
|
|
63
|
|
|
82
|
|
|
|
|
|
|
} |
|
83
|
31
|
|
|
|
|
411
|
$string = $leftside . $skip_message . $rightside; |
|
84
|
|
|
|
|
|
|
} |
|
85
|
|
|
|
|
|
|
elsif ($preserve eq 'middle') { |
|
86
|
31
|
|
|
|
|
229
|
my $string_middle = int($str_len / 2); |
|
87
|
31
|
|
|
|
|
71
|
my $middle_substr = int($max / 2); |
|
88
|
31
|
|
|
|
|
422
|
my $substr_begin = $string_middle - $middle_substr; |
|
89
|
28
|
|
|
|
|
196
|
my $message_begin = $ddp->string_overflow; |
|
90
|
28
|
|
|
|
|
64
|
$message_begin =~ s/__SKIPPED__/$substr_begin/gs; |
|
91
|
28
|
|
|
|
|
431
|
my $chars_left = $str_len - ($substr_begin + $max); |
|
92
|
28
|
|
|
|
|
206
|
my $message_end = $ddp->string_overflow; |
|
93
|
28
|
|
|
|
|
63
|
$message_end =~ s/__SKIPPED__/$chars_left/gs; |
|
94
|
28
|
|
|
|
|
390
|
$string = substr($string, $substr_begin, $max); |
|
95
|
28
|
50
|
|
|
|
237
|
$string =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge |
|
|
27
|
|
|
|
|
65
|
|
|
96
|
|
|
|
|
|
|
if $ddp->print_escapes; |
|
97
|
28
|
|
|
|
|
409
|
$string = $ddp->maybe_colorize($message_begin, 'caller_info', undef, $src_color) |
|
98
|
|
|
|
|
|
|
. $string |
|
99
|
|
|
|
|
|
|
. $ddp->maybe_colorize($message_end, 'caller_info', undef, $src_color) |
|
100
|
|
|
|
|
|
|
; |
|
101
|
|
|
|
|
|
|
} |
|
102
|
|
|
|
|
|
|
else { |
|
103
|
|
|
|
|
|
|
# preserving 'none' only shows the skipped message: |
|
104
|
28
|
|
|
|
|
202
|
$string = $skip_message; |
|
105
|
|
|
|
|
|
|
} |
|
106
|
|
|
|
|
|
|
} |
|
107
|
|
|
|
|
|
|
else { |
|
108
|
|
|
|
|
|
|
# nothing to do? ok, then escape any colors already present: |
|
109
|
243
|
100
|
|
|
|
655
|
$string =~ s{\e}{$ddp->maybe_colorize('\\e', 'escaped', undef, $src_color)}ge |
|
|
28
|
|
|
|
|
450
|
|
|
110
|
|
|
|
|
|
|
if $ddp->print_escapes; |
|
111
|
|
|
|
|
|
|
} |
|
112
|
248
|
|
|
|
|
760
|
return $string; |
|
113
|
|
|
|
|
|
|
} |
|
114
|
|
|
|
|
|
|
|
|
115
|
|
|
|
|
|
|
|
|
116
|
|
|
|
|
|
|
# _escape_chars() replaces characters with their "escaped" versions. |
|
117
|
|
|
|
|
|
|
# Because it may be called on scalars or (scalar) hash keys and they |
|
118
|
|
|
|
|
|
|
# have different colors, we need to be aware of that. |
|
119
|
|
|
|
|
|
|
sub _escape_chars { |
|
120
|
248
|
|
|
256
|
|
525
|
my ($ddp, $scalar, $src_color) = @_; |
|
121
|
|
|
|
|
|
|
|
|
122
|
248
|
|
|
|
|
923
|
my $escape_kind = $ddp->escape_chars; |
|
123
|
247
|
|
|
|
|
933
|
my %target_for = ( |
|
124
|
|
|
|
|
|
|
nonascii => '[^\x{00}-\x{7f}]+', |
|
125
|
|
|
|
|
|
|
nonlatin1 => '[^\x{00}-\x{ff}]+', |
|
126
|
|
|
|
|
|
|
); |
|
127
|
|
|
|
|
|
|
|
|
128
|
247
|
100
|
|
|
|
603
|
if ($ddp->unicode_charnames) { |
|
|
|
100
|
|
|
|
|
|
|
129
|
29
|
|
|
|
|
1170
|
require charnames; |
|
130
|
29
|
100
|
|
|
|
32312
|
if ($escape_kind eq 'all') { |
|
131
|
27
|
|
|
|
|
81
|
$scalar = join('', map { sprintf '\N{%s}', charnames::viacode(ord $_) } split //, $scalar); |
|
|
30
|
|
|
|
|
751
|
|
|
132
|
27
|
|
|
|
|
548
|
$scalar = $ddp->maybe_colorize($scalar, 'escaped'); |
|
133
|
|
|
|
|
|
|
} |
|
134
|
|
|
|
|
|
|
else { |
|
135
|
27
|
50
|
|
|
|
110
|
$scalar =~ s{($target_for{$escape_kind})}{$ddp->maybe_colorize( (join '', map { sprintf '\N{%s}', charnames::viacode(ord $_) } split //, $1), 'escaped', undef, $src_color)}ge if exists $target_for{$escape_kind}; |
|
|
31
|
|
|
|
|
392
|
|
|
|
34
|
|
|
|
|
600
|
|
|
136
|
|
|
|
|
|
|
} |
|
137
|
|
|
|
|
|
|
} |
|
138
|
|
|
|
|
|
|
elsif ($escape_kind eq 'all') { |
|
139
|
26
|
|
|
|
|
69
|
$scalar = join('', map { sprintf '\x{%02x}', ord $_ } split //, $scalar); |
|
|
62
|
|
|
|
|
440
|
|
|
140
|
26
|
|
|
|
|
189
|
$scalar = $ddp->maybe_colorize($scalar, 'escaped'); |
|
141
|
|
|
|
|
|
|
} |
|
142
|
|
|
|
|
|
|
else { |
|
143
|
242
|
100
|
|
|
|
640
|
$scalar =~ s{($target_for{$escape_kind})}{$ddp->maybe_colorize((join '', map { sprintf '\x{%02x}', ord $_ } split //, $1), 'escaped', undef, $src_color)}ge if exists $target_for{$escape_kind}; |
|
|
31
|
|
|
|
|
354
|
|
|
|
34
|
|
|
|
|
290
|
|
|
144
|
|
|
|
|
|
|
} |
|
145
|
246
|
|
|
|
|
729
|
return $scalar; |
|
146
|
|
|
|
|
|
|
} |
|
147
|
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
# _print_escapes() prints invisible chars if they exist on a string. |
|
149
|
|
|
|
|
|
|
# Because it may be called on scalars or (scalar) hash keys and they |
|
150
|
|
|
|
|
|
|
# have different colors, we need to be aware of that. Also, \e is |
|
151
|
|
|
|
|
|
|
# deliberately omitted because it was escaped from the original |
|
152
|
|
|
|
|
|
|
# string earlier, and the \e's we have now are our own colorized |
|
153
|
|
|
|
|
|
|
# output. |
|
154
|
|
|
|
|
|
|
sub _print_escapes { |
|
155
|
246
|
|
|
254
|
|
851
|
my ($ddp, $string, $src_color) = @_; |
|
156
|
|
|
|
|
|
|
|
|
157
|
|
|
|
|
|
|
# always escape the null character |
|
158
|
246
|
|
|
|
|
1234
|
$string =~ s/\0/$ddp->maybe_colorize('\\0', 'escaped', undef, $src_color)/ge; |
|
|
24
|
|
|
|
|
60
|
|
|
159
|
|
|
|
|
|
|
|
|
160
|
243
|
100
|
|
|
|
826
|
return $string unless $ddp->print_escapes; |
|
161
|
|
|
|
|
|
|
|
|
162
|
26
|
|
|
|
|
587
|
my %escaped = ( |
|
163
|
|
|
|
|
|
|
"\n" => '\n', # line feed |
|
164
|
|
|
|
|
|
|
"\r" => '\r', # carriage return |
|
165
|
|
|
|
|
|
|
"\t" => '\t', # horizontal tab |
|
166
|
|
|
|
|
|
|
"\f" => '\f', # formfeed |
|
167
|
|
|
|
|
|
|
"\b" => '\b', # backspace |
|
168
|
|
|
|
|
|
|
"\a" => '\a', # alert (bell) |
|
169
|
|
|
|
|
|
|
); |
|
170
|
23
|
|
|
|
|
60
|
foreach my $k ( keys %escaped ) { |
|
171
|
28
|
|
|
|
|
363
|
$string =~ s/$k/$ddp->maybe_colorize($escaped{$k}, 'escaped', undef, $src_color)/ge; |
|
|
31
|
|
|
|
|
199
|
|
|
172
|
|
|
|
|
|
|
} |
|
173
|
26
|
|
|
|
|
62
|
return $string; |
|
174
|
|
|
|
|
|
|
} |
|
175
|
|
|
|
|
|
|
|
|
176
|
|
|
|
|
|
|
sub _initialize_nsort { |
|
177
|
38
|
50
|
|
46
|
|
491
|
return 'Sort::Key::Natural' if $INC{'Sort/Key/Natural.pm'}; |
|
178
|
38
|
50
|
|
|
|
271
|
return 'Sort::Naturally' if $INC{'Sort/Naturally.pm'}; |
|
179
|
38
|
50
|
|
|
|
122
|
return 'Sort::Key::Natural' if !_tryme('use Sort::Key::Natural; 1;'); |
|
180
|
38
|
50
|
|
|
|
430
|
return 'Sort::Naturally' if !_tryme('use Sort::Naturally; 1;'); |
|
181
|
38
|
|
|
|
|
238
|
return 'core'; |
|
182
|
|
|
|
|
|
|
} |
|
183
|
|
|
|
|
|
|
|
|
184
|
|
|
|
|
|
|
sub _nsort { |
|
185
|
159
|
100
|
|
167
|
|
452
|
if (!$nsort_initialized) { |
|
186
|
36
|
|
|
|
|
430
|
my $nsort_class = _initialize_nsort(); |
|
187
|
36
|
50
|
|
|
|
249
|
if ($nsort_class eq 'Sort::Key::Natural') { |
|
|
|
50
|
|
|
|
|
|
|
188
|
25
|
|
|
|
|
77
|
$nsort_initialized = \&{ $nsort_class . '::natsort' }; |
|
|
25
|
|
|
|
|
348
|
|
|
189
|
|
|
|
|
|
|
} |
|
190
|
|
|
|
|
|
|
elsif ($nsort_class ne 'core') { |
|
191
|
25
|
|
|
|
|
166
|
$nsort_initialized = \&{ $nsort_class . '::nsort' }; |
|
|
25
|
|
|
|
|
82
|
|
|
192
|
|
|
|
|
|
|
} |
|
193
|
|
|
|
|
|
|
else { |
|
194
|
36
|
|
|
|
|
396
|
$nsort_initialized = \&_nsort_pp |
|
195
|
|
|
|
|
|
|
} |
|
196
|
|
|
|
|
|
|
} |
|
197
|
159
|
|
|
|
|
462
|
return $nsort_initialized->(@_); |
|
198
|
|
|
|
|
|
|
} |
|
199
|
|
|
|
|
|
|
|
|
200
|
|
|
|
|
|
|
# this is a very simple 'natural-ish' sorter, heavily inspired in |
|
201
|
|
|
|
|
|
|
# http://www.perlmonks.org/?node_id=657130 by thundergnat and tye |
|
202
|
|
|
|
|
|
|
sub _nsort_pp { |
|
203
|
160
|
|
|
167
|
|
928
|
my $i; |
|
204
|
160
|
|
|
|
|
1034
|
my @unsorted = map lc, @_; |
|
205
|
160
|
|
|
|
|
458
|
foreach my $data (@unsorted) { |
|
206
|
81
|
|
|
81
|
|
607
|
no warnings 'uninitialized'; |
|
|
81
|
|
|
|
|
184
|
|
|
|
81
|
|
|
|
|
63119
|
|
|
207
|
446
|
|
|
|
|
1507
|
$data =~ s/((\.0*)?)(\d+)/("\x0" x length $2) . (pack 'aNa*', 0, length $3, $3)/eg; |
|
|
38
|
|
|
|
|
431
|
|
|
208
|
446
|
|
|
|
|
1079
|
$data .= ' ' . $i++; |
|
209
|
|
|
|
|
|
|
} |
|
210
|
160
|
|
|
|
|
495
|
return @_[ map { (split)[-1] } sort @unsorted ]; |
|
|
446
|
|
|
|
|
1790
|
|
|
211
|
|
|
|
|
|
|
} |
|
212
|
|
|
|
|
|
|
|
|
213
|
|
|
|
|
|
|
sub _fetch_arrayref_of_scalars { |
|
214
|
25
|
|
|
32
|
|
166
|
my ($props, $name) = @_; |
|
215
|
25
|
0
|
0
|
|
|
71
|
return [] unless exists $props->{$name} && ref $props->{$name} eq 'ARRAY'; |
|
216
|
25
|
|
|
|
|
328
|
my @valid; |
|
217
|
24
|
|
|
|
|
340
|
foreach my $option (@{$props->{$name}}) { |
|
|
23
|
|
|
|
|
73
|
|
|
218
|
23
|
0
|
|
|
|
361
|
if (ref $option) { |
|
219
|
|
|
|
|
|
|
# FIXME: because there is no object at this point, we need to check |
|
220
|
|
|
|
|
|
|
# the 'warnings' option ourselves. |
|
221
|
|
|
|
|
|
|
_warn(undef, "'$name' option requires scalar values only. Ignoring $option.") |
|
222
|
24
|
0
|
0
|
|
|
296
|
if !exists $props->{warnings} || !$props->{warnings}; |
|
223
|
23
|
|
|
|
|
51
|
next; |
|
224
|
|
|
|
|
|
|
} |
|
225
|
23
|
|
|
|
|
305
|
push @valid, $option; |
|
226
|
|
|
|
|
|
|
} |
|
227
|
22
|
|
|
|
|
298
|
return \@valid; |
|
228
|
|
|
|
|
|
|
} |
|
229
|
|
|
|
|
|
|
|
|
230
|
|
|
|
|
|
|
sub _fetch_anyof { |
|
231
|
2974
|
|
|
2984
|
|
5484
|
my ($props, $name, $default, $list) = @_; |
|
232
|
2974
|
100
|
|
|
|
9082
|
return $default unless exists $props->{$name}; |
|
233
|
157
|
|
|
|
|
481
|
foreach my $option (@$list) { |
|
234
|
326
|
100
|
|
|
|
1012
|
return $option if $props->{$name} eq $option; |
|
235
|
|
|
|
|
|
|
} |
|
236
|
|
|
|
|
|
|
_die( |
|
237
|
22
|
|
|
|
|
333
|
"invalid value '$props->{$name}' for option '$name'" |
|
238
|
|
|
|
|
|
|
. "(must be one of: " . join(',', @$list) . ")" |
|
239
|
|
|
|
|
|
|
); |
|
240
|
|
|
|
|
|
|
}; |
|
241
|
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
|
|
243
|
|
|
|
|
|
|
sub _fetch_scalar_or_default { |
|
244
|
12568
|
|
|
12578
|
|
21158
|
my ($props, $name, $default) = @_; |
|
245
|
12568
|
100
|
|
|
|
38130
|
return $default unless exists $props->{$name}; |
|
246
|
|
|
|
|
|
|
|
|
247
|
597
|
50
|
|
|
|
1721
|
if (my $ref = ref $props->{$name}) { |
|
248
|
21
|
|
|
|
|
143
|
_die("'$name' property must be a scalar, not a reference to $ref"); |
|
249
|
|
|
|
|
|
|
} |
|
250
|
597
|
|
|
|
|
1652
|
return $props->{$name}; |
|
251
|
|
|
|
|
|
|
} |
|
252
|
|
|
|
|
|
|
|
|
253
|
|
|
|
|
|
|
sub _die { |
|
254
|
24
|
|
|
33
|
|
332
|
my ($message) = @_; |
|
255
|
24
|
|
|
|
|
161
|
my ($file, $line) = _get_proper_caller(); |
|
256
|
24
|
|
|
|
|
116
|
die '[Data::Printer] ' . $message . " at $file line $line.\n"; |
|
257
|
|
|
|
|
|
|
} |
|
258
|
|
|
|
|
|
|
|
|
259
|
|
|
|
|
|
|
sub _warn { |
|
260
|
22
|
|
|
31
|
|
461
|
my ($ddp, $message) = @_; |
|
261
|
22
|
50
|
33
|
|
|
147
|
return if $ddp && !$ddp->warnings; |
|
262
|
22
|
|
|
|
|
51
|
my ($file, $line) = _get_proper_caller(); |
|
263
|
22
|
|
|
|
|
299
|
warn '[Data::Printer] ' . $message . " at $file line $line.\n"; |
|
264
|
|
|
|
|
|
|
} |
|
265
|
|
|
|
|
|
|
|
|
266
|
|
|
|
|
|
|
sub _get_proper_caller { |
|
267
|
25
|
|
|
31
|
|
148
|
my $frame = 1; |
|
268
|
25
|
|
|
|
|
84
|
while (my @caller = caller($frame++)) { |
|
269
|
28
|
100
|
|
|
|
344
|
if ($caller[0] !~ /\AD(?:DP|ata::Printer)/) { |
|
270
|
25
|
|
|
|
|
161
|
return ($caller[1], $caller[2]); |
|
271
|
|
|
|
|
|
|
} |
|
272
|
|
|
|
|
|
|
} |
|
273
|
21
|
|
|
|
|
46
|
return ('n/d', 'n/d'); |
|
274
|
|
|
|
|
|
|
} |
|
275
|
|
|
|
|
|
|
|
|
276
|
|
|
|
|
|
|
|
|
277
|
|
|
|
|
|
|
# simple eval++ adapted from Try::Tiny. |
|
278
|
|
|
|
|
|
|
# returns a (true) error message if failed. |
|
279
|
|
|
|
|
|
|
sub _tryme { |
|
280
|
3133
|
|
|
3139
|
|
22427
|
my ($subref_or_string) = @_; |
|
281
|
|
|
|
|
|
|
|
|
282
|
3133
|
|
|
|
|
5005
|
my $previous_error = $@; |
|
283
|
3133
|
|
|
|
|
4754
|
my ($failed, $error); |
|
284
|
|
|
|
|
|
|
|
|
285
|
3133
|
100
|
|
|
|
7619
|
if (ref $subref_or_string eq 'CODE') { |
|
286
|
343
|
|
|
|
|
690
|
$failed = not eval { |
|
287
|
343
|
|
|
|
|
985
|
local $SIG{'__DIE__'}; # make sure we don't trigger any exception hooks. |
|
288
|
343
|
|
|
|
|
862
|
$@ = $previous_error; |
|
289
|
343
|
|
|
|
|
1024
|
$subref_or_string->(); |
|
290
|
335
|
|
|
|
|
2154
|
return 1; |
|
291
|
|
|
|
|
|
|
}; |
|
292
|
343
|
|
|
|
|
1329
|
$error = $@; |
|
293
|
|
|
|
|
|
|
} |
|
294
|
|
|
|
|
|
|
else { |
|
295
|
2805
|
|
|
|
|
5159
|
my $code = q(local $SIG{'__DIE__'};) . $subref_or_string; |
|
296
|
2804
|
|
|
59
|
0
|
206027
|
$failed = not eval $code; |
|
|
39
|
|
|
57
|
0
|
16298
|
|
|
|
35
|
|
|
25
|
|
15887
|
|
|
|
35
|
|
|
25
|
|
635
|
|
|
|
37
|
|
|
25
|
|
3564
|
|
|
|
36
|
|
|
25
|
|
449
|
|
|
|
36
|
|
|
25
|
|
703
|
|
|
|
5
|
|
|
25
|
|
12
|
|
|
|
5
|
|
|
25
|
|
67
|
|
|
|
5
|
|
|
25
|
|
35
|
|
|
|
5
|
|
|
25
|
|
11
|
|
|
|
5
|
|
|
25
|
|
78
|
|
|
|
5
|
|
|
25
|
|
37
|
|
|
|
5
|
|
|
24
|
|
10
|
|
|
|
5
|
|
|
24
|
|
61
|
|
|
|
5
|
|
|
22
|
|
34
|
|
|
|
5
|
|
|
22
|
|
10
|
|
|
|
5
|
|
|
21
|
|
65
|
|
|
|
5
|
|
|
21
|
|
35
|
|
|
|
5
|
|
|
21
|
|
12
|
|
|
|
5
|
|
|
21
|
|
107
|
|
|
|
5
|
|
|
21
|
|
36
|
|
|
|
5
|
|
|
21
|
|
13
|
|
|
|
5
|
|
|
21
|
|
68
|
|
|
|
5
|
|
|
19
|
|
37
|
|
|
|
5
|
|
|
19
|
|
13
|
|
|
|
5
|
|
|
17
|
|
921
|
|
|
|
5
|
|
|
17
|
|
37
|
|
|
|
5
|
|
|
16
|
|
12
|
|
|
|
5
|
|
|
16
|
|
68
|
|
|
|
5
|
|
|
16
|
|
35
|
|
|
|
5
|
|
|
16
|
|
12
|
|
|
|
5
|
|
|
16
|
|
90
|
|
|
|
5
|
|
|
16
|
|
37
|
|
|
|
5
|
|
|
16
|
|
11
|
|
|
|
5
|
|
|
5
|
|
79
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
66
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
64
|
|
|
|
5
|
|
|
5
|
|
32
|
|
|
|
5
|
|
|
5
|
|
11
|
|
|
|
5
|
|
|
5
|
|
61
|
|
|
|
5
|
|
|
5
|
|
35
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
943
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
68
|
|
|
|
5
|
|
|
5
|
|
30
|
|
|
|
5
|
|
|
5
|
|
11
|
|
|
|
5
|
|
|
5
|
|
61
|
|
|
|
5
|
|
|
5
|
|
35
|
|
|
|
5
|
|
|
5
|
|
13
|
|
|
|
5
|
|
|
5
|
|
64
|
|
|
|
5
|
|
|
5
|
|
53
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
70
|
|
|
|
5
|
|
|
5
|
|
36
|
|
|
|
5
|
|
|
5
|
|
14
|
|
|
|
5
|
|
|
5
|
|
69
|
|
|
|
5
|
|
|
5
|
|
36
|
|
|
|
5
|
|
|
5
|
|
14
|
|
|
|
5
|
|
|
5
|
|
89
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
13
|
|
|
|
5
|
|
|
5
|
|
68
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
65
|
|
|
|
5
|
|
|
5
|
|
35
|
|
|
|
5
|
|
|
5
|
|
29
|
|
|
|
5
|
|
|
5
|
|
68
|
|
|
|
5
|
|
|
5
|
|
35
|
|
|
|
5
|
|
|
5
|
|
12
|
|
|
|
5
|
|
|
5
|
|
65
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
11
|
|
|
|
5
|
|
|
5
|
|
79
|
|
|
|
5
|
|
|
5
|
|
34
|
|
|
|
5
|
|
|
5
|
|
10
|
|
|
|
5
|
|
|
4
|
|
64
|
|
|
|
5
|
|
|
4
|
|
36
|
|
|
|
5
|
|
|
4
|
|
18
|
|
|
|
5
|
|
|
4
|
|
86
|
|
|
|
5
|
|
|
4
|
|
38
|
|
|
|
5
|
|
|
4
|
|
14
|
|
|
|
5
|
|
|
4
|
|
128
|
|
|
|
5
|
|
|
4
|
|
36
|
|
|
|
5
|
|
|
4
|
|
13
|
|
|
|
5
|
|
|
4
|
|
86
|
|
|
|
4
|
|
|
4
|
|
28
|
|
|
|
4
|
|
|
4
|
|
11
|
|
|
|
4
|
|
|
4
|
|
56
|
|
|
|
4
|
|
|
4
|
|
29
|
|
|
|
4
|
|
|
4
|
|
8
|
|
|
|
4
|
|
|
4
|
|
55
|
|
|
|
4
|
|
|
4
|
|
42
|
|
|
|
4
|
|
|
4
|
|
11
|
|
|
|
4
|
|
|
4
|
|
59
|
|
|
|
4
|
|
|
4
|
|
32
|
|
|
|
4
|
|
|
3
|
|
9
|
|
|
|
4
|
|
|
3
|
|
53
|
|
|
|
4
|
|
|
3
|
|
28
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
51
|
|
|
|
4
|
|
|
3
|
|
29
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
54
|
|
|
|
4
|
|
|
3
|
|
27
|
|
|
|
4
|
|
|
3
|
|
12
|
|
|
|
4
|
|
|
3
|
|
55
|
|
|
|
4
|
|
|
3
|
|
28
|
|
|
|
4
|
|
|
3
|
|
9
|
|
|
|
4
|
|
|
3
|
|
64
|
|
|
|
4
|
|
|
3
|
|
26
|
|
|
|
4
|
|
|
3
|
|
8
|
|
|
|
4
|
|
|
3
|
|
51
|
|
|
|
4
|
|
|
3
|
|
29
|
|
|
|
4
|
|
|
3
|
|
11
|
|
|
|
4
|
|
|
3
|
|
75
|
|
|
|
4
|
|
|
3
|
|
28
|
|
|
|
4
|
|
|
3
|
|
11
|
|
|
|
4
|
|
|
3
|
|
53
|
|
|
|
4
|
|
|
3
|
|
28
|
|
|
|
4
|
|
|
3
|
|
11
|
|
|
|
4
|
|
|
3
|
|
55
|
|
|
|
4
|
|
|
3
|
|
29
|
|
|
|
4
|
|
|
3
|
|
9
|
|
|
|
4
|
|
|
3
|
|
52
|
|
|
|
4
|
|
|
3
|
|
26
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
53
|
|
|
|
4
|
|
|
3
|
|
30
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
53
|
|
|
|
4
|
|
|
3
|
|
28
|
|
|
|
4
|
|
|
3
|
|
9
|
|
|
|
4
|
|
|
3
|
|
51
|
|
|
|
4
|
|
|
3
|
|
29
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
65
|
|
|
|
4
|
|
|
3
|
|
24
|
|
|
|
4
|
|
|
3
|
|
11
|
|
|
|
4
|
|
|
3
|
|
59
|
|
|
|
4
|
|
|
3
|
|
26
|
|
|
|
4
|
|
|
3
|
|
10
|
|
|
|
4
|
|
|
3
|
|
50
|
|
|
|
4
|
|
|
3
|
|
27
|
|
|
|
4
|
|
|
3
|
|
9
|
|
|
|
4
|
|
|
3
|
|
60
|
|
|
|
3
|
|
|
3
|
|
21
|
|
|
|
3
|
|
|
3
|
|
8
|
|
|
|
3
|
|
|
3
|
|
39
|
|
|
|
3
|
|
|
3
|
|
20
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
39
|
|
|
|
3
|
|
|
3
|
|
22
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
43
|
|
|
|
3
|
|
|
3
|
|
21
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
39
|
|
|
|
3
|
|
|
3
|
|
20
|
|
|
|
3
|
|
|
3
|
|
8
|
|
|
|
3
|
|
|
3
|
|
41
|
|
|
|
3
|
|
|
3
|
|
22
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
42
|
|
|
|
3
|
|
|
3
|
|
20
|
|
|
|
3
|
|
|
3
|
|
8
|
|
|
|
3
|
|
|
3
|
|
35
|
|
|
|
3
|
|
|
3
|
|
20
|
|
|
|
3
|
|
|
3
|
|
6
|
|
|
|
3
|
|
|
3
|
|
52
|
|
|
|
3
|
|
|
3
|
|
36
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
40
|
|
|
|
3
|
|
|
3
|
|
21
|
|
|
|
3
|
|
|
3
|
|
6
|
|
|
|
3
|
|
|
3
|
|
39
|
|
|
|
3
|
|
|
3
|
|
183
|
|
|
|
3
|
|
|
3
|
|
136
|
|
|
|
3
|
|
|
3
|
|
44
|
|
|
|
3
|
|
|
3
|
|
163
|
|
|
|
3
|
|
|
3
|
|
126
|
|
|
|
3
|
|
|
3
|
|
46
|
|
|
|
3
|
|
|
3
|
|
21
|
|
|
|
3
|
|
|
3
|
|
7
|
|
|
|
3
|
|
|
3
|
|
78
|
|
|
|
3
|
|
|
3
|
|
19
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
41
|
|
|
|
3
|
|
|
2
|
|
19
|
|
|
|
3
|
|
|
2
|
|
6
|
|
|
|
3
|
|
|
2
|
|
40
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
43
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
42
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
40
|
|
|
|
3
|
|
|
2
|
|
19
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
38
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
6
|
|
|
|
3
|
|
|
2
|
|
41
|
|
|
|
3
|
|
|
2
|
|
19
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
38
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
5
|
|
|
|
3
|
|
|
2
|
|
37
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
6
|
|
|
|
3
|
|
|
2
|
|
39
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
8
|
|
|
|
3
|
|
|
2
|
|
92
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
41
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
6
|
|
|
|
3
|
|
|
2
|
|
43
|
|
|
|
3
|
|
|
2
|
|
21
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
41
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
41
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
6
|
|
|
|
3
|
|
|
2
|
|
40
|
|
|
|
3
|
|
|
2
|
|
32
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
40
|
|
|
|
3
|
|
|
2
|
|
19
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
38
|
|
|
|
3
|
|
|
2
|
|
20
|
|
|
|
3
|
|
|
2
|
|
7
|
|
|
|
3
|
|
|
2
|
|
48
|
|
|
|
3
|
|
|
2
|
|
19
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
15
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
72
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
17
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
50
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
35
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
36
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
42
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
225
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
36
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
35
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
49
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
42
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
48
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
36
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
24
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
23
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
42
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
5
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
41
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
23
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
40
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
21
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
39
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
7
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
20
|
|
|
|
3
|
|
|
1
|
|
8
|
|
|
|
3
|
|
|
1
|
|
37
|
|
|
|
3
|
|
|
1
|
|
19
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
38
|
|
|
|
3
|
|
|
1
|
|
22
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
50
|
|
|
|
3
|
|
|
1
|
|
23
|
|
|
|
3
|
|
|
1
|
|
6
|
|
|
|
3
|
|
|
1
|
|
51
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
23
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
19
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
28
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
25
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
24
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
43
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
30
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
28
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
28
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
30
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
38
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
25
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
39
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
12
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
12
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
12
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
24
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
3
|
|
|
|
2
|
|
|
1
|
|
28
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
25
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
43
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
30
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
25
|
|
|
|
2
|
|
|
1
|
|
16
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
29
|
|
|
|
2
|
|
|
1
|
|
15
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
27
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
4
|
|
|
|
2
|
|
|
1
|
|
26
|
|
|
|
2
|
|
|
1
|
|
13
|
|
|
|
2
|
|
|
1
|
|
5
|
|
|
|
2
|
|
|
1
|
|
25
|
|
|
|
2
|
|
|
1
|
|
14
|
|
|
|
2
|
|
|
1
|
|
6
|
|
|
|
2
|
|
|
1
|
|
28
|
|
|
|
2
|
|
|
1
|
|
17
|
|
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
40
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
31
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
28
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
6
|
|
|
|
2
|
|
|
|
|
27
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
27
|
|
|
|
2
|
|
|
|
|
12
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
43
|
|
|
|
2
|
|
|
|
|
15
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
31
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
32
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
4
|
|
|
|
2
|
|
|
|
|
31
|
|
|
|
2
|
|
|
|
|
14
|
|
|
|
2
|
|
|
|
|
5
|
|
|
|
2
|
|
|
|
|
30
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
25
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
5
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
11
|
|
|
|
1
|
|
|
|
|
18
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
31
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
5
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
22
|
|
|
|
1
|
|
|
|
|
25
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
5
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
26
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
27
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
24
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
1
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
23
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
22
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
24
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
51
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
22
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
28
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
21
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
32
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
47
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
27
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
11
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
22
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
17
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
16
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
24
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
10
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
4
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
9
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
8
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
15
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
14
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
12
|
|
|
|
1
|
|
|
|
|
7
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
|
1
|
|
|
|
|
400
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
264
|
|
|
|
1
|
|
|
|
|
6
|
|
|
|
1
|
|
|
|
|
3
|
|
|
|
1
|
|
|
|
|
13
|
|
|
297
|
2804
|
|
|
|
|
7344
|
$error = $@; |
|
298
|
|
|
|
|
|
|
} |
|
299
|
3129
|
|
|
|
|
5164
|
$@ = $previous_error; |
|
300
|
|
|
|
|
|
|
# at this point $failed contains a true value if the eval died, |
|
301
|
|
|
|
|
|
|
# even if some destructor overwrote $@ as the eval was unwinding. |
|
302
|
3128
|
100
|
|
|
|
11127
|
return unless $failed; |
|
303
|
55
|
|
50
|
|
|
413
|
return ($error || '(unknown error)'); |
|
304
|
|
|
|
|
|
|
} |
|
305
|
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
|
|
307
|
|
|
|
|
|
|
# When printing array elements or hash keys, we may traverse all of it |
|
308
|
|
|
|
|
|
|
# or just a few chunks. This function returns those chunks' indexes, and |
|
309
|
|
|
|
|
|
|
# a scalar ref to a message whenever a chunk was skipped. |
|
310
|
|
|
|
|
|
|
sub _fetch_indexes_for { |
|
311
|
129
|
|
|
140
|
|
568
|
my ($array_ref, $prefix, $ddp) = @_; |
|
312
|
|
|
|
|
|
|
|
|
313
|
128
|
|
|
|
|
283
|
my $max_function = $prefix . '_max'; |
|
314
|
128
|
|
|
|
|
421
|
my $preserve_function = $prefix . '_preserve'; |
|
315
|
129
|
|
|
|
|
512
|
my $overflow_function = $prefix . '_overflow'; |
|
316
|
128
|
|
|
|
|
415
|
my $max = $ddp->$max_function; |
|
317
|
128
|
|
|
|
|
578
|
my $preserve = $ddp->$preserve_function; |
|
318
|
|
|
|
|
|
|
|
|
319
|
129
|
100
|
100
|
|
|
823
|
return (0 .. $#{$array_ref}) if !$max || @$array_ref <= $max; |
|
|
117
|
|
|
|
|
527
|
|
|
320
|
|
|
|
|
|
|
|
|
321
|
28
|
|
|
|
|
262
|
my $skip_message = $ddp->maybe_colorize($ddp->$overflow_function, 'overflow'); |
|
322
|
28
|
100
|
100
|
|
|
200
|
if ($preserve eq 'begin' || $preserve eq 'end') { |
|
|
|
100
|
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
323
|
22
|
|
|
|
|
59
|
my $n_elements = @$array_ref - $max; |
|
324
|
22
|
|
|
|
|
255
|
$skip_message =~ s/__SKIPPED__/$n_elements/g; |
|
325
|
|
|
|
|
|
|
return $preserve eq 'begin' |
|
326
|
|
|
|
|
|
|
? ((0 .. ($max - 1)), \$skip_message) |
|
327
|
22
|
100
|
|
|
|
138
|
: (\$skip_message, ($n_elements .. $#{$array_ref})) |
|
|
18
|
|
|
|
|
56
|
|
|
328
|
|
|
|
|
|
|
; |
|
329
|
|
|
|
|
|
|
} |
|
330
|
|
|
|
|
|
|
elsif ($preserve eq 'extremes') { |
|
331
|
18
|
|
|
|
|
212
|
my $half_max = int($max / 2); |
|
332
|
18
|
|
|
|
|
110
|
my $last_index_of_chunk_one = $half_max - 1; |
|
333
|
18
|
|
|
|
|
39
|
my $n_elements = @$array_ref - $max; |
|
334
|
|
|
|
|
|
|
|
|
335
|
18
|
|
|
|
|
248
|
my $first_index_of_chunk_two = @$array_ref - ($max - $half_max); |
|
336
|
18
|
|
|
|
|
120
|
$skip_message =~ s/__SKIPPED__/$n_elements/g; |
|
337
|
|
|
|
|
|
|
return ( |
|
338
|
|
|
|
|
|
|
(0 .. $last_index_of_chunk_one), |
|
339
|
|
|
|
|
|
|
\$skip_message, |
|
340
|
18
|
|
|
|
|
42
|
($first_index_of_chunk_two .. $#{$array_ref}) |
|
|
18
|
|
|
|
|
206
|
|
|
341
|
|
|
|
|
|
|
); |
|
342
|
|
|
|
|
|
|
} |
|
343
|
|
|
|
|
|
|
elsif ($preserve eq 'middle') { |
|
344
|
7
|
|
|
|
|
40
|
my $array_middle = int($#{$array_ref} / 2); |
|
|
7
|
|
|
|
|
21
|
|
|
345
|
7
|
|
|
|
|
70
|
my $first_index_to_show = $array_middle - int($max / 2); |
|
346
|
7
|
|
|
|
|
39
|
my $last_index_to_show = $first_index_to_show + $max - 1; |
|
347
|
7
|
|
|
|
|
22
|
my ($message_begin, $message_end) = ($skip_message, $skip_message); |
|
348
|
7
|
|
|
|
|
77
|
$message_begin =~ s/__SKIPPED__/$first_index_to_show/gse; |
|
|
7
|
|
|
|
|
48
|
|
|
349
|
7
|
|
|
|
|
16
|
my $items_left = $#{$array_ref} - $last_index_to_show; |
|
|
7
|
|
|
|
|
79
|
|
|
350
|
7
|
|
|
|
|
45
|
$message_end =~ s/__SKIPPED__/$items_left/gs; |
|
351
|
|
|
|
|
|
|
return ( |
|
352
|
7
|
|
|
|
|
26
|
\$message_begin, |
|
353
|
|
|
|
|
|
|
$first_index_to_show .. $last_index_to_show, |
|
354
|
|
|
|
|
|
|
\$message_end |
|
355
|
|
|
|
|
|
|
); |
|
356
|
|
|
|
|
|
|
} |
|
357
|
|
|
|
|
|
|
else { # $preserve eq 'none' |
|
358
|
7
|
|
|
|
|
77
|
my $n_elements = scalar(@$array_ref); |
|
359
|
7
|
|
|
|
|
48
|
$skip_message =~ s/__SKIPPED__/$n_elements/g; |
|
360
|
7
|
|
|
|
|
23
|
return (\$skip_message); |
|
361
|
|
|
|
|
|
|
} |
|
362
|
|
|
|
|
|
|
} |
|
363
|
|
|
|
|
|
|
|
|
364
|
|
|
|
|
|
|
# helpers below strongly inspired by the excellent Package::Stash: |
|
365
|
|
|
|
|
|
|
sub _linear_ISA_for { |
|
366
|
149
|
|
|
171
|
|
400
|
my ($class, $ddp) = @_; |
|
367
|
149
|
100
|
|
|
|
352
|
_initialize_mro($ddp) unless $mro_initialized; |
|
368
|
149
|
|
|
|
|
241
|
my $isa; |
|
369
|
149
|
50
|
|
|
|
348
|
if ($mro_initialized > 0) { |
|
370
|
149
|
|
|
|
|
592
|
$isa = mro::get_linear_isa($class); |
|
371
|
|
|
|
|
|
|
} |
|
372
|
|
|
|
|
|
|
else { |
|
373
|
|
|
|
|
|
|
# minimal fallback in case Class::MRO isn't available |
|
374
|
|
|
|
|
|
|
# (should only matter for perl < 5.009_005): |
|
375
|
5
|
|
|
|
|
11
|
$isa = [ $class, _get_superclasses_for($class) ]; |
|
376
|
|
|
|
|
|
|
} |
|
377
|
149
|
100
|
|
|
|
487
|
return [@$isa, ($ddp->class->universal ? 'UNIVERSAL' : ())]; |
|
378
|
|
|
|
|
|
|
} |
|
379
|
|
|
|
|
|
|
|
|
380
|
|
|
|
|
|
|
sub _initialize_mro { |
|
381
|
16
|
|
|
38
|
|
63
|
my ($ddp) = @_; |
|
382
|
|
|
|
|
|
|
my $error = _tryme(sub { |
|
383
|
16
|
50
|
|
37
|
|
140
|
if ($] < 5.009_005) { require MRO::Compat } |
|
|
5
|
|
|
|
|
34
|
|
|
384
|
16
|
|
|
|
|
91
|
else { require mro } |
|
385
|
16
|
|
|
|
|
97
|
1; |
|
386
|
16
|
|
|
|
|
86
|
}); |
|
387
|
16
|
0
|
33
|
|
|
130
|
if ($error && index($error, 'in @INC') != -1 && $mro_initialized == 0) { |
|
|
|
|
33
|
|
|
|
|
|
388
|
5
|
0
|
|
|
|
14
|
_warn( |
|
389
|
|
|
|
|
|
|
$ddp, |
|
390
|
|
|
|
|
|
|
($] < 5.009_005 ? 'MRO::Compat' : 'mro') . ' not found in @INC.' |
|
391
|
|
|
|
|
|
|
. ' Objects may display inaccurate/incomplete ISA and method list' |
|
392
|
|
|
|
|
|
|
); |
|
393
|
|
|
|
|
|
|
} |
|
394
|
16
|
50
|
|
|
|
133
|
$mro_initialized = $error ? -1 : 1; |
|
395
|
|
|
|
|
|
|
} |
|
396
|
|
|
|
|
|
|
|
|
397
|
|
|
|
|
|
|
sub _get_namespace { |
|
398
|
113
|
|
|
134
|
|
259
|
my ($class_name) = @_; |
|
399
|
113
|
|
|
|
|
172
|
my $namespace; |
|
400
|
|
|
|
|
|
|
{ |
|
401
|
81
|
|
|
81
|
|
628
|
no strict 'refs'; |
|
|
81
|
|
|
|
|
201
|
|
|
|
81
|
|
|
|
|
9286
|
|
|
|
113
|
|
|
|
|
232
|
|
|
402
|
113
|
|
|
|
|
177
|
$namespace = \%{ $class_name . '::' } |
|
|
113
|
|
|
|
|
381
|
|
|
403
|
|
|
|
|
|
|
} |
|
404
|
|
|
|
|
|
|
# before 5.10, stashes don't ever seem to drop to a refcount of zero, |
|
405
|
|
|
|
|
|
|
# so weakening them isn't helpful |
|
406
|
113
|
50
|
|
|
|
466
|
Scalar::Util::weaken($namespace) if $] >= 5.010; |
|
407
|
|
|
|
|
|
|
|
|
408
|
113
|
|
|
|
|
288
|
return $namespace; |
|
409
|
|
|
|
|
|
|
} |
|
410
|
|
|
|
|
|
|
|
|
411
|
|
|
|
|
|
|
sub _get_superclasses_for { |
|
412
|
43
|
|
|
64
|
|
124
|
my ($class_name) = @_; |
|
413
|
43
|
|
|
|
|
141
|
my $namespace = _get_namespace($class_name); |
|
414
|
43
|
|
|
|
|
120
|
my $res = _get_symbol($class_name, $namespace, 'ISA', 'ARRAY'); |
|
415
|
43
|
100
|
|
|
|
73
|
return @{ $res || [] }; |
|
|
43
|
|
|
|
|
295
|
|
|
416
|
|
|
|
|
|
|
} |
|
417
|
|
|
|
|
|
|
|
|
418
|
|
|
|
|
|
|
sub _get_symbol { |
|
419
|
267
|
|
|
287
|
|
534
|
my ($class_name, $namespace, $symbol_name, $symbol_kind) = @_; |
|
420
|
|
|
|
|
|
|
|
|
421
|
267
|
100
|
|
|
|
564
|
if (exists $namespace->{$symbol_name}) { |
|
422
|
252
|
|
|
|
|
435
|
my $entry_ref = \$namespace->{$symbol_name}; |
|
423
|
252
|
50
|
|
|
|
552
|
if (ref($entry_ref) eq 'GLOB') { |
|
424
|
252
|
|
|
|
|
342
|
return *{$entry_ref}{$symbol_kind}; |
|
|
252
|
|
|
|
|
830
|
|
|
425
|
|
|
|
|
|
|
} |
|
426
|
|
|
|
|
|
|
else { |
|
427
|
5
|
0
|
|
|
|
38
|
if ($symbol_kind eq 'CODE') { |
|
428
|
81
|
|
|
81
|
|
615
|
no strict 'refs'; |
|
|
81
|
|
|
|
|
186
|
|
|
|
81
|
|
|
|
|
4142
|
|
|
429
|
5
|
|
|
|
|
12
|
return \&{ $class_name . '::' . $symbol_name }; |
|
|
5
|
|
|
|
|
68
|
|
|
430
|
|
|
|
|
|
|
} |
|
431
|
|
|
|
|
|
|
} |
|
432
|
|
|
|
|
|
|
} |
|
433
|
20
|
|
|
|
|
66
|
return; |
|
434
|
|
|
|
|
|
|
} |
|
435
|
|
|
|
|
|
|
|
|
436
|
|
|
|
|
|
|
1; |