line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package Tk::Spectrum; |
2
|
|
|
|
|
|
|
|
3
|
1
|
|
|
1
|
|
25443
|
use strict; |
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
43
|
|
4
|
1
|
|
|
1
|
|
6
|
use warnings; |
|
1
|
|
|
|
|
4
|
|
|
1
|
|
|
|
|
33
|
|
5
|
1
|
|
|
1
|
|
480
|
use Tk; |
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
use Tk::PNG; |
7
|
|
|
|
|
|
|
use Tk::DialogBox; |
8
|
|
|
|
|
|
|
use Tk::Widget; |
9
|
|
|
|
|
|
|
use Tk::LabFrame; |
10
|
|
|
|
|
|
|
|
11
|
|
|
|
|
|
|
our $VERSION = '0.02'; |
12
|
|
|
|
|
|
|
|
13
|
|
|
|
|
|
|
Tk::Widget->Construct ('Spectrum'); |
14
|
|
|
|
|
|
|
|
15
|
|
|
|
|
|
|
sub new { |
16
|
|
|
|
|
|
|
my $proto = shift; |
17
|
|
|
|
|
|
|
my $mw = shift; |
18
|
|
|
|
|
|
|
my $class = ref($proto) || $proto || 'Tk::Spectrum'; |
19
|
|
|
|
|
|
|
|
20
|
|
|
|
|
|
|
my $self = { |
21
|
|
|
|
|
|
|
mw => $mw, |
22
|
|
|
|
|
|
|
@_, |
23
|
|
|
|
|
|
|
}; |
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
bless ($self,$class); |
26
|
|
|
|
|
|
|
return $self->Show; |
27
|
|
|
|
|
|
|
} |
28
|
|
|
|
|
|
|
|
29
|
|
|
|
|
|
|
sub Show { |
30
|
|
|
|
|
|
|
my ($args) = @_; |
31
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
# Args: |
33
|
|
|
|
|
|
|
# mw = parent window |
34
|
|
|
|
|
|
|
# -title = Dialog title |
35
|
|
|
|
|
|
|
# -initialcolor = Initial/Default Color |
36
|
|
|
|
|
|
|
# -buttons = [ 'Ok', 'Cancel' ] |
37
|
|
|
|
|
|
|
my $btnOkay = 'Ok'; |
38
|
|
|
|
|
|
|
my $btnCancel = 'Cancel'; |
39
|
|
|
|
|
|
|
my $initColor = exists $args->{'-initialcolor'} ? $args->{'-initialcolor'} : '#FFFFFF'; |
40
|
|
|
|
|
|
|
$args->{selectedbtn} = ''; |
41
|
|
|
|
|
|
|
$args->{selectedcolor} = $initColor; |
42
|
|
|
|
|
|
|
$args->{redval} = 0; |
43
|
|
|
|
|
|
|
$args->{grnval} = 0; |
44
|
|
|
|
|
|
|
$args->{bluval} = 0; |
45
|
|
|
|
|
|
|
$args->{hexval} = $initColor; |
46
|
|
|
|
|
|
|
my $presets = [ |
47
|
|
|
|
|
|
|
# Two rows: 9 on top, 9 on bottom. |
48
|
|
|
|
|
|
|
[ |
49
|
|
|
|
|
|
|
'#FFFFFF', # White |
50
|
|
|
|
|
|
|
'#CCCCCC', # Light Grey |
51
|
|
|
|
|
|
|
'#FF0000', # Red |
52
|
|
|
|
|
|
|
'#FF9900', # Orange |
53
|
|
|
|
|
|
|
'#FFFF00', # Yellow |
54
|
|
|
|
|
|
|
'#00FF00', # Lime Green |
55
|
|
|
|
|
|
|
'#00FFFF', # Cyan |
56
|
|
|
|
|
|
|
'#0000FF', # Blue |
57
|
|
|
|
|
|
|
'#FF00FF', # Magenta |
58
|
|
|
|
|
|
|
'#FF9999', # Pastel Red |
59
|
|
|
|
|
|
|
'#99FF99', # Pastel Green |
60
|
|
|
|
|
|
|
], |
61
|
|
|
|
|
|
|
[ |
62
|
|
|
|
|
|
|
'#000000', # Black |
63
|
|
|
|
|
|
|
'#999999', # Dark Grey |
64
|
|
|
|
|
|
|
'#990000', # Dark Red |
65
|
|
|
|
|
|
|
'#996600', # Brown |
66
|
|
|
|
|
|
|
'#999900', # Gold |
67
|
|
|
|
|
|
|
'#009900', # Green |
68
|
|
|
|
|
|
|
'#009999', # Teal |
69
|
|
|
|
|
|
|
'#000099', # Dark Blue |
70
|
|
|
|
|
|
|
'#990099', # Purple |
71
|
|
|
|
|
|
|
'#9999FF', # Pastel Blue |
72
|
|
|
|
|
|
|
'#FFFF99', # Pastel Yellow |
73
|
|
|
|
|
|
|
], |
74
|
|
|
|
|
|
|
]; |
75
|
|
|
|
|
|
|
if (exists $args->{'-preset'}) { |
76
|
|
|
|
|
|
|
$presets = []; |
77
|
|
|
|
|
|
|
foreach my $row (@{$args->{'-preset'}}) { |
78
|
|
|
|
|
|
|
if (defined $row && ref($row) eq 'ARRAY') { |
79
|
|
|
|
|
|
|
push (@{$presets}, $row); |
80
|
|
|
|
|
|
|
} |
81
|
|
|
|
|
|
|
else { |
82
|
|
|
|
|
|
|
warn "Invalid -preset syntax for Tk::Spectrum\n"; |
83
|
|
|
|
|
|
|
} |
84
|
|
|
|
|
|
|
} |
85
|
|
|
|
|
|
|
} |
86
|
|
|
|
|
|
|
if (exists $args->{'-buttons'}) { |
87
|
|
|
|
|
|
|
if (scalar @{$args->{'-buttons'}} == 1) { |
88
|
|
|
|
|
|
|
$btnOkay = $args->{'-buttons'}->[0]; |
89
|
|
|
|
|
|
|
} |
90
|
|
|
|
|
|
|
elsif (scalar @{$args->{'-buttons'}} >= 2) { |
91
|
|
|
|
|
|
|
$btnOkay = $args->{'-buttons'}->[0]; |
92
|
|
|
|
|
|
|
$btnCancel = $args->{'-buttons'}->[1]; |
93
|
|
|
|
|
|
|
} |
94
|
|
|
|
|
|
|
} |
95
|
|
|
|
|
|
|
|
96
|
|
|
|
|
|
|
my $win = $args->{mw}->Toplevel ( |
97
|
|
|
|
|
|
|
-title => $args->{'-title'} || 'Select Color', |
98
|
|
|
|
|
|
|
); |
99
|
|
|
|
|
|
|
$win->protocol ('WM_DELETE_WINDOW' => sub { |
100
|
|
|
|
|
|
|
$args->{selectedbtn} = $btnCancel; |
101
|
|
|
|
|
|
|
}); |
102
|
|
|
|
|
|
|
$win->transient ($win->Parent->toplevel); |
103
|
|
|
|
|
|
|
$win->grab; |
104
|
|
|
|
|
|
|
|
105
|
|
|
|
|
|
|
# Divide up the main frames. |
106
|
|
|
|
|
|
|
my $btnFrame = $win->Frame->pack (-side => 'bottom', -fill => 'x'); |
107
|
|
|
|
|
|
|
my $topFrame = $win->Frame->pack (-side => 'bottom', -fill => 'both', -expand => 1); |
108
|
|
|
|
|
|
|
my $leftFrame = $topFrame->Frame->pack (-side => 'left', -fill => 'y'); |
109
|
|
|
|
|
|
|
my $rightFrame = $topFrame->Frame->pack (-side => 'left', -fill => 'both', -expand => 1); |
110
|
|
|
|
|
|
|
|
111
|
|
|
|
|
|
|
# Create the buttons. |
112
|
|
|
|
|
|
|
$btnFrame->Button ( |
113
|
|
|
|
|
|
|
-text => $btnCancel, |
114
|
|
|
|
|
|
|
-command => sub { |
115
|
|
|
|
|
|
|
$args->{selectedbtn} = $btnCancel; |
116
|
|
|
|
|
|
|
}, |
117
|
|
|
|
|
|
|
)->pack (-side => 'right', -padx => 5, -pady => 5); |
118
|
|
|
|
|
|
|
$btnFrame->Button ( |
119
|
|
|
|
|
|
|
-text => $btnOkay, |
120
|
|
|
|
|
|
|
-command => sub { |
121
|
|
|
|
|
|
|
$args->{selectedbtn} = $btnOkay; |
122
|
|
|
|
|
|
|
}, |
123
|
|
|
|
|
|
|
)->pack (-side => 'right', -padx => 5, -pady => 5); |
124
|
|
|
|
|
|
|
|
125
|
|
|
|
|
|
|
######################################################################## |
126
|
|
|
|
|
|
|
## Left Frame (Spectrum and Preview Widgets) ## |
127
|
|
|
|
|
|
|
######################################################################## |
128
|
|
|
|
|
|
|
|
129
|
|
|
|
|
|
|
# Create the spectrum viewer. |
130
|
|
|
|
|
|
|
my $specPhoto = $win->Photo ( |
131
|
|
|
|
|
|
|
-data => $args->getSpectrum, |
132
|
|
|
|
|
|
|
-format => 'PNG', |
133
|
|
|
|
|
|
|
-width => 200, |
134
|
|
|
|
|
|
|
-height => 100, |
135
|
|
|
|
|
|
|
); |
136
|
|
|
|
|
|
|
my $specLabel = $leftFrame->Label ( |
137
|
|
|
|
|
|
|
-borderwidth => 2, |
138
|
|
|
|
|
|
|
-relief => 'sunken', |
139
|
|
|
|
|
|
|
-image => $specPhoto, |
140
|
|
|
|
|
|
|
)->pack (-side => 'top', -pady => 10, -padx => 5); |
141
|
|
|
|
|
|
|
|
142
|
|
|
|
|
|
|
# Create the color preview objects. |
143
|
|
|
|
|
|
|
my $preFrame = $leftFrame->Frame ( |
144
|
|
|
|
|
|
|
-borderwidth => 1, |
145
|
|
|
|
|
|
|
-relief => 'sunken', |
146
|
|
|
|
|
|
|
-width => 102, |
147
|
|
|
|
|
|
|
-height => 25, |
148
|
|
|
|
|
|
|
)->pack (-side => 'top'); |
149
|
|
|
|
|
|
|
my $curColor = $preFrame->Frame ( |
150
|
|
|
|
|
|
|
-background => $initColor, |
151
|
|
|
|
|
|
|
-width => 50, |
152
|
|
|
|
|
|
|
-height => 25, |
153
|
|
|
|
|
|
|
)->pack (-side => 'left'); |
154
|
|
|
|
|
|
|
$preFrame->Frame ( |
155
|
|
|
|
|
|
|
-borderwidth => 1, |
156
|
|
|
|
|
|
|
-relief => 'raised', |
157
|
|
|
|
|
|
|
-width => 2, |
158
|
|
|
|
|
|
|
-height => 25, |
159
|
|
|
|
|
|
|
)->pack (-side => 'left'); |
160
|
|
|
|
|
|
|
my $firstColor = $preFrame->Frame ( |
161
|
|
|
|
|
|
|
-background => $initColor, |
162
|
|
|
|
|
|
|
-width => 50, |
163
|
|
|
|
|
|
|
-height => 25, |
164
|
|
|
|
|
|
|
)->pack (-side => 'left'); |
165
|
|
|
|
|
|
|
|
166
|
|
|
|
|
|
|
# Bind mouse clicks on the spectrum. |
167
|
|
|
|
|
|
|
my $clicking = 0; |
168
|
|
|
|
|
|
|
$specLabel->bind ('', sub { |
169
|
|
|
|
|
|
|
my $x = $Tk::event->x; |
170
|
|
|
|
|
|
|
my $y = $Tk::event->y; |
171
|
|
|
|
|
|
|
$clicking = 1; |
172
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
if ($x < 200 && $y < 100 && $x > 0 && $y > 0) { |
174
|
|
|
|
|
|
|
my $color = $specPhoto->get ($x,$y); |
175
|
|
|
|
|
|
|
my $hex = $args->getHex($color); |
176
|
|
|
|
|
|
|
$curColor->configure (-background => $hex); |
177
|
|
|
|
|
|
|
$args->{selectedcolor} = $hex; |
178
|
|
|
|
|
|
|
$args->hexToRGB($hex); |
179
|
|
|
|
|
|
|
} |
180
|
|
|
|
|
|
|
}); |
181
|
|
|
|
|
|
|
$specLabel->bind ('', sub { |
182
|
|
|
|
|
|
|
if ($clicking) { |
183
|
|
|
|
|
|
|
my $x = $Tk::event->x; |
184
|
|
|
|
|
|
|
my $y = $Tk::event->y; |
185
|
|
|
|
|
|
|
|
186
|
|
|
|
|
|
|
my $hex = ''; |
187
|
|
|
|
|
|
|
if ($y < 0) { |
188
|
|
|
|
|
|
|
$hex = '#ffffff'; |
189
|
|
|
|
|
|
|
} |
190
|
|
|
|
|
|
|
elsif ($y > 100) { |
191
|
|
|
|
|
|
|
$hex = '#000000'; |
192
|
|
|
|
|
|
|
} |
193
|
|
|
|
|
|
|
elsif ($x < 0 || $x > 200) { |
194
|
|
|
|
|
|
|
$hex = '#ff0000'; |
195
|
|
|
|
|
|
|
} |
196
|
|
|
|
|
|
|
|
197
|
|
|
|
|
|
|
if (length $hex == 0) { |
198
|
|
|
|
|
|
|
if ($x < 200 && $y < 100 && $x > 0 && $y > 0) { |
199
|
|
|
|
|
|
|
my $color = $specPhoto->get ($x,$y); |
200
|
|
|
|
|
|
|
$hex = $args->getHex($color); |
201
|
|
|
|
|
|
|
} |
202
|
|
|
|
|
|
|
} |
203
|
|
|
|
|
|
|
|
204
|
|
|
|
|
|
|
if (length $hex) { |
205
|
|
|
|
|
|
|
$curColor->configure (-background => $hex); |
206
|
|
|
|
|
|
|
$args->{selectedcolor} = $hex; |
207
|
|
|
|
|
|
|
$args->hexToRGB($hex); |
208
|
|
|
|
|
|
|
} |
209
|
|
|
|
|
|
|
} |
210
|
|
|
|
|
|
|
}); |
211
|
|
|
|
|
|
|
$specLabel->bind ('', sub { |
212
|
|
|
|
|
|
|
$clicking = 0; |
213
|
|
|
|
|
|
|
}); |
214
|
|
|
|
|
|
|
$firstColor->bind ('', sub { |
215
|
|
|
|
|
|
|
$curColor->configure (-background => $initColor); |
216
|
|
|
|
|
|
|
$args->{selectedcolor} = $initColor; |
217
|
|
|
|
|
|
|
$args->hexToRGB($initColor); |
218
|
|
|
|
|
|
|
}); |
219
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
######################################################################## |
221
|
|
|
|
|
|
|
## Right Frame (Text Boxes) ## |
222
|
|
|
|
|
|
|
######################################################################## |
223
|
|
|
|
|
|
|
|
224
|
|
|
|
|
|
|
my $labValues = $rightFrame->LabFrame ( |
225
|
|
|
|
|
|
|
-label => 'Values', |
226
|
|
|
|
|
|
|
-labelside => 'acrosstop', |
227
|
|
|
|
|
|
|
)->pack (-side => 'top', -fill => 'x', -padx => 5); |
228
|
|
|
|
|
|
|
|
229
|
|
|
|
|
|
|
$labValues->Label ( |
230
|
|
|
|
|
|
|
-text => 'Red:', |
231
|
|
|
|
|
|
|
)->grid (-column => 0, -row => 0); |
232
|
|
|
|
|
|
|
my $txtRed = $labValues->Entry ( |
233
|
|
|
|
|
|
|
-textvariable => \$args->{redval}, |
234
|
|
|
|
|
|
|
-width => 3, |
235
|
|
|
|
|
|
|
)->grid (-column => 1, -row => 0); |
236
|
|
|
|
|
|
|
$labValues->Label ( |
237
|
|
|
|
|
|
|
-text => 'Green:', |
238
|
|
|
|
|
|
|
)->grid (-column => 2, -row => 0); |
239
|
|
|
|
|
|
|
my $txtGrn = $labValues->Entry ( |
240
|
|
|
|
|
|
|
-textvariable => \$args->{grnval}, |
241
|
|
|
|
|
|
|
-width => 3, |
242
|
|
|
|
|
|
|
)->grid (-column => 3, -row => 0); |
243
|
|
|
|
|
|
|
$labValues->Label ( |
244
|
|
|
|
|
|
|
-text => 'Blue:', |
245
|
|
|
|
|
|
|
)->grid (-column => 4, -row => 0); |
246
|
|
|
|
|
|
|
my $txtBlu = $labValues->Entry ( |
247
|
|
|
|
|
|
|
-textvariable => \$args->{bluval}, |
248
|
|
|
|
|
|
|
-width => 3, |
249
|
|
|
|
|
|
|
)->grid (-column => 5, -row => 0); |
250
|
|
|
|
|
|
|
|
251
|
|
|
|
|
|
|
# Bind the return keys for these entries. |
252
|
|
|
|
|
|
|
$txtRed->bind ('', sub { |
253
|
|
|
|
|
|
|
my $hex = $args->getHex ([ |
254
|
|
|
|
|
|
|
$args->{redval}, |
255
|
|
|
|
|
|
|
$args->{grnval}, |
256
|
|
|
|
|
|
|
$args->{bluval}, |
257
|
|
|
|
|
|
|
]); |
258
|
|
|
|
|
|
|
$curColor->configure (-background => $hex); |
259
|
|
|
|
|
|
|
$args->{selectedcolor} = $hex; |
260
|
|
|
|
|
|
|
$args->hexToRGB($hex); |
261
|
|
|
|
|
|
|
}); |
262
|
|
|
|
|
|
|
$txtGrn->bind ('', sub { |
263
|
|
|
|
|
|
|
my $hex = $args->getHex ([ |
264
|
|
|
|
|
|
|
$args->{redval}, |
265
|
|
|
|
|
|
|
$args->{grnval}, |
266
|
|
|
|
|
|
|
$args->{bluval}, |
267
|
|
|
|
|
|
|
]); |
268
|
|
|
|
|
|
|
$curColor->configure (-background => $hex); |
269
|
|
|
|
|
|
|
$args->{selectedcolor} = $hex; |
270
|
|
|
|
|
|
|
$args->hexToRGB($hex); |
271
|
|
|
|
|
|
|
}); |
272
|
|
|
|
|
|
|
$txtBlu->bind ('', sub { |
273
|
|
|
|
|
|
|
my $hex = $args->getHex ([ |
274
|
|
|
|
|
|
|
$args->{redval}, |
275
|
|
|
|
|
|
|
$args->{grnval}, |
276
|
|
|
|
|
|
|
$args->{bluval}, |
277
|
|
|
|
|
|
|
]); |
278
|
|
|
|
|
|
|
$curColor->configure (-background => $hex); |
279
|
|
|
|
|
|
|
$args->{selectedcolor} = $hex; |
280
|
|
|
|
|
|
|
$args->hexToRGB($hex); |
281
|
|
|
|
|
|
|
}); |
282
|
|
|
|
|
|
|
|
283
|
|
|
|
|
|
|
$labValues->Label ( |
284
|
|
|
|
|
|
|
-text => 'Hex:', |
285
|
|
|
|
|
|
|
)->grid (-column => 0, -row => 1); |
286
|
|
|
|
|
|
|
my $txtHex = $labValues->Entry ( |
287
|
|
|
|
|
|
|
-textvariable => \$args->{hexval}, |
288
|
|
|
|
|
|
|
)->grid (-column => 1, -row => 1, -columnspan => 5, -sticky => 'ew'); |
289
|
|
|
|
|
|
|
$txtHex->bind ('', sub { |
290
|
|
|
|
|
|
|
my $valid = 1; |
291
|
|
|
|
|
|
|
if (length $args->{hexval} > 7 || length $args->{hexval} < 6) { |
292
|
|
|
|
|
|
|
$valid = 0; |
293
|
|
|
|
|
|
|
} |
294
|
|
|
|
|
|
|
if ($args->{hexval} =~ /[^A-Fa-f0-9\#]/) { |
295
|
|
|
|
|
|
|
$valid = 0; |
296
|
|
|
|
|
|
|
} |
297
|
|
|
|
|
|
|
|
298
|
|
|
|
|
|
|
if ($valid) { |
299
|
|
|
|
|
|
|
$args->{hexval} = '#' . $args->{hexval} unless $args->{hexval} =~ /^#/; |
300
|
|
|
|
|
|
|
$curColor->configure (-background => $args->{hexval}); |
301
|
|
|
|
|
|
|
$args->{selectedcolor} = $args->{hexval}; |
302
|
|
|
|
|
|
|
$args->hexToRGB($args->{hexval}); |
303
|
|
|
|
|
|
|
} |
304
|
|
|
|
|
|
|
}); |
305
|
|
|
|
|
|
|
|
306
|
|
|
|
|
|
|
my $labPreset = $rightFrame->LabFrame ( |
307
|
|
|
|
|
|
|
-label => 'Preset Colors', |
308
|
|
|
|
|
|
|
-labelside => 'acrosstop', |
309
|
|
|
|
|
|
|
)->pack (-side => 'top', -fill => 'x', -padx => 5); |
310
|
|
|
|
|
|
|
|
311
|
|
|
|
|
|
|
my $y = 0; |
312
|
|
|
|
|
|
|
foreach my $row (@{$presets}) { |
313
|
|
|
|
|
|
|
my $x = 0; |
314
|
|
|
|
|
|
|
foreach my $color (@{$row}) { |
315
|
|
|
|
|
|
|
my $pre = $labPreset->Frame ( |
316
|
|
|
|
|
|
|
-background => $color, |
317
|
|
|
|
|
|
|
-borderwidth => 1, |
318
|
|
|
|
|
|
|
-relief => 'sunken', |
319
|
|
|
|
|
|
|
-width => 19, |
320
|
|
|
|
|
|
|
-height => 19, |
321
|
|
|
|
|
|
|
)->grid (-column => $x, -row => $y); |
322
|
|
|
|
|
|
|
$pre->bind ('', sub { |
323
|
|
|
|
|
|
|
$curColor->configure (-background => $color); |
324
|
|
|
|
|
|
|
$args->{selectedcolor} = $color; |
325
|
|
|
|
|
|
|
$args->hexToRGB($color); |
326
|
|
|
|
|
|
|
}); |
327
|
|
|
|
|
|
|
$x++; |
328
|
|
|
|
|
|
|
} |
329
|
|
|
|
|
|
|
$y++; |
330
|
|
|
|
|
|
|
} |
331
|
|
|
|
|
|
|
|
332
|
|
|
|
|
|
|
# Load the data for the initial color. |
333
|
|
|
|
|
|
|
$args->hexToRGB($initColor); |
334
|
|
|
|
|
|
|
|
335
|
|
|
|
|
|
|
$win->waitVariable (\$args->{selectedbtn}); |
336
|
|
|
|
|
|
|
$win->destroy; |
337
|
|
|
|
|
|
|
|
338
|
|
|
|
|
|
|
if ($args->{selectedbtn} eq $btnOkay) { |
339
|
|
|
|
|
|
|
return $args->{selectedcolor}; |
340
|
|
|
|
|
|
|
} |
341
|
|
|
|
|
|
|
else { |
342
|
|
|
|
|
|
|
return $initColor; |
343
|
|
|
|
|
|
|
} |
344
|
|
|
|
|
|
|
} |
345
|
|
|
|
|
|
|
|
346
|
|
|
|
|
|
|
sub getHex { |
347
|
|
|
|
|
|
|
my ($self,$color) = @_; |
348
|
|
|
|
|
|
|
|
349
|
|
|
|
|
|
|
for (my $i = 0; $i < 3; $i++) { |
350
|
|
|
|
|
|
|
if ($color->[$i] =~ /[^0-9]/) { |
351
|
|
|
|
|
|
|
$color->[$i] = 0; |
352
|
|
|
|
|
|
|
} |
353
|
|
|
|
|
|
|
if ($color->[$i] < 0) { |
354
|
|
|
|
|
|
|
$color->[$i] = 0; |
355
|
|
|
|
|
|
|
} |
356
|
|
|
|
|
|
|
elsif ($color->[$i] > 255) { |
357
|
|
|
|
|
|
|
$color->[$i] = 255; |
358
|
|
|
|
|
|
|
} |
359
|
|
|
|
|
|
|
} |
360
|
|
|
|
|
|
|
|
361
|
|
|
|
|
|
|
my $red = sprintf("%x",$color->[0]); |
362
|
|
|
|
|
|
|
my $grn = sprintf("%x",$color->[1]); |
363
|
|
|
|
|
|
|
my $blu = sprintf("%x",$color->[2]); |
364
|
|
|
|
|
|
|
|
365
|
|
|
|
|
|
|
$red = '0' . $red until length $red == 2; |
366
|
|
|
|
|
|
|
$grn = '0' . $grn until length $grn == 2; |
367
|
|
|
|
|
|
|
$blu = '0' . $blu until length $blu == 2; |
368
|
|
|
|
|
|
|
|
369
|
|
|
|
|
|
|
return '#' . join("",$red,$grn,$blu); |
370
|
|
|
|
|
|
|
} |
371
|
|
|
|
|
|
|
|
372
|
|
|
|
|
|
|
sub hexToRGB { |
373
|
|
|
|
|
|
|
my ($self,$hex) = @_; |
374
|
|
|
|
|
|
|
|
375
|
|
|
|
|
|
|
$hex =~ s/^#//g; |
376
|
|
|
|
|
|
|
|
377
|
|
|
|
|
|
|
my ($r,$g,$b) = $hex =~ /^(..)(..)(..)$/; |
378
|
|
|
|
|
|
|
my $red = oct("0x$r"); |
379
|
|
|
|
|
|
|
my $grn = oct("0x$g"); |
380
|
|
|
|
|
|
|
my $blu = oct("0x$b"); |
381
|
|
|
|
|
|
|
|
382
|
|
|
|
|
|
|
$self->{redval} = $red; |
383
|
|
|
|
|
|
|
$self->{grnval} = $grn; |
384
|
|
|
|
|
|
|
$self->{bluval} = $blu; |
385
|
|
|
|
|
|
|
$self->{hexval} = '#' . $hex; |
386
|
|
|
|
|
|
|
} |
387
|
|
|
|
|
|
|
|
388
|
|
|
|
|
|
|
sub getSpectrum { |
389
|
|
|
|
|
|
|
return qq~iVBORw0KGgoAAAANSUhEUgAAAMgAAABkCAIAAABM5OhcAAAABGdBTUEAAK/INwWK6QAAABl0RVh0 |
390
|
|
|
|
|
|
|
U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAACvxSURBVHjaYvz//z/DKBgF1AYAAcQ0GgSj |
391
|
|
|
|
|
|
|
gBYAIIBGE9YooAkACKDRhDUKaAIAAmg0YY0CmgCAAHRXSRKAIAxrHP//YC6RpS2pqAeQpGt6gdta |
392
|
|
|
|
|
|
|
s35/B8YJAa8b/QCDmqjvBa9gfshNHwegu0DSuDUd5zQrXpl+4QiDajTAWK/8X5QFm6HEfsdApTIF |
393
|
|
|
|
|
|
|
onjtOWNRCnXlzvaE+rRRpXkI2Ske8o+52Y/8kCop07A4Ygux16IoS1c450ap7O34CMBGGSQBCMIw |
394
|
|
|
|
|
|
|
MHX8/3e5EUcpbcJ4pAIm7YYbY3wvV+SBUG7YAq34LQO+Ad2YAiPgklsjbS7vARVb3KwxT7mOTd4v |
395
|
|
|
|
|
|
|
Xpf/u5C6vFX5SSDrOjsSWjktxY4CVAcFHXF1OC//nMbEWip52vuABbGxg0xAIl/PBWm2CQkKHSOd |
396
|
|
|
|
|
|
|
QPpWxUyM8tINgM3zLT4CEFJFKwCEIKz1/9+cx0W15YTABzUDN6dbWGxNHMoo2aQaVT18TZpwfg4P |
397
|
|
|
|
|
|
|
HQkRbDwV/9ry76qV4EJBFAYJE84CgIWLe1ebQzpUZ7uhrukMezJIfSqs78tUj6jMSLu4xaeHMHJS |
398
|
|
|
|
|
|
|
t8FH9LTGocf4BKCzCnIABkEYmP3/uR7pNlQozl0MIiYWSvGS3pN3TektHtS81cM57Yj0ixmAhUmL |
399
|
|
|
|
|
|
|
0hKTY6I9qyVjBqXElSk9bMjUrbLiQC8hDLFtcuoPwqP668S3NOC5Hg1hizor1a/8LGCZf3O/1AAU |
400
|
|
|
|
|
|
|
Ldg7HTQhpFSpAONTkAIoIUSKFn0LQLJED51FC9t2eyBhGCMLKrcAbFZbDoAgDGPV+5/WX4fGrdoS |
401
|
|
|
|
|
|
|
E0MQ+Vgfm93HcfwTjqCB5tjKdoPP0//B1yQ+cC5o7GEz15Ew3EMohfnsTWTz/91MMaI48ptndDSm |
402
|
|
|
|
|
|
|
jVBMriIElk9Pc7yQUvTCkhY9k3XRZixH0puUmwRTujTgeznXzg+S+vqpRKjzjb8NODCogD4EEGsk |
403
|
|
|
|
|
|
|
9ow5DYDWakiq9PMfIeW9BCC8DHIABkEgKPj/J2NtaKssBUw4GC66GRwjDtY+ow7TniSt3tLOo+xF |
404
|
|
|
|
|
|
|
gL18nTTHZ6MB531LomZIylrN7A33I1oc68IY7L4RWaRW5rlZUJ0KX0znpCVSS4YUAhkaFIVho0D+ |
405
|
|
|
|
|
|
|
f4t8pIyGYEcKSlMARsxoB0AQhKIx+v+f9TUlpUDi2urFMeccV+9B5r6V8nzjjAVWmPvIljIGLczI |
406
|
|
|
|
|
|
|
1WLQvBcJzfH7FdTb/OSZHlpbf+pwm9LCUn7yiALDiAv8R6ZpPet7eY9NGXI8/BgsY5QUmKdPJsxh |
407
|
|
|
|
|
|
|
U4PSzSBDzFub+Sy7SvwJT0pC3gOLutaTiRm19xSADivaARAEgWL+/xdTtDgOodbGHLkeDjk8EMSy |
408
|
|
|
|
|
|
|
fbcmn551bFtgmG8ubgLyUQdZ6dK3J8HalXfgQtTPquSZEi94dobjqCNEu7akZrc6qW6Amw7EYVnL |
409
|
|
|
|
|
|
|
xdessCqVaUp7CinzAuMRv5CGIzZlWSAYjVADdH7yT2OaoDDCQQY5maz3Vx2sn0TBLvFceeN/vLJB |
410
|
|
|
|
|
|
|
1W9vJ6M2uoU0QSZ1rEQfjpaoGA/P4haADCvagRgEYXLj/v9b93xxvUwo1C0xhrAXa1uG+DhPkRSN |
411
|
|
|
|
|
|
|
kAJi8F0QPWJbhQq3vNJhlrVqsFG8+P/Hc+JwNQuhpLx23Ze8ghSTPfIBugQXIosH44cN66FEEMNB |
412
|
|
|
|
|
|
|
VXmBkYyX4eyOh84X2OwCj+kcXk3VbBhWdBQpv/5UvIy6iLmVrgRgrapQkr8tT+On39FgwLexy+QC |
413
|
|
|
|
|
|
|
KwPbXVLayr5XOdHT7yvzszXHcvEXgFCr3QEQBIGa+v7v6l8jawR4SFsbP6423V0gH66ael9ekLOg |
414
|
|
|
|
|
|
|
fM2GgsarWpKomiGx4pz+140QOAKNmaaoAyJPABYfXy4kS+WVXcsmjAOrQUgVVWWU69fArlUFR0IU |
415
|
|
|
|
|
|
|
Q549g+fj59O9capM0rVS1wGdk7nl8J5B/G5gR6SCBrzQyvAYfmuZoekgT3qomSTDtOm5BWDDWnYY |
416
|
|
|
|
|
|
|
BmEY6cT//y+s9dQ8HCPtUlFBD8ax4yYcq9TxQbpUlpElBdPXE+N2LlIOKK8SYd/1AwNJXS1vo89+ |
417
|
|
|
|
|
|
|
y5l2qvddL9f2bnXYkt04LN+mzqMz1oCAja9lHHjcn5IIlpRDeoqLcc7SOVC8CirLzuxMJnjEgf3y |
418
|
|
|
|
|
|
|
LS58H0/uYreGwtJoXRFXriERqgLIH3JGoppkBt1FIAlFpxI4YjDEq9hU2LYVyfLXAFBrEC094QXz |
419
|
|
|
|
|
|
|
E4Auc8kBEISBKGjw/tel0SqCHfoR08SNJAyFNy0KsXa9//seAqJaHKpia17B9w+uUDSHyyU8HGos |
420
|
|
|
|
|
|
|
dxxIHQoJzH1+5uh1zZ59W/CpJKOn9NHAr+ky9Z8EWXxO8V4O1sHBB0+rhyQp1NcfIsnqVxzObCoq |
421
|
|
|
|
|
|
|
BycnBkYCMavkZDHWLzkZr9hcaQKN6dapB/HqqYZkMuoRgCtryWIQBoGlau5/3FobaZ1hKLjJy9MN |
422
|
|
|
|
|
|
|
BOYTgsZahIsNiBj2P/9Rch6Eg1F4xBGId+IMJn2jwnvqxmE5Ug97KoRnLS5E9KhvX1zsFWsRR6fT |
423
|
|
|
|
|
|
|
LxejKhRbXcW9Q7W4GAvN5EiMp3wI5ETJFBee7d20THtT3T09CeL+9ZBlPtr7O/4S9kHaKSbSxEWO |
424
|
|
|
|
|
|
|
KijX7shYUagPNqxJchWBn887af9Pi9EQi+PWdZCD52ZVOkSYg78AlL3kg3I99ugtZPIVgCoryWEY |
425
|
|
|
|
|
|
|
CGF0mqT9/2uzoFINYPBcIo2UAxbGZnErjImvVDWJ5YHfJt9XywId8PqGODByMbcGhBh/Wu/dsgFX |
426
|
|
|
|
|
|
|
Mr4Qp3tGx+nI50NUU5T6AwPR7nezG6H+afekBJOCWEfgAaU+0neouifGBvUdrIKp23J4tnVp/ltG |
427
|
|
|
|
|
|
|
qKoVcwwTwOm5qMq/Wp+DXtZJ8VEKYHbJ8Wmz9LtCog7m4DUFIQmVUtrIDyjDWC6ENWaxoxQS+MSM |
428
|
|
|
|
|
|
|
/sqvOL3EuVUMa7+ZYP4CsGlFKwCCMNAV6P//bWW5yLbrnIGESA/KbnfzZjdIFx1ItnQpzP2fArEh |
429
|
|
|
|
|
|
|
BUwkfOBrQOoiJ0Kt0aV/pg+8Bs+LF/myWzhsYOUgLp4rYAfWSrUU0rs6/ebRQVKSha8pkoyBT1L3 |
430
|
|
|
|
|
|
|
FN9uyCSFIRyVGHifBrAV5P+0Sy/LOUtexjHkSQ6utHV8diHonniIWjgz9b5poY23wlCPvPve/Hv4 |
431
|
|
|
|
|
|
|
PGCr3gLwZQU5AIIwDIIZ/3+tRAWFMEY3iIkHDh5WWGk7hhSKbhOcQsSS4S1UHkvEz4iqBS3vvwar |
432
|
|
|
|
|
|
|
wN1/zao7CyaCXvu9LR+cVlGGRFqqkjy+7UfyrBUi1U5TxAwjA1wEWU+2Xg7rxpkYSKaxxlk0eOcO |
433
|
|
|
|
|
|
|
FQTG3ljHAoZ0rKSxmeiZ/DIXzrqryj4POoWEUxZ6LEORxF9jfdIsqevnE4BMK8FhEIZhysQY//8s |
434
|
|
|
|
|
|
|
GhrtilO7LvwgIW58BGwsAatVemBXJf31r5qkZufdEXeR/8+bVfTYzU/FXZlY5q6UZ3q3KLwCVSF4 |
435
|
|
|
|
|
|
|
2Q4bjTLo0sZ62yxW6vRPuj96wJQZOmfqSqvs+oIGk71i78J+Wql2cn6gSi11/j6IJIygASvYT2eS |
436
|
|
|
|
|
|
|
LwkHBquNdSEPpkJZQSQ/PJEt7lpXtsLPzy/jkpGRVYqwkAwO0+9lTlAKvaGEoeregSq2NDVzwesv |
437
|
|
|
|
|
|
|
AJtWkMMwCMNCS///2mpi65YKBweL7tYLFUFx7Dipdp49OQ4QyDtQUKhAOL5QWzv9953+yRcRH+u0 |
438
|
|
|
|
|
|
|
64GLmIPnfctPjGjtXFm9nHW2QJ/Y6x+BhErD3zZtxsmAHeR4yauMfHLZ3EpDVeO5IJQdT1Bteirz |
439
|
|
|
|
|
|
|
Y64EukyUxU8f1B4hPaHeBtStET3Uwf0U9MHGRmN38nexDxRv3EytHuNYOvBeAYsadCnJtHK/Lxtu |
440
|
|
|
|
|
|
|
pPZ0bFP6jbqVzSByyNpAvUvp6kd6Kb4FoNMMdwAEQSC8VfP937a2Ugo54cjaWutPy1Q47pO+sVwE |
441
|
|
|
|
|
|
|
K+X+YeiolhKU+UbrAswKcHw6SQ1EYqNvgUpSRAhF+EX+6bUiron9ztYKtXKDHyx9bksm2ZztQ+9G |
442
|
|
|
|
|
|
|
fjrpOcKF2Cmkk/pRM7aeBfGHO7Asat46UAfrFjzAg55XlophmfXTVTWGKAA+MvWjeFViH1z5PE8Q |
443
|
|
|
|
|
|
|
/ht5EKHaPQN47/hpX3/CuIEEUa8dUd9Nyi0Am9aWAzAIwiRbsvvf1iiTJdQimv374UDK+vA8FsiG |
444
|
|
|
|
|
|
|
Orwq2VKho4y8Bahf4zion1QiFkC2EKNxXzuyiiuGgETo4B4EVe9TCLVDKgHC1jQjGBPC23yUY3IQ |
445
|
|
|
|
|
|
|
LT/PXFhSkeTPxngThLFeZiPYwVAijG/LMZypOGwPyOWbr56NkIzDiRtaJX+P/0o/f40llgyv9+O1 |
446
|
|
|
|
|
|
|
fPforuT5sM0Bjf7cxKqSPgaXh59IGd72tMzBspK2K33teGsEKvQn1mL7BODSDHYYhkEYGrTl/383 |
447
|
|
|
|
|
|
|
a5amEmDj9Fz1UFEwPPvbxij4vL3hGRClIzJbyuV0ke96sAMrrnMb03j6EWlPGV9FTtI3pNMcKklY |
448
|
|
|
|
|
|
|
PYv7GsfVD09DQPwVi50ktMJq49Pw3AdgiMNpAmLfO/uyw2fLnUSKUliRUe+K5t6Sylg5+LfAIAMp |
449
|
|
|
|
|
|
|
2XIbJmIZ+EInqPyxoiyd5zg63SQaF1vuHxMum4PMEaYB3UNTx+QthaweTd3T3eVhUpbOle3S0CW+ |
450
|
|
|
|
|
|
|
JD8CEG5GKQCDMAwV3P0PPFcqKOuapEPw04+K0PqSuD5TZFqIwRedr7+c+KAdRuJBkzgritV+ijBZ |
451
|
|
|
|
|
|
|
egEP9NyIx0kA3hv847i2yqUITR4Ul7h0htjqqNq5PBaLPwecF7PKQBQbkWFkNwWDMewSm+liodLl |
452
|
|
|
|
|
|
|
lPmiKPP/OBQNswp3Y6lYElR4TwEot4IcAEAQNPv/n/HSQUVYdWq5AXFj6tkpoC9rUOWB9oIJMXO9 |
453
|
|
|
|
|
|
|
woxSUBVSwpASVq7/Nu8XwSENQmrD/56gzr6wtvG80KKnSGtL3bVACY/e5PuSAvBtBjsAgCAIlf7/ |
454
|
|
|
|
|
|
|
n+nSId2Ta2uQIm21cVoPQydFvCZYJUfgqUPxrvkgFhEKCE2oitIU/B1y5fv26hd2HmxT1ME1cmYD |
455
|
|
|
|
|
|
|
T1EBNKeSSiYv/3kLLcWgFd/KFUBMhN2FP1sxYoz4YsoSVz7gseQ/3kKTAduGRhxF5H9sXEaMbVRo |
456
|
|
|
|
|
|
|
iRm/yTgiiMhy8z/2/Iw2lc+INysyYGS8/3hrg//4ghTTjP9ElzQIABCAcjM3AgCEYRhm/51NRcHh |
457
|
|
|
|
|
|
|
BzbIOUZKwxTR5Y1I5sCog6/oyCMjKnIngQb2UEu29sKeBTgToHpyVXUU0cC3fvzQSxrw+v4Fj4cM |
458
|
|
|
|
|
|
|
AQ3HJQCjZm4EQAzCwNvrv2c59TCSERXw6Av4k395IOBIxOJtdKpHAQErvkyekxlmD0EOVexzKGBI |
459
|
|
|
|
|
|
|
QcK/ZwtFrTlR3QmuB6GxN4W4oZxEGeZ1BKDkjJEAgEEQdvb/f47dBVpHFwfwNCye3UpBqROG+6UO |
460
|
|
|
|
|
|
|
sdNWXL9dpc8VT8CEOsNNNQgIH0/4cNsHNvxJZj2fkh8mYxE91l8HbtkCMG4GRwDAIAjT7r8z/bdE |
461
|
|
|
|
|
|
|
WcFTYh6c6AMqwNyzx9rCj5XHuk873efZrQQU4Eyf0ZUpYyfHkfse2edouZ2xZH7kofXVY4qI40c2 |
462
|
|
|
|
|
|
|
K68AYiLQuiWy2U58OGJrjf4n1IXB35L8T1S+xdM4weoWRmz9o/9EjQoQ3x/C2sYiOm4ZsDQ08RV1 |
463
|
|
|
|
|
|
|
DPjacvhjkZG4thdCDUAASs7ABAAYhGHL/v/ZPWC0O8GCNRX0Nvwa7mDaM4p5/ggBIWxcju1MKlSQ |
464
|
|
|
|
|
|
|
MisL5u6I/FsXHgbZlUf+Lxy3DtJOb+Vn49up1CcApWaQAwAMgrB0//+znhcUti+oKQ3xZBvA7pM8 |
465
|
|
|
|
|
|
|
1rLgNywm5Y9cHpJfRkhjtpX8pExB9WiC3rEmUGJr5K2XHXnCQi8+uotKVngNuQVgxA6OAABhEAiK |
466
|
|
|
|
|
|
|
/feMfydcaAFjJuyNm4EpM4Hd9EyppKkYuOZiKEzh6zVCphempmWTKAszhIbVx/iL3ZnK2ag56EQB |
467
|
|
|
|
|
|
|
LkMQfgJQYgY3AAAhCAu3/851AUDPtz40TWx4sVPuIlQQQh5TJJUKaqFNHnsdkqqvLJj4InWYWP8q |
468
|
|
|
|
|
|
|
iwri5Im8oQ6kbDmigtyQ4TA1AoiJcDASP+z9n0CpgndiAXsOx5PhSGyNMGK0xxlwN3kIlj+ECkci |
469
|
|
|
|
|
|
|
21skNtT+EyhpCNQ9DDiLXFxWEdOsxR6HAAHEhKVyJjJ7MxKX/4nujTPiGM3A395lQDuEC2c3iNQe |
470
|
|
|
|
|
|
|
LKEZQ0YiBtH+k9W0/4+vo8mIo7/EiHf6i5EBZyMU7ywqMWOV/zHqNRAJEEBMOCtzRuJCjQF3i5GI |
471
|
|
|
|
|
|
|
pi3BZQv/iR79JNQxJqldTXSPCrO4YMR97AD+1gBqyP/Hl3/wxQwjofBkxN6C+U9EtPzH29FB6dkC |
472
|
|
|
|
|
|
|
BKDEDG4AAGEQCO6/Mz61DxA3aNrQHLceBZMFB6LArxoq8XPeOTg9ReR2xZqJrgw5xGxck8yfiZ4t |
473
|
|
|
|
|
|
|
S2tEHlGSMfJVSiYQDsLO8rcAYiKQ/gmuayG+liS6qUb84Dbq6M9/AnFFoIH1nwFfcOPuE/3H2ykm |
474
|
|
|
|
|
|
|
6HMcs2T/sbUKGAl1ZRmJa9FhaMczHPMf93jifxyZEyQFEEBMhP3JSNzY2H9iSyas8YY/iTKSYOd/ |
475
|
|
|
|
|
|
|
vCOY/4luY+HpXTPiLEsZSVlxRERTneBiqP9EzT0RHLvCn2LwV4WYDXOQIEAAMeHMXv8J1UD/ScmX |
476
|
|
|
|
|
|
|
eOsNgoOveIZEGFGi+j/u6p/ISv0/gRoQuUj5j3eImOCSWVzuYiRcZjPiGKBjIHoGGnWM5j+2updI |
477
|
|
|
|
|
|
|
I7HXNAABKDUTGgBgEAau8++5CBh95gBICOSuN5wLpBAG0pdUrC6/SnYTh+7EJwOMcNvI8huAYOfc |
478
|
|
|
|
|
|
|
IlA5C5RrckQoQIfwidzkEDoKKKsfARg1gxsAYBAElu6/M/5bEDYgxqgc3rf4TVzIQniC4vQXf4kY |
479
|
|
|
|
|
|
|
zTPWSUG9271MtAB6xpVdtcCSTynUgmWC+T1QMTaDKymFcqhwd8AIICZ8RT4D3klzIksbRgLKca2p |
480
|
|
|
|
|
|
|
JWZ1OGrawr8eDX+fjRFbEU1oEeN/vH2A/4RmqXCPH2G9YIERW4ORuC4Tfo2MOKICT0OH8A4IgABi |
481
|
|
|
|
|
|
|
ItwZJ347ChETfozYdDMS0VYkuhD+j3eUlhHv4Ceu4XBG7MMNjNiSPK7hfaxDbIzYho3+YzHpP47R |
482
|
|
|
|
|
|
|
Y1InCv8TVQEROSiGK2BBXIAAYsJShTESkdWwrgAgboj5P44YJr5xQEghroEZRhIXWmKOKeNdNoW/ |
483
|
|
|
|
|
|
|
QiZyUTpqicVA9GIokprtJCohuOILS1oECMC5GdwAAIMgULr/zvRfL2i6gTEEEfEAS3qyftSyzqPR |
484
|
|
|
|
|
|
|
OakexScYTZaUXgY0ZUS9K6qIUhtYtNv+cmdM1GTWlziwVZ8wKcgaBWsup4/gYnQFEBNpQYB/SBDH |
485
|
|
|
|
|
|
|
2Pl/4vqDRA404u4b4ikzGUnZxYqnEP6Pz7kEV7TgH4ZEDTGsdR+e1v9/ojvXjNg7oAS7SaSNYQIE |
486
|
|
|
|
|
|
|
EBOBfPafuN1YeDvPZI+n4lm4i6MpRnBOluAuNqJXHOIpbIlsYzFgzrDh3J5M2mIo4hbsoI44EJyV |
487
|
|
|
|
|
|
|
ZSSiEEAAgACUm4ERACAIArH9d6YBkjdX4FQU5JAuruW+VWuBlFlFIWmW7xPTNd1D1noXCQ6ca6zz |
488
|
|
|
|
|
|
|
e3ISi2hjXE9+evwtfhPwJfrRHDJmVwAxEehREdwcx0jmUhmsAzD/8Y5y/scdiRgjPoyESlf8aQ6/ |
489
|
|
|
|
|
|
|
dmyp+z/uuVqCJmEbrMU6Xkl8952BhNIGfynOgGMgiBF/6xcggJiISgK4enH4t19ia2Ph2olL5NkA |
490
|
|
|
|
|
|
|
uCoiRgJdTJJaurivpsRf9+CaKybY48Sr+D/eley4Np4Q2YVgxNk8ZCBcPWBJHIhSHyAAJWdgAwAM |
491
|
|
|
|
|
|
|
grDx/9HsgYr4g0HAxgH0a7KpLifdjWXxTe/QOinq6ounWPzd0HHhCNHlZWYqI7X0yY45QZ2uk5fU |
492
|
|
|
|
|
|
|
PI2l0YEG9wvA2BXsAABFIL3//2eub1PpbuOU1PBIyVS+Nk3eLP5+v8CM8wBNvA2RZkymL3GhQ+FY |
493
|
|
|
|
|
|
|
A0uRSxEIoAjZVLCOBWAZ1sbvVKmUM3r1g4oW01jACMDYGdgAAIMgbO7/n9kDtuwEo1FAjPeXDNZc |
494
|
|
|
|
|
|
|
xFAA2VFpbsmgiL06HoDWVY8R+MPMIavmDK0ooJ3Cwe5aUi7sjZrRTmGoddMtSGsJ+AlAyRXbAACD |
495
|
|
|
|
|
|
|
IOn/P+PaJiJ0d9OoIHjmkkameUeAUhANTAtw4OEkBec+KuQQ9LA7s5Tnz9IqTzq6oaRbl8G2sACg |
496
|
|
|
|
|
|
|
+lARMPasYn2X9MS3AGLC3sf8T8SZFv9xl1tEFAU4T+wirsmNw1pGovbpEeiVMBDq/vwnKgL/457V |
497
|
|
|
|
|
|
|
IXE3FsHmLvHhxoBzdPQ/EUeLESwiECkSIICYcA4A/cfbsPuPo3PEwECgf4Yto/4noRuOJ9QYcddM |
498
|
|
|
|
|
|
|
DNi6VsRvvSY0asaA82w+Aq4gopL7T8qoOpFb2BiJGpkn8kwszFFAEBsggJjwVdq4R2oJjAQRUXv/ |
499
|
|
|
|
|
|
|
xzvKi6smwduvInjEI0l9UCJGKAm2dxkJDaIyYFtsQ6gu/497PJFgIcCAcRwWA86UzEhU8xlHagMI |
500
|
|
|
|
|
|
|
ICbSAhzPCiTcSRPvqV/YG8aMuCdlGHEWEwQ3DBOz2hX/fAmOQpgRb+ce/3gZcXPY/3FP+hNTSfwn |
501
|
|
|
|
|
|
|
eSkEI6FKlcDYBEAAMRHoM+DfPMiId2/yf3yN9/94lyTiGj/Be+LBf0LrBYmpTxjxtpKIarMQFfi4 |
502
|
|
|
|
|
|
|
Jif/Iy54xTNLgX+/ASPunIGjDP2PN06IXPyOEoEAAcREYPARV44gxu1EnL9EzJZwolffMuLoRDLg |
503
|
|
|
|
|
|
|
mLdjICI74q5eiTzHlgF3dYV3XRUjjqE5RrzzzYxE7HzAtvmH4IlnRA5aIyITIICY8JQA2B3OgHun |
504
|
|
|
|
|
|
|
NQ4n/ScxxWAd+mAkMKBIUkAw4q3pGHAXkf+JLbfwHNdE3ElCxCziZCTuvBAGAgPx+Jd4kTcnwgAQ |
505
|
|
|
|
|
|
|
QEw4KxhG3IPsRLZ3ifMwwfkHgqcv/Mc/pEygb4LZJsaaTHDv7fhP9PAFA+6jSYircomZMSBymSoD |
506
|
|
|
|
|
|
|
yp0hDLhPFCJmBhJLZQcQQIS22BM8TZqIqPyP40AD4ke+GQl12BlxVvYEO9JEtvdxJ2xGQgPIxLfJ |
507
|
|
|
|
|
|
|
GAgfhUZk34CBiAqekShVxO/gRvEwQADKzuAIABgEYdL9h3YAyUFn8MFJEB9KFFOyyjOo/wY0DH2g |
508
|
|
|
|
|
|
|
mPhoiz2quR6dmOpQuq44Z1PCgjRYffQhThGGiqTNucoEZ5TWTW81rQBc3cEOwyAMA1C8dv//v2tp |
509
|
|
|
|
|
|
|
OpLYTXpDIEUYOHAAvf0YFPjq6jjkE6KV5CI5UMG1C6QfVJ0T79oGHERaPpTXnaBK5HZYuJlyz85i |
510
|
|
|
|
|
|
|
G0/KbqKzrfhVYqYfdtf6pR0SzqtwPB47VFiiUT1P14ox8M2JGN2/sOEAfhwvkVIoQrGeLIdE01VR |
511
|
|
|
|
|
|
|
e3oR0dqC094KXzsJoJGm2VvraRqypaMW8PnKsDcE3Rx4WtDYx/OPfCQwHUH9cU8OMIklI3rhTT8J |
512
|
|
|
|
|
|
|
qDOmuuTT/Ru3AGzdSw6EMAwD0IkE978vf8axExfYRSCVtnG2PATrpOeXnFiBabXlvPwSoMK1tE3K |
513
|
|
|
|
|
|
|
YDailMm6pQMZGs2oTNUOpm574VWtIOItcbGHufv5z4IQlzYgaQ6CS38jbeUoqj6eZGJMCNyKfstZ |
514
|
|
|
|
|
|
|
/q+PRDI9wnSXEfRiIfywQfDojuxJBhrm3CcJMxa56TIrLZNx2MhXkmbVINtYZJ4wlXfNYuoFF0GV |
515
|
|
|
|
|
|
|
a2XLxO3GKXM+xpP8jO8jHn4/ugQg60xyGIRhKOq09P73TYJTPHwPrYTYIEUOfwis3jVBQvQ/uNPw |
516
|
|
|
|
|
|
|
aC4K6HsOqF3JJJfBp+T8qCLPsCLKS7l46FEDhD7TLZSWe0tf+wogu953Z5kF6TwQtPRnL4Minlpi |
517
|
|
|
|
|
|
|
/uwU6B5Bi+jYDxKznZo3UFTiqtlSMuIzVyfikejUrfmYMFNk5dYN3xBiU4piazk+kDzw1LcENUrw |
518
|
|
|
|
|
|
|
6QdWyRlIC7ufGQrOG1daSq6pS701HKOsz8a4bRzYBZ9tFDIXniNT81Yl8sWJeL4CsHUGSwzCIBAd |
519
|
|
|
|
|
|
|
rP3/7zWtoQPskm2bixM9aAgLm4mHF8La/tFdgGBl8L0BC27jA9Bw5GQT8bmAyakpPyULHtMseQ0O |
520
|
|
|
|
|
|
|
IDiOb/rJ7aj5FvbmeNAl406S65ZKDSMvm+PYpeUWlzEsorJw5NXAL47X1vIlSHAeK6QrF38ISPi1 |
521
|
|
|
|
|
|
|
a8IN+570/qqSem4C3Pw6X8Lnf3YiBG5it0K0Noi1T+FVPjI2Q+M1MRJU2Bl3KxhWyWUSj0Nq0/5w |
522
|
|
|
|
|
|
|
iN2lmjJfEXwE4OoMkhiEYRhYmA7/f26b4qoklizTOzARtqUEDvt8pZDtNiCebVkH+bhhenPGRSJY |
523
|
|
|
|
|
|
|
kUHRPorR6pYRxM6sNvBxNda7QxShcigla/khamih24t2Cu1PWAUTs/9k4EZ3Rjg6qOqz+unkhKPE |
524
|
|
|
|
|
|
|
qLIUc911zGLNdVwCQOMdmpXRJsatVpuwLgyemJp2+AgAIbQfRlfypYKo4nQsetVXmRHMjPTb2Vi7 |
525
|
|
|
|
|
|
|
jmlV5HzCsS4IhYrKMsCdY/VTyei74m4CgDHH/NXyE4CsM8oBEIRhKIt6/+sKBFE32m36wx8Coetq |
526
|
|
|
|
|
|
|
NHl7DZ8RhH/yB7cVQo4ZAjsQ8Qb2JfSzwQdtliFw93dG05VNQ1X3e+pYS6qL1UnEaZ5XSqbwKvZE |
527
|
|
|
|
|
|
|
pN7EG+K9OJQ2oLMTglZbnmxBT+KuO+GH73MOL7WnjB7HGmzt0FPFkfrnSOEwIxSK7fOCb9mliFuW |
528
|
|
|
|
|
|
|
/N58kQ0nQvrS07ZyuqHKl56YeEt2qRj2FV08VShWEKSIc2zlG7kGyMBDEpw3spLLLQBZZ7ADMQgC |
529
|
|
|
|
|
|
|
Ucd2//97t6G6ERgB99JTD6LIm0mazppYh8DCTjieKbHZ8Gez9Xadvsaorh29MnT7MFkvD935V58C |
530
|
|
|
|
|
|
|
B6JXMAtGnpmUvl1pnJN3oLTX39cNrATJfWx1u8dV05VNEhAXS3oIvp6UgW7cZC+uduyeK3+k7n7z |
531
|
|
|
|
|
|
|
tWf8vEcRU1QOFHe1w7Nj8WghRkIq8lgarRSEp2EIERW3F+GB8pOJuG2DJv7jPtF8thgHSRRnIgIw |
532
|
|
|
|
|
|
|
knrLig8hnyy799ZPAMLOYAlAEASimjb9/9eWhdk4Ci5S08Vbw2woLhx8cXdm6GMpzegVWuUXYrof |
533
|
|
|
|
|
|
|
RVZ9TpyF0D0WaXSwygX0VQQXIjaMReON7x8S3WTJsuvE6KzFBLC2dhYroWhsqVoX1tG7iqQEqk6w |
534
|
|
|
|
|
|
|
wmQaRgttLu+20E7YEVud4U8HJncvvPqPF0Jb8I074dgP0MUXXHL9WBwgSUjcksNpc0wyarRHALrO |
535
|
|
|
|
|
|
|
BQdAEIahGLn/fSGIJmzo28cTsNKODkLSJSzHhZtJHBG7yVcmfPjdcGNRKywxhI4bSCSC0dWvjAmC |
536
|
|
|
|
|
|
|
+/ujJ4Zqu4NaSt94OIp8/XGEDrvgG1XByxQ7QtJ2s3R0eMiwXZpwkespZqCzJnJyAkzJaJn6rKXX |
537
|
|
|
|
|
|
|
4LongOLBOCtswDNszPkM+eSK5xGAbHPBARAGYaj4uf95lzExDkqHHsBkDlhf65yN9bt0RjM4mBfK |
538
|
|
|
|
|
|
|
Ohf7IhdC5TEYr/eRfZ62aKyR1m8LLOlCKWwGOJHQQZUyEaNmc8WHfK/p3KR4ovoBW+s+yd9B6ZYy |
539
|
|
|
|
|
|
|
LMzsNE2YVyRk5wwa04Wikncb1KNBUrqU3tLKJ2x+F72SX1v5jl/c1DEJBYGnw8i735+/LJHp5WDZ |
540
|
|
|
|
|
|
|
FXsR9TyDtXmuQg37LEh6w9XTqzEsGsjrshqx5EcAvsxoB2AIhqJ02///7V5QS1BuW5Z4lVS056je |
541
|
|
|
|
|
|
|
73b2zofSwJQiN0mbbEtSEW0XA34ygDU5VhloWXXE0UstmW+mGtw+a2ZjyDo4Wq3foG48FDmCt5/n |
542
|
|
|
|
|
|
|
EmJJYhX9rjUQNibJ2sO8s2GwVVKdBAtQlyQE0j/T0TGvH+YBkQDkKlzbVB7iqi9zLf9SD58AbFvR |
543
|
|
|
|
|
|
|
DoAgCERW//+9pUYzhANz69Ut4o6DwwawpvtGubDFD8u5VjEGwCULI6Hxxb9q6w14xNaiIXUHqZZd |
544
|
|
|
|
|
|
|
+Fl5Q69IBrLgS5dMDgHJU1R1OoWbe79+9oRuaKPsPZkUcKUHlbjNMr0EC5+WDRX16KDuti1I2CqE |
545
|
|
|
|
|
|
|
+ZZsmSMKJgujsG1pePf717LtiXw/kBxVHadI/7XBC9kxHloYz0+ux/MKQNgZoAAUgjCU3/f+F440 |
546
|
|
|
|
|
|
|
CMPZjE5Qq7TnhFoZyy4xckyKOQRhBuNCEhkz/XcoAzDaGUvK6LiQbvkzKs7sS1vg1x++EmUE+L97 |
547
|
|
|
|
|
|
|
cS5GwpjA9tNBtyU5Mpzom7R0jbedJ2tbCbNhLiy9k6h52QVqkBYHy6JbV2AjZuAOFvColISAKQCd |
548
|
|
|
|
|
|
|
ZoADMAjCwLns/w+eOpalAwroB4wE5WqrolD2KAQ9Wpy2iYBCmnA4MTBq8b6etPfl6BrlatTztDhV |
549
|
|
|
|
|
|
|
+RuVFXBSfj5Vp1slnRJeKcR4IjS4HtCj/YYnVPyt1kNOGEhp1Ux0z8EjxlLRO7FbAtvtU0umq8S1 |
550
|
|
|
|
|
|
|
sZnyDsFrUQnW4f503S53w53fhHZx/5f7c7wCkG0GSQCDIAysVf//XwdLpwIh2nsPOEYJG+vC4szT |
551
|
|
|
|
|
|
|
1T6JUZkzlIQ7zIncEHayYn1931arqQ7gnuOQR0VgV4PofIovYLXA72o2EIXf5bvqgFimMJ1xS8Vd |
552
|
|
|
|
|
|
|
VfY/0NyzAwS3vWnUSHtIWEZ/JGjbILLlja/8DkqsBxmi0pL2xze6DUXXncOIYVzIK7k8hYxFSVLz |
553
|
|
|
|
|
|
|
lJS/QVnCsiJYIkKByCCRYUjhzQFbRJb7lfAKwNa17DAMgzDo4/+/dpdmKd1qTNxl50pVUCAG21G2 |
554
|
|
|
|
|
|
|
1zynI9UXys916fvnhVGuvdh5jFxfoqdlYiGr4A3pzIzaizddAmWnaZQM5p7kfGrSMd+1KFpxhFEE |
555
|
|
|
|
|
|
|
KcLogoNSTEMTjZy3AIJ+1wd2xFdaTnAI34vAiVVybRcRulGEPkKwn18HrcixdgxVYSLmWI6ptgic |
556
|
|
|
|
|
|
|
E0gyBpd8spTcXUAwqj52MqhrQqHT53nSiQE2C7aZQ9qWZuRIK7ciu98/BPbnj5cAhJpLDsAgCEQx |
557
|
|
|
|
|
|
|
8f4HLgEb5TfaNl22OzLK4PBieLciNLiK1KJ5jjv/8zm9lHArxx381mrj1aGPqFWSzSIAAuJs1XN2 |
558
|
|
|
|
|
|
|
dw/5zxTR0RvI0WKYoI84uO9zSKbzsbSan+QdS6kMEQcZq0F2UdL4FTZsOk6EA0o54FwNC8/jJQmh |
559
|
|
|
|
|
|
|
VaawFK3GS8lj2ZXnUsYl7cXfJaYkcZcZMgjrTxfBrpAKpFEAgNxIbgHoNoMkgEEQBgr9/49F24NI |
560
|
|
|
|
|
|
|
UuDi0RkEnLBRxg0D0qGseju1DllAdRtsQgm1IiCcXGSzEmF5Qt/Np4SKLApMhdJ/bNgHUkR5GUNH |
561
|
|
|
|
|
|
|
XEHvruRMlELyPms0+XcJOWwRkqT5VvwAxXtlJLsE7ufj8zzJYVCOxFnkSmEYJ4H6A+xcSs61or8d |
562
|
|
|
|
|
|
|
XwHYNpckAEEYhlrh/ifm44yQ9Ltx4U4aaBqemAp3tdT8AnH4iXSt101Bh/Y+mhBpeP5bdItDFWxA |
563
|
|
|
|
|
|
|
Fo+x6uWq5lptehJ+qdhVUZ5kQiiQBmG9JgtOemI5TtuaabsEbU1erD2qquEP8FUxPrhYB6pxuzUL |
564
|
|
|
|
|
|
|
EjDikMs3qOqQQB1AE31VmihdBEDPYhVmwDkis8UMQpv1CcCnleQAEMKgcfz/j3E5qdCKiUcvpAUj |
565
|
|
|
|
|
|
|
QIoV3hCXV1VlOINAGkQ59M62a+ZI1x4A9I6L19RWLIYcTq7aUtrtL/yvleLF6tzs+c73xB3cALNo |
566
|
|
|
|
|
|
|
mep+GEu2QKuCCbSAIuGAlxZrhJhj1eHgGfNwgcYUgK0zygEQBmGosPsf2WHm2lHI/N3PmoiD9qnI |
567
|
|
|
|
|
|
|
CpNfYmnEvGxfob847u+OOpxWHWdJtGsOPzNZ0JA5Me5HyrTC9JZUR/j3y2sPVn90tsQ4CNIklYfw |
568
|
|
|
|
|
|
|
yoPEQD0ljA/e3ZDs+oCwJ5vuvNMtB73G8PfSiaJkSv+OVCf0q3VGR+poFY9kLbkAvy5Ao3dJwEf/ |
569
|
|
|
|
|
|
|
5CcGEUnOxrqnQh8Q128Y/yurGovg+gQg3Ax2AAZBGJrU///kgachpXU7mnjwRSmm1eZjjVIH65Za |
570
|
|
|
|
|
|
|
uescLIoVJNVNF6OmCzZCukS4oW3dcsGC096ajjYBnyQjouYiT8egGLVr9AT+xx3tX1vAotXB18sz |
571
|
|
|
|
|
|
|
SCwDpk1cwWJcYB4p/BGkd+E9S9sCMHbuOACAIAwV7n9lwVE+Lbob4ktpOtjE3G6QVw52go+7O2qr |
572
|
|
|
|
|
|
|
GUe5pVfBT2pGhShJUvzhyDoRYDeGsk9ICyYKs46hk2v6pUByDvbSmYauiQZxuiARQ+/AguGjV4yA |
573
|
|
|
|
|
|
|
JZsfAdg6gySAQRAGIv3/k4WOUiCx9uapoihjzI4rsQgKQTqkFBXPfbb0UujpwGY43+tBGJgI2/9A |
574
|
|
|
|
|
|
|
7WaCvXh6XwKaQEoxXtSmZDyen0wbPuTrHRXZMEZWfU0jsqbTQZvMCcNcgV8ulFjlUp9+WzR8Ejfg |
575
|
|
|
|
|
|
|
vTBOP0xyF3DQSdAKOOfjt+L2JjpqWblj+P9r4mH7g+bAjUY7ZFc9Kd0QqjWpIxBbp2PaHNb3CkDY |
576
|
|
|
|
|
|
|
GaUAEIJAVLv/lddZCK1R2xb68FOxQvRNOUGqhRSwaCKW1xIt8MRIBxceMvJgV+uJEGYNhXSCOIBs |
577
|
|
|
|
|
|
|
aDOcwjXg9+EGz4USFzhyQ6V06nIiPCoyhLr2PAm3HOFSq3F1eYst0e53pbSFH3NvyQLyg5nBk65Z |
578
|
|
|
|
|
|
|
/55Z25S6GSBZxNHXLYPEZ0h7vQKwdW4rAIMwDNX//2c7Bm16UvVBhCFUTOOljUsxRazHMxG5iy9C |
579
|
|
|
|
|
|
|
k5BkzIg8udsr52I7XfWmm/wbjjneRXvoJhyUi/pIC0ttJGzwCFIuEpKrOLWm0TB9sO7/Cc8ZcDy3 |
580
|
|
|
|
|
|
|
uaeEBfOGnXjy5LKXqjquse2K5ARCVMegIwefWkL/s6WEf8pVP6yxMIhdmaLfKESvLJ8AdJ1JEsAg |
581
|
|
|
|
|
|
|
CAQl/3+zJFaAGVku3qwCHXcaD0whicIlJ2BjvEWJzbnc8sEJg5d5qBkCmws9lR5ZtMz9IlvzZ9oN |
582
|
|
|
|
|
|
|
1XJRxAoaAtdcdaBudBOyeKXYB3LGSmlynFWz6slCZyFeH8npBO6nEUT+mE2uHmgoycjTdQQwvpyH |
583
|
|
|
|
|
|
|
xv6OggQ3Q5ydVyl2CdE/X8VXALauIAmAEATp//8cO7OTAtq1S5bQlIb+wBqBuVXq/rrpEEzpViuV |
584
|
|
|
|
|
|
|
TA63dQ6QbXIwhTy6tQPWGKQ4p1U5uc2VjCaf7eELkFlzUKQP3lrezaoJVwCB9gZ+WXww+WQlXkBK |
585
|
|
|
|
|
|
|
UWLUUROTSsqthPohsfvWRSgMvXsiDJ1v0ucnhZ0FpgiL7UA+uSJfrGpyfALQce44AIMwDI2l3v/C |
586
|
|
|
|
|
|
|
HehQhO3gLPwmAg+IAvh5L/U2c4LdQY4zckgqFctdLJeMNhDKjTljKP/CMYquKDSyUBWBS8aQsNZ1 |
587
|
|
|
|
|
|
|
mEk8YTGYUbaxGUPyg76f5UHgevV7/7aN7RxMSUzNWklLqJIo/4FpUtfXJdyr+rD6b/kEGAA++H2l |
588
|
|
|
|
|
|
|
aiCrcAAAAABJRU5ErkJggg== |
589
|
|
|
|
|
|
|
~; |
590
|
|
|
|
|
|
|
} |
591
|
|
|
|
|
|
|
|
592
|
|
|
|
|
|
|
1; |
593
|
|
|
|
|
|
|
__END__ |