-
Notifications
You must be signed in to change notification settings - Fork 0
/
malscanner.php
425 lines (405 loc) · 48.7 KB
/
malscanner.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
<?php
$scripthome=$_SERVER['PHP_SELF'];
$scriptpath=$_SERVER["SCRIPT_FILENAME"];
define('FILES_TO_MATCH','#\.(php|php4|php5|phtml|html|css|js|htaccess)#');
define('FILES_TO_NOTMATCH','#\.(php.infected|js.infected|infected)#');
class phpMalCodeScan {
public $infected_files = array();
public $scanned_files = array();
function __construct(){
$this->scan(dirname(__FILE__));
$this->sendalert();
}
function scan($dir){
$this->scanned_files[] = $dir;
$files = scandir($dir);
if (!is_array($files)){
throw new Exception('Unable to scan directory ' . $dir . '. Please make sure proper permissions have been set.');
}
foreach($files as $file){
$scriptpath=$_SERVER["SCRIPT_FILENAME"];
if ($scriptpath!=''.$dir.'/'.$file.''){
if (is_file($dir.'/'.$file) && !in_array($dir.'/'.$file,$this->scanned_files) && preg_match(FILES_TO_MATCH,$file) && !preg_match(FILES_TO_NOTMATCH,$file)){
$this->check(file_get_contents($dir.'/'.$file),$dir.'/'.$file);
}elseif(is_dir($dir.'/'.$file) && substr($file,0,1) != '.'){
$this->scan($dir.'/'.$file);
}
}
}
}
function check($contents,$file){
$this->scanned_files[] = $file;
$matched=0;
if(preg_match('/(?<![a-z0-9_])eval\((base64|eval|\$_|\$\$|\$[A-Za-z_0-9\{]*(\(|\{|\[))/i',$contents)){
$matched=$matched+5;
}
//JS file hack
if (preg_match("/eval\(String\.fromCharCode\((.*)\)\)/i", $contents, $matches)){
if ($matches[1]!=""){
$matched=$matched+5;
}
}
if(preg_match('/\$(.*) = create_function \((.*),(.*) \(base64_decode \((.*)/i',$contents)){
$matched=$matched+2;
}
if(preg_match('/\$_COOKIE \[str_replace\(\'.\', \'_\', \$_SERVER\[\'HTTP_HOST\'\]\)\]\) . \';\'\); \$(.*)\(\$(.*)\);/i',$contents)) {
$matched=$matched+1;
}
//score or 3 or more
if ($matched>=3){
$this->infected_files[] = $file;
}
}
function sendalert(){
if(count($this->infected_files) != 0) {
foreach($this->infected_files as $inf) {
if ($_GET['replace']=="yes"){
rename($inf, $inf.".infected");
$this->placefakefile($inf);
echo "<div>The Following file apears to be infected and has been quarientiended. ".$inf."</div>";
}else{
if ($_GET['repair']=="yes"){
$this->repairfile($inf);
copy($inf, $inf.".original");
echo "<div>The Following file apears to be infected we started a repair on the file. ".$inf."</div>";
}else{
echo "<div>The Following file apears to be infected. ".$inf."</div>";
}
}
}
}else{
$files=count($this->scanned_files);
echo "<div>We found no infected files in this pass. We scanned $files files.</div>";
}
}
function repairfile($filelocation){
$data = file_get_contents($filelocation);
//Javascript attack used to do redirects and more
if (preg_match("/eval\(String\.fromCharCode\((.*)\)\)/i", $title, $matches)){
if ($matches[1]!=""){
$data = str_replace("eval(String.fromCharCode(".$matches[1]."));", "", $data);
}
}
file_put_contents($filelocation, $data);
}
function placefakefile($filelocation){
$file = fopen($filelocation,"w");
$content = "PD9waHANCi8vTm9kZWhvc3QgTWFsd2FyZSBEdW1teSBGaWxlIHNvIE1hbHdhcmUgdGhpbmtzIGl0IGlzIHN0aWxsIHJ1bm5pbmcNCg0KLy9kdW1teSBkYXRhDQovL0xvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0ZXR1ZXIgYWRpcGlzY2luZyBlbGl0LiBBZW5lYW4gY29tbW9kbyBsaWd1bGEgZWdldCBkb2xvci4gQWVuZWFuIG1hc3NhLiBDdW0gc29jaWlzIG5hdG9xdWUgcGVuYXRpYnVzIGV0IG1hZ25pcyBkaXMgcGFydHVyaWVudCBtb250ZXMsIG5hc2NldHVyIHJpZGljdWx1cyBtdXMuIERvbmVjIHF1YW0gZmVsaXMsIHVsdHJpY2llcyBuZWMsIHBlbGxlbnRlc3F1ZSBldSwgcHJldGl1bSBxdWlzLCBzZW0uIE51bGxhIGNvbnNlcXVhdCBtYXNzYSBxdWlzIGVuaW0uIERvbmVjIHBlZGUganVzdG8sIGZyaW5naWxsYSB2ZWwsIGFsaXF1ZXQgbmVjLCB2dWxwdXRhdGUgZWdldCwgYXJjdS4gSW4gZW5pbSBqdXN0bywgcmhvbmN1cyB1dCwgaW1wZXJkaWV0IGEsIHZlbmVuYXRpcyB2aXRhZSwganVzdG8uIE51bGxhbSBkaWN0dW0gZmVsaXMgZXUgcGVkZSBtb2xsaXMgcHJldGl1bS4gSW50ZWdlciB0aW5jaWR1bnQuIENyYXMgZGFwaWJ1cy4gVml2YW11cyBlbGVtZW50dW0gc2VtcGVyIG5pc2kuIEFlbmVhbiB2dWxwdXRhdGUgZWxlaWZlbmQgdGVsbHVzLiBBZW5lYW4gbGVvIGxpZ3VsYSwgcG9ydHRpdG9yIGV1LCBjb25zZXF1YXQgdml0YWUsIGVsZWlmZW5kIGFjLCBlbmltLiBBbGlxdWFtIGxvcmVtIGFudGUsIGRhcGlidXMgaW4sIHZpdmVycmEgcXVpcywgZmV1Z2lhdCBhLCB0ZWxsdXMuIFBoYXNlbGx1cyB2aXZlcnJhIG51bGxhIHV0IG1ldHVzIHZhcml1cyBsYW9yZWV0LiBRdWlzcXVlIHJ1dHJ1bS4gQWVuZWFuIGltcGVyZGlldC4gRXRpYW0gdWx0cmljaWVzIG5pc2kgdmVsIGF1Z3VlLiBDdXJhYml0dXIgdWxsYW1jb3JwZXIgdWx0cmljaWVzIG5pc2kuIE5hbSBlZ2V0IGR1aS4gRXRpYW0gcmhvbmN1cy4gTWFlY2VuYXMgdGVtcHVzLCB0ZWxsdXMgZWdldCBjb25kaW1lbnR1bSByaG9uY3VzLCBzZW0gcXVhbSBzZW1wZXIgbGliZXJvLCBzaXQgYW1ldCBhZGlwaXNjaW5nIHNlbSBuZXF1ZSBzZWQgaXBzdW0uIE5hbSBxdWFtIG51bmMsIGJsYW5kaXQgdmVsLCBsdWN0dXMgcHVsdmluYXIsIGhlbmRyZXJpdCBpZCwgbG9yZW0uIE1hZWNlbmFzIG5lYyBvZGlvIGV0IGFudGUgdGluY2lkdW50IHRlbXB1cy4gRG9uZWMgdml0YWUgc2FwaWVuIHV0IGxpYmVybyB2ZW5lbmF0aXMgZmF1Y2lidXMuIE51bGxhbSBxdWlzIGFudGUuIEV0aWFtIHNpdCBhbWV0IG9yY2kgZWdldCBlcm9zIGZhdWNpYnVzIHRpbmNpZHVudC4gRHVpcyBsZW8uIFNlZCBmcmluZ2lsbGEgbWF1cmlzIHNpdCBhbWV0IG5pYmguIERvbmVjIHNvZGFsZXMgc2FnaXR0aXMgbWFnbmEuIFNlZCBjb25zZXF1YXQsIGxlbyBlZ2V0IGJpYmVuZHVtIHNvZGFsZXMsIGF1Z3VlIHZlbGl0IGN1cnN1cyBudW5jLCBxdWlzIGdyYXZpZGEgbWFnbmEgbWkgYSBsaWJlcm8uIEZ1c2NlIHZ1bHB1dGF0ZSBlbGVpZmVuZCBzYXBpZW4uIFZlc3RpYnVsdW0gcHVydXMgcXVhbSwgc2NlbGVyaXNxdWUgdXQsIG1vbGxpcyBzZWQsIG5vbnVtbXkgaWQsIG1ldHVzLiBOdWxsYW0gYWNjdW1zYW4gbG9yZW0gaW4gZHVpLiBDcmFzIHVsdHJpY2llcyBtaSBldSB0dXJwaXMgaGVuZHJlcml0IGZyaW5naWxsYS4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IEluIGFjIGR1aSBxdWlzIG1pIGNvbnNlY3RldHVlciBsYWNpbmlhLiBOYW0gcHJldGl1bSB0dXJwaXMgZXQgYXJjdS4gRHVpcyBhcmN1IHRvcnRvciwgc3VzY2lwaXQgZWdldCwgaW1wZXJkaWV0IG5lYywgaW1wZXJkaWV0IGlhY3VsaXMsIGlwc3VtLiBTZWQgYWxpcXVhbSB1bHRyaWNlcyBtYXVyaXMuIEludGVnZXIgYW50ZSBhcmN1LCBhY2N1bXNhbiBhLCBjb25zZWN0ZXR1ZXIgZWdldCwgcG9zdWVyZSB1dCwgbWF1cmlzLiBQcmFlc2VudCBhZGlwaXNjaW5nLiBQaGFzZWxsdXMgdWxsYW1jb3JwZXIgaXBzdW0gcnV0cnVtIG51bmMuIE51bmMgbm9udW1teSBtZXR1cy4gVmVzdGlidWx1bSB2b2x1dHBhdCBwcmV0aXVtIGxpYmVyby4gQ3JhcyBpZCBkdWkuIEFlbmVhbiB1dCBlcm9zIGV0IG5pc2wgc2FnaXR0aXMgdmVzdGlidWx1bS4gTnVsbGFtIG51bGxhIGVyb3MsIHVsdHJpY2llcyBzaXQgYW1ldCwgbm9udW1teSBpZCwgaW1wZXJkaWV0IGZldWdpYXQsIHBlZGUuIFNlZCBsZWN0dXMuIERvbmVjIG1vbGxpcyBoZW5kcmVyaXQgcmlzdXMuIFBoYXNlbGx1cyBuZWMgc2VtIGluIGp1c3RvIHBlbGxlbnRlc3F1ZSBmYWNpbGlzaXMuIEV0aWFtIGltcGVyZGlldCBpbXBlcmRpZXQgb3JjaS4gTnVuYyBuZWMgbmVxdWUuIFBoYXNlbGx1cyBsZW8gZG9sb3IsIHRlbXB1cyBub24sIGF1Y3RvciBldCwgaGVuZHJlcml0IHF1aXMsIG5pc2kuIEN1cmFiaXR1ciBsaWd1bGEgc2FwaWVuLCB0aW5jaWR1bnQgbm9uLCBldWlzbW9kIHZpdGFlLCBwb3N1ZXJlIGltcGVyZGlldCwgbGVvLiBNYWVjZW5hcyBtYWxlc3VhZGEuIFByYWVzZW50IGNvbmd1ZSBlcmF0IGF0IG1hc3NhLiBTZWQgY3Vyc3VzIHR1cnBpcyB2aXRhZSB0b3J0b3IuDQovL0RvbmVjIHBvc3VlcmUgdnVscHV0YXRlIGFyY3UuIFBoYXNlbGx1cyBhY2N1bXNhbiBjdXJzdXMgdmVsaXQuIFZlc3RpYnVsdW0gYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMgb3JjaSBsdWN0dXMgZXQgdWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBTZWQgYWxpcXVhbSwgbmlzaSBxdWlzIHBvcnR0aXRvciBjb25ndWUsIGVsaXQgZXJhdCBldWlzbW9kIG9yY2ksIGFjIHBsYWNlcmF0IGRvbG9yIGxlY3R1cyBxdWlzIG9yY2kuIFBoYXNlbGx1cyBjb25zZWN0ZXR1ZXIgdmVzdGlidWx1bSBlbGl0LiBBZW5lYW4gdGVsbHVzIG1ldHVzLCBiaWJlbmR1bSBzZWQsIHBvc3VlcmUgYWMsIG1hdHRpcyBub24sIG51bmMuIFZlc3RpYnVsdW0gZnJpbmdpbGxhIHBlZGUgc2l0IGFtZXQgYXVndWUuIEluIHR1cnBpcy4gUGVsbGVudGVzcXVlIHBvc3VlcmUuIFByYWVzZW50IHR1cnBpcy4gQWVuZWFuIHBvc3VlcmUsIHRvcnRvciBzZWQgY3Vyc3VzIGZldWdpYXQsIG51bmMgYXVndWUgYmxhbmRpdCBudW5jLCBldSBzb2xsaWNpdHVkaW4gdXJuYSBkb2xvciBzYWdpdHRpcyBsYWN1cy4gRG9uZWMgZWxpdCBsaWJlcm8sIHNvZGFsZXMgbmVjLCB2b2x1dHBhdCBhLCBzdXNjaXBpdCBub24sIHR1cnBpcy4gTnVsbGFtIHNhZ2l0dGlzLiBTdXNwZW5kaXNzZSBwdWx2aW5hciwgYXVndWUgYWMgdmVuZW5hdGlzIGNvbmRpbWVudHVtLCBzZW0gbGliZXJvIHZvbHV0cGF0IG5pYmgsIG5lYyBwZWxsZW50ZXNxdWUgdmVsaXQgcGVkZSBxdWlzIG51bmMuIFZlc3RpYnVsdW0gYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMgb3JjaSBsdWN0dXMgZXQgdWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBGdXNjZSBpZCBwdXJ1cy4gVXQgdmFyaXVzIHRpbmNpZHVudCBsaWJlcm8uIFBoYXNlbGx1cyBkb2xvci4gTWFlY2VuYXMgdmVzdGlidWx1bSBtb2xsaXMgZGlhbS4gUGVsbGVudGVzcXVlIHV0IG5lcXVlLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gSW4gZHVpIG1hZ25hLCBwb3N1ZXJlIGVnZXQsIHZlc3RpYnVsdW0gZXQsIHRlbXBvciBhdWN0b3IsIGp1c3RvLiBJbiBhYyBmZWxpcyBxdWlzIHRvcnRvciBtYWxlc3VhZGEgcHJldGl1bS4gUGVsbGVudGVzcXVlIGF1Y3RvciBuZXF1ZSBuZWMgdXJuYS4gUHJvaW4gc2FwaWVuIGlwc3VtLCBwb3J0YSBhLCBhdWN0b3IgcXVpcywgZXVpc21vZCB1dCwgbWkuIEFlbmVhbiB2aXZlcnJhIHJob25jdXMgcGVkZS4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIFV0IG5vbiBlbmltIGVsZWlmZW5kIGZlbGlzIHByZXRpdW0gZmV1Z2lhdC4gVml2YW11cyBxdWlzIG1pLiBQaGFzZWxsdXMgYSBlc3QuIFBoYXNlbGx1cyBtYWduYS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIEN1cmFiaXR1ciBhdCBsYWN1cyBhYyB2ZWxpdCBvcm5hcmUgbG9ib3J0aXMuIEN1cmFiaXR1ciBhIGZlbGlzIGluIG51bmMgZnJpbmdpbGxhIHRyaXN0aXF1ZS4gTW9yYmkgbWF0dGlzIHVsbGFtY29ycGVyIHZlbGl0LiBQaGFzZWxsdXMgZ3JhdmlkYSBzZW1wZXIgbmlzaS4gTnVsbGFtIHZlbCBzZW0uIFBlbGxlbnRlc3F1ZSBsaWJlcm8gdG9ydG9yLCB0aW5jaWR1bnQgZXQsIHRpbmNpZHVudCBlZ2V0LCBzZW1wZXIgbmVjLCBxdWFtLiBTZWQgaGVuZHJlcml0LiBNb3JiaSBhYyBmZWxpcy4gTnVuYyBlZ2VzdGFzLCBhdWd1ZSBhdCBwZWxsZW50ZXNxdWUgbGFvcmVldCwgZmVsaXMgZXJvcyB2ZWhpY3VsYSBsZW8sIGF0IG1hbGVzdWFkYSB2ZWxpdCBsZW8gcXVpcyBwZWRlLiBEb25lYyBpbnRlcmR1bSwgbWV0dXMgZXQgaGVuZHJlcml0IGFsaXF1ZXQsIGRvbG9yIGRpYW0gc2FnaXR0aXMgbGlndWxhLCBlZ2V0IGVnZXN0YXMgbGliZXJvIHR1cnBpcyB2ZWwgbWkuIE51bmMgbnVsbGEuIEZ1c2NlIHJpc3VzIG5pc2wsIHZpdmVycmEgZXQsIHRlbXBvciBldCwgcHJldGl1bSBpbiwgc2FwaWVuLiBEb25lYyB2ZW5lbmF0aXMgdnVscHV0YXRlIGxvcmVtLiBNb3JiaSBuZWMgbWV0dXMuIFBoYXNlbGx1cyBibGFuZGl0IGxlbyB1dCBvZGlvLiBNYWVjZW5hcyB1bGxhbWNvcnBlciwgZHVpIGV0IHBsYWNlcmF0IGZldWdpYXQsIGVyb3MgcGVkZSB2YXJpdXMgbmlzaSwgY29uZGltZW50dW0gdml2ZXJyYSBmZWxpcyBudW5jIGV0IGxvcmVtLiBTZWQgbWFnbmEgcHVydXMsIGZlcm1lbnR1bSBldSwgdGluY2lkdW50IGV1LCB2YXJpdXMgdXQsIGZlbGlzLiBJbiBhdWN0b3IgbG9ib3J0aXMgbGFjdXMuIFF1aXNxdWUgbGliZXJvIG1ldHVzLCBjb25kaW1lbnR1bSBuZWMsIHRlbXBvciBhLCBjb21tb2RvIG1vbGxpcywgbWFnbmEuIFZlc3RpYnVsdW0gdWxsYW1jb3JwZXIgbWF1cmlzIGF0IGxpZ3VsYS4gRnVzY2UgZmVybWVudHVtLiBOdWxsYW0gY3Vyc3VzIGxhY2luaWEgZXJhdC4NCi8vUHJhZXNlbnQgYmxhbmRpdCBsYW9yZWV0IG5pYmguIEZ1c2NlIGNvbnZhbGxpcyBtZXR1cyBpZCBmZWxpcyBsdWN0dXMgYWRpcGlzY2luZy4gUGVsbGVudGVzcXVlIGVnZXN0YXMsIG5lcXVlIHNpdCBhbWV0IGNvbnZhbGxpcyBwdWx2aW5hciwganVzdG8gbnVsbGEgZWxlaWZlbmQgYXVndWUsIGFjIGF1Y3RvciBvcmNpIGxlbyBub24gZXN0LiBRdWlzcXVlIGlkIG1pLiBVdCB0aW5jaWR1bnQgdGluY2lkdW50IGVyYXQuIEV0aWFtIGZldWdpYXQgbG9yZW0gbm9uIG1ldHVzLiBWZXN0aWJ1bHVtIGRhcGlidXMgbnVuYyBhYyBhdWd1ZS4gQ3VyYWJpdHVyIHZlc3RpYnVsdW0gYWxpcXVhbSBsZW8uIFByYWVzZW50IGVnZXN0YXMgbmVxdWUgZXUgZW5pbS4gSW4gaGFjIGhhYml0YXNzZSBwbGF0ZWEgZGljdHVtc3QuIEZ1c2NlIGEgcXVhbS4gRXRpYW0gdXQgcHVydXMgbWF0dGlzIG1hdXJpcyBzb2RhbGVzIGFsaXF1YW0uIEN1cmFiaXR1ciBuaXNpLiBRdWlzcXVlIG1hbGVzdWFkYSBwbGFjZXJhdCBuaXNsLiBOYW0gaXBzdW0gcmlzdXMsIHJ1dHJ1bSB2aXRhZSwgdmVzdGlidWx1bSBldSwgbW9sZXN0aWUgdmVsLCBsYWN1cy4gU2VkIGF1Z3VlIGlwc3VtLCBlZ2VzdGFzIG5lYywgdmVzdGlidWx1bSBldCwgbWFsZXN1YWRhIGFkaXBpc2NpbmcsIGR1aS4gVmVzdGlidWx1bSBmYWNpbGlzaXMsIHB1cnVzIG5lYyBwdWx2aW5hciBpYWN1bGlzLCBsaWd1bGEgbWkgY29uZ3VlIG51bmMsIHZpdGFlIGV1aXNtb2QgbGlndWxhIHVybmEgaW4gZG9sb3IuIE1hdXJpcyBzb2xsaWNpdHVkaW4gZmVybWVudHVtIGxpYmVyby4gUHJhZXNlbnQgbm9udW1teSBtaSBpbiBvZGlvLiBOdW5jIGludGVyZHVtIGxhY3VzIHNpdCBhbWV0IG9yY2kuIFZlc3RpYnVsdW0gcnV0cnVtLCBtaSBuZWMgZWxlbWVudHVtIHZlaGljdWxhLCBlcm9zIHF1YW0gZ3JhdmlkYSBuaXNsLCBpZCBmcmluZ2lsbGEgbmVxdWUgYW50ZSB2ZWwgbWkuIE1vcmJpIG1vbGxpcyB0ZWxsdXMgYWMgc2FwaWVuLiBQaGFzZWxsdXMgdm9sdXRwYXQsIG1ldHVzIGVnZXQgZWdlc3RhcyBtb2xsaXMsIGxhY3VzIGxhY3VzIGJsYW5kaXQgZHVpLCBpZCBlZ2VzdGFzIHF1YW0gbWF1cmlzIHV0IGxhY3VzLiBGdXNjZSB2ZWwgZHVpLiBTZWQgaW4gbGliZXJvIHV0IG5pYmggcGxhY2VyYXQgYWNjdW1zYW4uIFByb2luIGZhdWNpYnVzIGFyY3UgcXVpcyBhbnRlLiBJbiBjb25zZWN0ZXR1ZXIgdHVycGlzIHV0IHZlbGl0LiBOdWxsYSBzaXQgYW1ldCBlc3QuIFByYWVzZW50IG1ldHVzIHRlbGx1cywgZWxlbWVudHVtIGV1LCBzZW1wZXIgYSwgYWRpcGlzY2luZyBuZWMsIHB1cnVzLiBDcmFzIHJpc3VzIGlwc3VtLCBmYXVjaWJ1cyB1dCwgdWxsYW1jb3JwZXIgaWQsIHZhcml1cyBhYywgbGVvLiBTdXNwZW5kaXNzZSBmZXVnaWF0LiBTdXNwZW5kaXNzZSBlbmltIHR1cnBpcywgZGljdHVtIHNlZCwgaWFjdWxpcyBhLCBjb25kaW1lbnR1bSBuZWMsIG5pc2kuIFByYWVzZW50IG5lYyBuaXNsIGEgcHVydXMgYmxhbmRpdCB2aXZlcnJhLiBQcmFlc2VudCBhYyBtYXNzYSBhdCBsaWd1bGEgbGFvcmVldCBpYWN1bGlzLiBOdWxsYSBuZXF1ZSBkb2xvciwgc2FnaXR0aXMgZWdldCwgaWFjdWxpcyBxdWlzLCBtb2xlc3RpZSBub24sIHZlbGl0LiBNYXVyaXMgdHVycGlzIG51bmMsIGJsYW5kaXQgZXQsIHZvbHV0cGF0IG1vbGVzdGllLCBwb3J0YSB1dCwgbGlndWxhLiBGdXNjZSBwaGFyZXRyYSBjb252YWxsaXMgdXJuYS4gUXVpc3F1ZSB1dCBuaXNpLiBEb25lYyBtaSBvZGlvLCBmYXVjaWJ1cyBhdCwgc2NlbGVyaXNxdWUgcXVpcywgY29udmFsbGlzIGluLCBuaXNpLiBTdXNwZW5kaXNzZSBub24gbmlzbCBzaXQgYW1ldCB2ZWxpdCBoZW5kcmVyaXQgcnV0cnVtLiBVdCBsZW8uIFV0IGEgbmlzbCBpZCBhbnRlIHRlbXB1cyBoZW5kcmVyaXQuIFByb2luIHByZXRpdW0sIGxlbyBhYyBwZWxsZW50ZXNxdWUgbW9sbGlzLCBmZWxpcyBudW5jIHVsdHJpY2VzIGVyb3MsIHNlZCBncmF2aWRhIGF1Z3VlIGF1Z3VlIG1vbGxpcyBqdXN0by4gU3VzcGVuZGlzc2UgZXUgbGlndWxhLiBOdWxsYSBmYWNpbGlzaS4gRG9uZWMgaWQganVzdG8uIFByYWVzZW50IHBvcnR0aXRvciwgbnVsbGEgdml0YWUgcG9zdWVyZSBpYWN1bGlzLCBhcmN1IG5pc2wgZGlnbmlzc2ltIGRvbG9yLCBhIHByZXRpdW0gbWkgc2VtIHV0IGlwc3VtLiBDdXJhYml0dXIgc3VzY2lwaXQgc3VzY2lwaXQgdGVsbHVzLiBQcmFlc2VudCB2ZXN0aWJ1bHVtIGRhcGlidXMgbmliaC4gRXRpYW0gaWFjdWxpcyBudW5jIGFjIG1ldHVzLiBVdCBpZCBuaXNsIHF1aXMgZW5pbSBkaWduaXNzaW0gc2FnaXR0aXMuIEV0aWFtIHNvbGxpY2l0dWRpbiwgaXBzdW0gZXUgcHVsdmluYXIgcnV0cnVtLCB0ZWxsdXMgaXBzdW0gbGFvcmVldCBzYXBpZW4sIHF1aXMgdmVuZW5hdGlzIGFudGUgb2RpbyBzaXQgYW1ldCBlcm9zLiBQcm9pbiBtYWduYS4gRHVpcyB2ZWwgbmliaCBhdCB2ZWxpdCBzY2VsZXJpc3F1ZSBzdXNjaXBpdC4gQ3VyYWJpdHVyIHR1cnBpcy4gVmVzdGlidWx1bSBzdXNjaXBpdCBudWxsYSBxdWlzIG9yY2kuDQovL0Z1c2NlIGFjIGZlbGlzIHNpdCBhbWV0IGxpZ3VsYSBwaGFyZXRyYSBjb25kaW1lbnR1bS4gTWFlY2VuYXMgZWdlc3RhcyBhcmN1IHF1aXMgbGlndWxhIG1hdHRpcyBwbGFjZXJhdC4gRHVpcyBsb2JvcnRpcyBtYXNzYSBpbXBlcmRpZXQgcXVhbS4gU3VzcGVuZGlzc2UgcG90ZW50aS4gUGVsbGVudGVzcXVlIGNvbW1vZG8gZXJvcyBhIGVuaW0uIFZlc3RpYnVsdW0gdHVycGlzIHNlbSwgYWxpcXVldCBlZ2V0LCBsb2JvcnRpcyBwZWxsZW50ZXNxdWUsIHJ1dHJ1bSBldSwgbmlzbC4gU2VkIGxpYmVyby4gQWxpcXVhbSBlcmF0IHZvbHV0cGF0LiBFdGlhbSB2aXRhZSB0b3J0b3IuIE1vcmJpIHZlc3RpYnVsdW0gdm9sdXRwYXQgZW5pbS4gQWxpcXVhbSBldSBudW5jLiBOdW5jIHNlZCB0dXJwaXMuIFNlZCBtb2xsaXMsIGVyb3MgZXQgdWx0cmljZXMgdGVtcHVzLCBtYXVyaXMgaXBzdW0gYWxpcXVhbSBsaWJlcm8sIG5vbiBhZGlwaXNjaW5nIGRvbG9yIHVybmEgYSBvcmNpLiBOdWxsYSBwb3J0YSBkb2xvci4gQ2xhc3MgYXB0ZW50IHRhY2l0aSBzb2Npb3NxdSBhZCBsaXRvcmEgdG9ycXVlbnQgcGVyIGNvbnViaWEgbm9zdHJhLCBwZXIgaW5jZXB0b3MgaHltZW5hZW9zLiBQZWxsZW50ZXNxdWUgZGFwaWJ1cyBoZW5kcmVyaXQgdG9ydG9yLiBQcmFlc2VudCBlZ2VzdGFzIHRyaXN0aXF1ZSBuaWJoLiBTZWQgYSBsaWJlcm8uIENyYXMgdmFyaXVzLiBEb25lYyB2aXRhZSBvcmNpIHNlZCBkb2xvciBydXRydW0gYXVjdG9yLiBGdXNjZSBlZ2VzdGFzIGVsaXQgZWdldCBsb3JlbS4gU3VzcGVuZGlzc2UgbmlzbCBlbGl0LCByaG9uY3VzIGVnZXQsIGVsZW1lbnR1bSBhYywgY29uZGltZW50dW0gZWdldCwgZGlhbS4gTmFtIGF0IHRvcnRvciBpbiB0ZWxsdXMgaW50ZXJkdW0gc2FnaXR0aXMuIEFsaXF1YW0gbG9ib3J0aXMuIERvbmVjIG9yY2kgbGVjdHVzLCBhbGlxdWFtIHV0LCBmYXVjaWJ1cyBub24sIGV1aXNtb2QgaWQsIG51bGxhLiBDdXJhYml0dXIgYmxhbmRpdCBtb2xsaXMgbGFjdXMuIE5hbSBhZGlwaXNjaW5nLiBWZXN0aWJ1bHVtIGV1IG9kaW8uIFZpdmFtdXMgbGFvcmVldC4gTnVsbGFtIHRpbmNpZHVudCBhZGlwaXNjaW5nIGVuaW0uIFBoYXNlbGx1cyB0ZW1wdXMuIFByb2luIHZpdmVycmEsIGxpZ3VsYSBzaXQgYW1ldCB1bHRyaWNlcyBzZW1wZXIsIGxpZ3VsYSBhcmN1IHRyaXN0aXF1ZSBzYXBpZW4sIGEgYWNjdW1zYW4gbmlzaSBtYXVyaXMgYWMgZXJvcy4gRnVzY2UgbmVxdWUuIFN1c3BlbmRpc3NlIGZhdWNpYnVzLCBudW5jIGV0IHBlbGxlbnRlc3F1ZSBlZ2VzdGFzLCBsYWN1cyBhbnRlIGNvbnZhbGxpcyB0ZWxsdXMsIHZpdGFlIGlhY3VsaXMgbGFjdXMgZWxpdCBpZCB0b3J0b3IuIFZpdmFtdXMgYWxpcXVldCBlbGl0IGFjIG5pc2wuIEZ1c2NlIGZlcm1lbnR1bSBvZGlvIG5lYyBhcmN1LiBWaXZhbXVzIGV1aXNtb2QgbWF1cmlzLiBJbiB1dCBxdWFtIHZpdGFlIG9kaW8gbGFjaW5pYSB0aW5jaWR1bnQuIFByYWVzZW50IHV0IGxpZ3VsYSBub24gbWkgdmFyaXVzIHNhZ2l0dGlzLiBDcmFzIHNhZ2l0dGlzLiBQcmFlc2VudCBhYyBzZW0gZWdldCBlc3QgZWdlc3RhcyB2b2x1dHBhdC4gVml2YW11cyBjb25zZWN0ZXR1ZXIgaGVuZHJlcml0IGxhY3VzLiBDcmFzIG5vbiBkb2xvci4gVml2YW11cyBpbiBlcmF0IHV0IHVybmEgY3Vyc3VzIHZlc3RpYnVsdW0uIEZ1c2NlIGNvbW1vZG8gYWxpcXVhbSBhcmN1LiBOYW0gY29tbW9kbyBzdXNjaXBpdCBxdWFtLiBRdWlzcXVlIGlkIG9kaW8uIFByYWVzZW50IHZlbmVuYXRpcyBtZXR1cyBhdCB0b3J0b3IgcHVsdmluYXIgdmFyaXVzLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0dWVyIGFkaXBpc2NpbmcgZWxpdC4gQWVuZWFuIGNvbW1vZG8gbGlndWxhIGVnZXQgZG9sb3IuIEFlbmVhbiBtYXNzYS4gQ3VtIHNvY2lpcyBuYXRvcXVlIHBlbmF0aWJ1cyBldCBtYWduaXMgZGlzIHBhcnR1cmllbnQgbW9udGVzLCBuYXNjZXR1ciByaWRpY3VsdXMgbXVzLiBEb25lYyBxdWFtIGZlbGlzLCB1bHRyaWNpZXMgbmVjLCBwZWxsZW50ZXNxdWUgZXUsIHByZXRpdW0gcXVpcywgc2VtLiBOdWxsYSBjb25zZXF1YXQgbWFzc2EgcXVpcyBlbmltLiBEb25lYyBwZWRlIGp1c3RvLCBmcmluZ2lsbGEgdmVsLCBhbGlxdWV0IG5lYywgdnVscHV0YXRlIGVnZXQsIGFyY3UuIEluIGVuaW0ganVzdG8sIHJob25jdXMgdXQsIGltcGVyZGlldCBhLCB2ZW5lbmF0aXMgdml0YWUsIGp1c3RvLiBOdWxsYW0gZGljdHVtIGZlbGlzIGV1IHBlZGUgbW9sbGlzIHByZXRpdW0uIEludGVnZXIgdGluY2lkdW50LiBDcmFzIGRhcGlidXMuIFZpdmFtdXMgZWxlbWVudHVtIHNlbXBlciBuaXNpLiBBZW5lYW4gdnVscHV0YXRlIGVsZWlmZW5kIHRlbGx1cy4gQWVuZWFuIGxlbyBsaWd1bGEsIHBvcnR0aXRvciBldSwgY29uc2VxdWF0IHZpdGFlLCBlbGVpZmVuZCBhYywgZW5pbS4gQWxpcXVhbSBsb3JlbSBhbnRlLCBkYXBpYnVzIGluLCB2aXZlcnJhIHF1aXMsIGZldWdpYXQgYSwgdGVsbHVzLiBQaGFzZWxsdXMgdml2ZXJyYSBudWxsYSB1dCBtZXR1cyB2YXJpdXMgbGFvcmVldC4NCi8vUXVpc3F1ZSBydXRydW0uIEFlbmVhbiBpbXBlcmRpZXQuIEV0aWFtIHVsdHJpY2llcyBuaXNpIHZlbCBhdWd1ZS4gQ3VyYWJpdHVyIHVsbGFtY29ycGVyIHVsdHJpY2llcyBuaXNpLiBOYW0gZWdldCBkdWkuIEV0aWFtIHJob25jdXMuIE1hZWNlbmFzIHRlbXB1cywgdGVsbHVzIGVnZXQgY29uZGltZW50dW0gcmhvbmN1cywgc2VtIHF1YW0gc2VtcGVyIGxpYmVybywgc2l0IGFtZXQgYWRpcGlzY2luZyBzZW0gbmVxdWUgc2VkIGlwc3VtLiBOYW0gcXVhbSBudW5jLCBibGFuZGl0IHZlbCwgbHVjdHVzIHB1bHZpbmFyLCBoZW5kcmVyaXQgaWQsIGxvcmVtLiBNYWVjZW5hcyBuZWMgb2RpbyBldCBhbnRlIHRpbmNpZHVudCB0ZW1wdXMuIERvbmVjIHZpdGFlIHNhcGllbiB1dCBsaWJlcm8gdmVuZW5hdGlzIGZhdWNpYnVzLiBOdWxsYW0gcXVpcyBhbnRlLiBFdGlhbSBzaXQgYW1ldCBvcmNpIGVnZXQgZXJvcyBmYXVjaWJ1cyB0aW5jaWR1bnQuIER1aXMgbGVvLiBTZWQgZnJpbmdpbGxhIG1hdXJpcyBzaXQgYW1ldCBuaWJoLiBEb25lYyBzb2RhbGVzIHNhZ2l0dGlzIG1hZ25hLiBTZWQgY29uc2VxdWF0LCBsZW8gZWdldCBiaWJlbmR1bSBzb2RhbGVzLCBhdWd1ZSB2ZWxpdCBjdXJzdXMgbnVuYywgcXVpcyBncmF2aWRhIG1hZ25hIG1pIGEgbGliZXJvLiBGdXNjZSB2dWxwdXRhdGUgZWxlaWZlbmQgc2FwaWVuLiBWZXN0aWJ1bHVtIHB1cnVzIHF1YW0sIHNjZWxlcmlzcXVlIHV0LCBtb2xsaXMgc2VkLCBub251bW15IGlkLCBtZXR1cy4gTnVsbGFtIGFjY3Vtc2FuIGxvcmVtIGluIGR1aS4gQ3JhcyB1bHRyaWNpZXMgbWkgZXUgdHVycGlzIGhlbmRyZXJpdCBmcmluZ2lsbGEuIFZlc3RpYnVsdW0gYW50ZSBpcHN1bSBwcmltaXMgaW4gZmF1Y2lidXMgb3JjaSBsdWN0dXMgZXQgdWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBJbiBhYyBkdWkgcXVpcyBtaSBjb25zZWN0ZXR1ZXIgbGFjaW5pYS4gTmFtIHByZXRpdW0gdHVycGlzIGV0IGFyY3UuIER1aXMgYXJjdSB0b3J0b3IsIHN1c2NpcGl0IGVnZXQsIGltcGVyZGlldCBuZWMsIGltcGVyZGlldCBpYWN1bGlzLCBpcHN1bS4gU2VkIGFsaXF1YW0gdWx0cmljZXMgbWF1cmlzLiBJbnRlZ2VyIGFudGUgYXJjdSwgYWNjdW1zYW4gYSwgY29uc2VjdGV0dWVyIGVnZXQsIHBvc3VlcmUgdXQsIG1hdXJpcy4gUHJhZXNlbnQgYWRpcGlzY2luZy4gUGhhc2VsbHVzIHVsbGFtY29ycGVyIGlwc3VtIHJ1dHJ1bSBudW5jLiBOdW5jIG5vbnVtbXkgbWV0dXMuIFZlc3RpYnVsdW0gdm9sdXRwYXQgcHJldGl1bSBsaWJlcm8uIENyYXMgaWQgZHVpLiBBZW5lYW4gdXQgZXJvcyBldCBuaXNsIHNhZ2l0dGlzIHZlc3RpYnVsdW0uIE51bGxhbSBudWxsYSBlcm9zLCB1bHRyaWNpZXMgc2l0IGFtZXQsIG5vbnVtbXkgaWQsIGltcGVyZGlldCBmZXVnaWF0LCBwZWRlLiBTZWQgbGVjdHVzLiBEb25lYyBtb2xsaXMgaGVuZHJlcml0IHJpc3VzLiBQaGFzZWxsdXMgbmVjIHNlbSBpbiBqdXN0byBwZWxsZW50ZXNxdWUgZmFjaWxpc2lzLiBFdGlhbSBpbXBlcmRpZXQgaW1wZXJkaWV0IG9yY2kuIE51bmMgbmVjIG5lcXVlLiBQaGFzZWxsdXMgbGVvIGRvbG9yLCB0ZW1wdXMgbm9uLCBhdWN0b3IgZXQsIGhlbmRyZXJpdCBxdWlzLCBuaXNpLiBDdXJhYml0dXIgbGlndWxhIHNhcGllbiwgdGluY2lkdW50IG5vbiwgZXVpc21vZCB2aXRhZSwgcG9zdWVyZSBpbXBlcmRpZXQsIGxlby4gTWFlY2VuYXMgbWFsZXN1YWRhLiBQcmFlc2VudCBjb25ndWUgZXJhdCBhdCBtYXNzYS4gU2VkIGN1cnN1cyB0dXJwaXMgdml0YWUgdG9ydG9yLiBEb25lYyBwb3N1ZXJlIHZ1bHB1dGF0ZSBhcmN1LiBQaGFzZWxsdXMgYWNjdW1zYW4gY3Vyc3VzIHZlbGl0LiBWZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgU2VkIGFsaXF1YW0sIG5pc2kgcXVpcyBwb3J0dGl0b3IgY29uZ3VlLCBlbGl0IGVyYXQgZXVpc21vZCBvcmNpLCBhYyBwbGFjZXJhdCBkb2xvciBsZWN0dXMgcXVpcyBvcmNpLiBQaGFzZWxsdXMgY29uc2VjdGV0dWVyIHZlc3RpYnVsdW0gZWxpdC4gQWVuZWFuIHRlbGx1cyBtZXR1cywgYmliZW5kdW0gc2VkLCBwb3N1ZXJlIGFjLCBtYXR0aXMgbm9uLCBudW5jLiBWZXN0aWJ1bHVtIGZyaW5naWxsYSBwZWRlIHNpdCBhbWV0IGF1Z3VlLiBJbiB0dXJwaXMuIFBlbGxlbnRlc3F1ZSBwb3N1ZXJlLiBQcmFlc2VudCB0dXJwaXMuIEFlbmVhbiBwb3N1ZXJlLCB0b3J0b3Igc2VkIGN1cnN1cyBmZXVnaWF0LCBudW5jIGF1Z3VlIGJsYW5kaXQgbnVuYywgZXUgc29sbGljaXR1ZGluIHVybmEgZG9sb3Igc2FnaXR0aXMgbGFjdXMuIERvbmVjIGVsaXQgbGliZXJvLCBzb2RhbGVzIG5lYywgdm9sdXRwYXQgYSwgc3VzY2lwaXQgbm9uLCB0dXJwaXMuIE51bGxhbSBzYWdpdHRpcy4gU3VzcGVuZGlzc2UgcHVsdmluYXIsIGF1Z3VlIGFjIHZlbmVuYXRpcyBjb25kaW1lbnR1bSwgc2VtIGxpYmVybyB2b2x1dHBhdCBuaWJoLCBuZWMgcGVsbGVudGVzcXVlIHZlbGl0IHBlZGUgcXVpcyBudW5jLg0KLy9WZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgRnVzY2UgaWQgcHVydXMuIFV0IHZhcml1cyB0aW5jaWR1bnQgbGliZXJvLiBQaGFzZWxsdXMgZG9sb3IuIE1hZWNlbmFzIHZlc3RpYnVsdW0gbW9sbGlzIGRpYW0uIFBlbGxlbnRlc3F1ZSB1dCBuZXF1ZS4gUGVsbGVudGVzcXVlIGhhYml0YW50IG1vcmJpIHRyaXN0aXF1ZSBzZW5lY3R1cyBldCBuZXR1cyBldCBtYWxlc3VhZGEgZmFtZXMgYWMgdHVycGlzIGVnZXN0YXMuIEluIGR1aSBtYWduYSwgcG9zdWVyZSBlZ2V0LCB2ZXN0aWJ1bHVtIGV0LCB0ZW1wb3IgYXVjdG9yLCBqdXN0by4gSW4gYWMgZmVsaXMgcXVpcyB0b3J0b3IgbWFsZXN1YWRhIHByZXRpdW0uIFBlbGxlbnRlc3F1ZSBhdWN0b3IgbmVxdWUgbmVjIHVybmEuIFByb2luIHNhcGllbiBpcHN1bSwgcG9ydGEgYSwgYXVjdG9yIHF1aXMsIGV1aXNtb2QgdXQsIG1pLiBBZW5lYW4gdml2ZXJyYSByaG9uY3VzIHBlZGUuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBVdCBub24gZW5pbSBlbGVpZmVuZCBmZWxpcyBwcmV0aXVtIGZldWdpYXQuIFZpdmFtdXMgcXVpcyBtaS4gUGhhc2VsbHVzIGEgZXN0LiBQaGFzZWxsdXMgbWFnbmEuIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBDdXJhYml0dXIgYXQgbGFjdXMgYWMgdmVsaXQgb3JuYXJlIGxvYm9ydGlzLiBDdXJhYml0dXIgYSBmZWxpcyBpbiBudW5jIGZyaW5naWxsYSB0cmlzdGlxdWUuIE1vcmJpIG1hdHRpcyB1bGxhbWNvcnBlciB2ZWxpdC4gUGhhc2VsbHVzIGdyYXZpZGEgc2VtcGVyIG5pc2kuIE51bGxhbSB2ZWwgc2VtLiBQZWxsZW50ZXNxdWUgbGliZXJvIHRvcnRvciwgdGluY2lkdW50IGV0LCB0aW5jaWR1bnQgZWdldCwgc2VtcGVyIG5lYywgcXVhbS4gU2VkIGhlbmRyZXJpdC4gTW9yYmkgYWMgZmVsaXMuIE51bmMgZWdlc3RhcywgYXVndWUgYXQgcGVsbGVudGVzcXVlIGxhb3JlZXQsIGZlbGlzIGVyb3MgdmVoaWN1bGEgbGVvLCBhdCBtYWxlc3VhZGEgdmVsaXQgbGVvIHF1aXMgcGVkZS4gRG9uZWMgaW50ZXJkdW0sIG1ldHVzIGV0IGhlbmRyZXJpdCBhbGlxdWV0LCBkb2xvciBkaWFtIHNhZ2l0dGlzIGxpZ3VsYSwgZWdldCBlZ2VzdGFzIGxpYmVybyB0dXJwaXMgdmVsIG1pLiBOdW5jIG51bGxhLiBGdXNjZSByaXN1cyBuaXNsLCB2aXZlcnJhIGV0LCB0ZW1wb3IgZXQsIHByZXRpdW0gaW4sIHNhcGllbi4gRG9uZWMgdmVuZW5hdGlzIHZ1bHB1dGF0ZSBsb3JlbS4gTW9yYmkgbmVjIG1ldHVzLiBQaGFzZWxsdXMgYmxhbmRpdCBsZW8gdXQgb2Rpby4gTWFlY2VuYXMgdWxsYW1jb3JwZXIsIGR1aSBldCBwbGFjZXJhdCBmZXVnaWF0LCBlcm9zIHBlZGUgdmFyaXVzIG5pc2ksIGNvbmRpbWVudHVtIHZpdmVycmEgZmVsaXMgbnVuYyBldCBsb3JlbS4gU2VkIG1hZ25hIHB1cnVzLCBmZXJtZW50dW0gZXUsIHRpbmNpZHVudCBldSwgdmFyaXVzIHV0LCBmZWxpcy4gSW4gYXVjdG9yIGxvYm9ydGlzIGxhY3VzLiBRdWlzcXVlIGxpYmVybyBtZXR1cywgY29uZGltZW50dW0gbmVjLCB0ZW1wb3IgYSwgY29tbW9kbyBtb2xsaXMsIG1hZ25hLiBWZXN0aWJ1bHVtIHVsbGFtY29ycGVyIG1hdXJpcyBhdCBsaWd1bGEuIEZ1c2NlIGZlcm1lbnR1bS4gTnVsbGFtIGN1cnN1cyBsYWNpbmlhIGVyYXQuIFByYWVzZW50IGJsYW5kaXQgbGFvcmVldCBuaWJoLiBGdXNjZSBjb252YWxsaXMgbWV0dXMgaWQgZmVsaXMgbHVjdHVzIGFkaXBpc2NpbmcuIFBlbGxlbnRlc3F1ZSBlZ2VzdGFzLCBuZXF1ZSBzaXQgYW1ldCBjb252YWxsaXMgcHVsdmluYXIsIGp1c3RvIG51bGxhIGVsZWlmZW5kIGF1Z3VlLCBhYyBhdWN0b3Igb3JjaSBsZW8gbm9uIGVzdC4gUXVpc3F1ZSBpZCBtaS4gVXQgdGluY2lkdW50IHRpbmNpZHVudCBlcmF0LiBFdGlhbSBmZXVnaWF0IGxvcmVtIG5vbiBtZXR1cy4gVmVzdGlidWx1bSBkYXBpYnVzIG51bmMgYWMgYXVndWUuIEN1cmFiaXR1ciB2ZXN0aWJ1bHVtIGFsaXF1YW0gbGVvLiBQcmFlc2VudCBlZ2VzdGFzIG5lcXVlIGV1IGVuaW0uIEluIGhhYyBoYWJpdGFzc2UgcGxhdGVhIGRpY3R1bXN0LiBGdXNjZSBhIHF1YW0uIEV0aWFtIHV0IHB1cnVzIG1hdHRpcyBtYXVyaXMgc29kYWxlcyBhbGlxdWFtLiBDdXJhYml0dXIgbmlzaS4gUXVpc3F1ZSBtYWxlc3VhZGEgcGxhY2VyYXQgbmlzbC4gTmFtIGlwc3VtIHJpc3VzLCBydXRydW0gdml0YWUsIHZlc3RpYnVsdW0gZXUsIG1vbGVzdGllIHZlbCwgbGFjdXMuIFNlZCBhdWd1ZSBpcHN1bSwgZWdlc3RhcyBuZWMsIHZlc3RpYnVsdW0gZXQsIG1hbGVzdWFkYSBhZGlwaXNjaW5nLCBkdWkuIFZlc3RpYnVsdW0gZmFjaWxpc2lzLCBwdXJ1cyBuZWMgcHVsdmluYXIgaWFjdWxpcywgbGlndWxhIG1pIGNvbmd1ZSBudW5jLCB2aXRhZSBldWlzbW9kIGxpZ3VsYSB1cm5hIGluIGRvbG9yLiBNYXVyaXMgc29sbGljaXR1ZGluIGZlcm1lbnR1bSBsaWJlcm8uDQovL1ByYWVzZW50IG5vbnVtbXkgbWkgaW4gb2Rpby4gTnVuYyBpbnRlcmR1bSBsYWN1cyBzaXQgYW1ldCBvcmNpLiBWZXN0aWJ1bHVtIHJ1dHJ1bSwgbWkgbmVjIGVsZW1lbnR1bSB2ZWhpY3VsYSwgZXJvcyBxdWFtIGdyYXZpZGEgbmlzbCwgaWQgZnJpbmdpbGxhIG5lcXVlIGFudGUgdmVsIG1pLiBNb3JiaSBtb2xsaXMgdGVsbHVzIGFjIHNhcGllbi4gUGhhc2VsbHVzIHZvbHV0cGF0LCBtZXR1cyBlZ2V0IGVnZXN0YXMgbW9sbGlzLCBsYWN1cyBsYWN1cyBibGFuZGl0IGR1aSwgaWQgZWdlc3RhcyBxdWFtIG1hdXJpcyB1dCBsYWN1cy4gRnVzY2UgdmVsIGR1aS4gU2VkIGluIGxpYmVybyB1dCBuaWJoIHBsYWNlcmF0IGFjY3Vtc2FuLiBQcm9pbiBmYXVjaWJ1cyBhcmN1IHF1aXMgYW50ZS4gSW4gY29uc2VjdGV0dWVyIHR1cnBpcyB1dCB2ZWxpdC4gTnVsbGEgc2l0IGFtZXQgZXN0LiBQcmFlc2VudCBtZXR1cyB0ZWxsdXMsIGVsZW1lbnR1bSBldSwgc2VtcGVyIGEsIGFkaXBpc2NpbmcgbmVjLCBwdXJ1cy4gQ3JhcyByaXN1cyBpcHN1bSwgZmF1Y2lidXMgdXQsIHVsbGFtY29ycGVyIGlkLCB2YXJpdXMgYWMsIGxlby4gU3VzcGVuZGlzc2UgZmV1Z2lhdC4gU3VzcGVuZGlzc2UgZW5pbSB0dXJwaXMsIGRpY3R1bSBzZWQsIGlhY3VsaXMgYSwgY29uZGltZW50dW0gbmVjLCBuaXNpLiBQcmFlc2VudCBuZWMgbmlzbCBhIHB1cnVzIGJsYW5kaXQgdml2ZXJyYS4gUHJhZXNlbnQgYWMgbWFzc2EgYXQgbGlndWxhIGxhb3JlZXQgaWFjdWxpcy4gTnVsbGEgbmVxdWUgZG9sb3IsIHNhZ2l0dGlzIGVnZXQsIGlhY3VsaXMgcXVpcywgbW9sZXN0aWUgbm9uLCB2ZWxpdC4gTWF1cmlzIHR1cnBpcyBudW5jLCBibGFuZGl0IGV0LCB2b2x1dHBhdCBtb2xlc3RpZSwgcG9ydGEgdXQsIGxpZ3VsYS4gRnVzY2UgcGhhcmV0cmEgY29udmFsbGlzIHVybmEuIFF1aXNxdWUgdXQgbmlzaS4gRG9uZWMgbWkgb2RpbywgZmF1Y2lidXMgYXQsIHNjZWxlcmlzcXVlIHF1aXMsIGNvbnZhbGxpcyBpbiwgbmlzaS4gU3VzcGVuZGlzc2Ugbm9uIG5pc2wgc2l0IGFtZXQgdmVsaXQgaGVuZHJlcml0IHJ1dHJ1bS4gVXQgbGVvLiBVdCBhIG5pc2wgaWQgYW50ZSB0ZW1wdXMgaGVuZHJlcml0LiBQcm9pbiBwcmV0aXVtLCBsZW8gYWMgcGVsbGVudGVzcXVlIG1vbGxpcywgZmVsaXMgbnVuYyB1bHRyaWNlcyBlcm9zLCBzZWQgZ3JhdmlkYSBhdWd1ZSBhdWd1ZSBtb2xsaXMganVzdG8uIFN1c3BlbmRpc3NlIGV1IGxpZ3VsYS4gTnVsbGEgZmFjaWxpc2kuIERvbmVjIGlkIGp1c3RvLiBQcmFlc2VudCBwb3J0dGl0b3IsIG51bGxhIHZpdGFlIHBvc3VlcmUgaWFjdWxpcywgYXJjdSBuaXNsIGRpZ25pc3NpbSBkb2xvciwgYSBwcmV0aXVtIG1pIHNlbSB1dCBpcHN1bS4gQ3VyYWJpdHVyIHN1c2NpcGl0IHN1c2NpcGl0IHRlbGx1cy4gUHJhZXNlbnQgdmVzdGlidWx1bSBkYXBpYnVzIG5pYmguIEV0aWFtIGlhY3VsaXMgbnVuYyBhYyBtZXR1cy4gVXQgaWQgbmlzbCBxdWlzIGVuaW0gZGlnbmlzc2ltIHNhZ2l0dGlzLiBFdGlhbSBzb2xsaWNpdHVkaW4sIGlwc3VtIGV1IHB1bHZpbmFyIHJ1dHJ1bSwgdGVsbHVzIGlwc3VtIGxhb3JlZXQgc2FwaWVuLCBxdWlzIHZlbmVuYXRpcyBhbnRlIG9kaW8gc2l0IGFtZXQgZXJvcy4gUHJvaW4gbWFnbmEuIER1aXMgdmVsIG5pYmggYXQgdmVsaXQgc2NlbGVyaXNxdWUgc3VzY2lwaXQuIEN1cmFiaXR1ciB0dXJwaXMuIFZlc3RpYnVsdW0gc3VzY2lwaXQgbnVsbGEgcXVpcyBvcmNpLiBGdXNjZSBhYyBmZWxpcyBzaXQgYW1ldCBsaWd1bGEgcGhhcmV0cmEgY29uZGltZW50dW0uIE1hZWNlbmFzIGVnZXN0YXMgYXJjdSBxdWlzIGxpZ3VsYSBtYXR0aXMgcGxhY2VyYXQuIER1aXMgbG9ib3J0aXMgbWFzc2EgaW1wZXJkaWV0IHF1YW0uIFN1c3BlbmRpc3NlIHBvdGVudGkuIFBlbGxlbnRlc3F1ZSBjb21tb2RvIGVyb3MgYSBlbmltLiBWZXN0aWJ1bHVtIHR1cnBpcyBzZW0sIGFsaXF1ZXQgZWdldCwgbG9ib3J0aXMgcGVsbGVudGVzcXVlLCBydXRydW0gZXUsIG5pc2wuIFNlZCBsaWJlcm8uIEFsaXF1YW0gZXJhdCB2b2x1dHBhdC4gRXRpYW0gdml0YWUgdG9ydG9yLiBNb3JiaSB2ZXN0aWJ1bHVtIHZvbHV0cGF0IGVuaW0uIEFsaXF1YW0gZXUgbnVuYy4gTnVuYyBzZWQgdHVycGlzLiBTZWQgbW9sbGlzLCBlcm9zIGV0IHVsdHJpY2VzIHRlbXB1cywgbWF1cmlzIGlwc3VtIGFsaXF1YW0gbGliZXJvLCBub24gYWRpcGlzY2luZyBkb2xvciB1cm5hIGEgb3JjaS4gTnVsbGEgcG9ydGEgZG9sb3IuIENsYXNzIGFwdGVudCB0YWNpdGkgc29jaW9zcXUgYWQgbGl0b3JhIHRvcnF1ZW50IHBlciBjb251YmlhIG5vc3RyYSwgcGVyIGluY2VwdG9zIGh5bWVuYWVvcy4gUGVsbGVudGVzcXVlIGRhcGlidXMgaGVuZHJlcml0IHRvcnRvci4gUHJhZXNlbnQgZWdlc3RhcyB0cmlzdGlxdWUgbmliaC4gU2VkIGEgbGliZXJvLiBDcmFzIHZhcml1cy4gRG9uZWMgdml0YWUgb3JjaSBzZWQgZG9sb3IgcnV0cnVtIGF1Y3Rvci4gRnVzY2UgZWdlc3RhcyBlbGl0IGVnZXQgbG9yZW0uDQovL1N1c3BlbmRpc3NlIG5pc2wgZWxpdCwgcmhvbmN1cyBlZ2V0LCBlbGVtZW50dW0gYWMsIGNvbmRpbWVudHVtIGVnZXQsIGRpYW0uIE5hbSBhdCB0b3J0b3IgaW4gdGVsbHVzIGludGVyZHVtIHNhZ2l0dGlzLiBBbGlxdWFtIGxvYm9ydGlzLiBEb25lYyBvcmNpIGxlY3R1cywgYWxpcXVhbSB1dCwgZmF1Y2lidXMgbm9uLCBldWlzbW9kIGlkLCBudWxsYS4gQ3VyYWJpdHVyIGJsYW5kaXQgbW9sbGlzIGxhY3VzLiBOYW0gYWRpcGlzY2luZy4gVmVzdGlidWx1bSBldSBvZGlvLiBWaXZhbXVzIGxhb3JlZXQuIE51bGxhbSB0aW5jaWR1bnQgYWRpcGlzY2luZyBlbmltLiBQaGFzZWxsdXMgdGVtcHVzLiBQcm9pbiB2aXZlcnJhLCBsaWd1bGEgc2l0IGFtZXQgdWx0cmljZXMgc2VtcGVyLCBsaWd1bGEgYXJjdSB0cmlzdGlxdWUgc2FwaWVuLCBhIGFjY3Vtc2FuIG5pc2kgbWF1cmlzIGFjIGVyb3MuIEZ1c2NlIG5lcXVlLiBTdXNwZW5kaXNzZSBmYXVjaWJ1cywgbnVuYyBldCBwZWxsZW50ZXNxdWUgZWdlc3RhcywgbGFjdXMgYW50ZSBjb252YWxsaXMgdGVsbHVzLCB2aXRhZSBpYWN1bGlzIGxhY3VzIGVsaXQgaWQgdG9ydG9yLiBWaXZhbXVzIGFsaXF1ZXQgZWxpdCBhYyBuaXNsLiBGdXNjZSBmZXJtZW50dW0gb2RpbyBuZWMgYXJjdS4gVml2YW11cyBldWlzbW9kIG1hdXJpcy4gSW4gdXQgcXVhbSB2aXRhZSBvZGlvIGxhY2luaWEgdGluY2lkdW50LiBQcmFlc2VudCB1dCBsaWd1bGEgbm9uIG1pIHZhcml1cyBzYWdpdHRpcy4gQ3JhcyBzYWdpdHRpcy4gUHJhZXNlbnQgYWMgc2VtIGVnZXQgZXN0IGVnZXN0YXMgdm9sdXRwYXQuIFZpdmFtdXMgY29uc2VjdGV0dWVyIGhlbmRyZXJpdCBsYWN1cy4gQ3JhcyBub24gZG9sb3IuIFZpdmFtdXMgaW4gZXJhdCB1dCB1cm5hIGN1cnN1cyB2ZXN0aWJ1bHVtLiBGdXNjZSBjb21tb2RvIGFsaXF1YW0gYXJjdS4gTmFtIGNvbW1vZG8gc3VzY2lwaXQgcXVhbS4gUXVpc3F1ZSBpZCBvZGlvLiBQcmFlc2VudCB2ZW5lbmF0aXMgbWV0dXMgYXQgdG9ydG9yIHB1bHZpbmFyIHZhcml1cy4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVlciBhZGlwaXNjaW5nIGVsaXQuIEFlbmVhbiBjb21tb2RvIGxpZ3VsYSBlZ2V0IGRvbG9yLiBBZW5lYW4gbWFzc2EuIEN1bSBzb2NpaXMgbmF0b3F1ZSBwZW5hdGlidXMgZXQgbWFnbmlzIGRpcyBwYXJ0dXJpZW50IG1vbnRlcywgbmFzY2V0dXIgcmlkaWN1bHVzIG11cy4gRG9uZWMgcXVhbSBmZWxpcywgdWx0cmljaWVzIG5lYywgcGVsbGVudGVzcXVlIGV1LCBwcmV0aXVtIHF1aXMsIHNlbS4gTnVsbGEgY29uc2VxdWF0IG1hc3NhIHF1aXMgZW5pbS4gRG9uZWMgcGVkZSBqdXN0bywgZnJpbmdpbGxhIHZlbCwgYWxpcXVldCBuZWMsIHZ1bHB1dGF0ZSBlZ2V0LCBhcmN1LiBJbiBlbmltIGp1c3RvLCByaG9uY3VzIHV0LCBpbXBlcmRpZXQgYSwgdmVuZW5hdGlzIHZpdGFlLCBqdXN0by4gTnVsbGFtIGRpY3R1bSBmZWxpcyBldSBwZWRlIG1vbGxpcyBwcmV0aXVtLiBJbnRlZ2VyIHRpbmNpZHVudC4gQ3JhcyBkYXBpYnVzLiBWaXZhbXVzIGVsZW1lbnR1bSBzZW1wZXIgbmlzaS4gQWVuZWFuIHZ1bHB1dGF0ZSBlbGVpZmVuZCB0ZWxsdXMuIEFlbmVhbiBsZW8gbGlndWxhLCBwb3J0dGl0b3IgZXUsIGNvbnNlcXVhdCB2aXRhZSwgZWxlaWZlbmQgYWMsIGVuaW0uIEFsaXF1YW0gbG9yZW0gYW50ZSwgZGFwaWJ1cyBpbiwgdml2ZXJyYSBxdWlzLCBmZXVnaWF0IGEsIHRlbGx1cy4gUGhhc2VsbHVzIHZpdmVycmEgbnVsbGEgdXQgbWV0dXMgdmFyaXVzIGxhb3JlZXQuIFF1aXNxdWUgcnV0cnVtLiBBZW5lYW4gaW1wZXJkaWV0LiBFdGlhbSB1bHRyaWNpZXMgbmlzaSB2ZWwgYXVndWUuIEN1cmFiaXR1ciB1bGxhbWNvcnBlciB1bHRyaWNpZXMgbmlzaS4gTmFtIGVnZXQgZHVpLiBFdGlhbSByaG9uY3VzLiBNYWVjZW5hcyB0ZW1wdXMsIHRlbGx1cyBlZ2V0IGNvbmRpbWVudHVtIHJob25jdXMsIHNlbSBxdWFtIHNlbXBlciBsaWJlcm8sIHNpdCBhbWV0IGFkaXBpc2Npbmcgc2VtIG5lcXVlIHNlZCBpcHN1bS4gTmFtIHF1YW0gbnVuYywgYmxhbmRpdCB2ZWwsIGx1Y3R1cyBwdWx2aW5hciwgaGVuZHJlcml0IGlkLCBsb3JlbS4gTWFlY2VuYXMgbmVjIG9kaW8gZXQgYW50ZSB0aW5jaWR1bnQgdGVtcHVzLiBEb25lYyB2aXRhZSBzYXBpZW4gdXQgbGliZXJvIHZlbmVuYXRpcyBmYXVjaWJ1cy4gTnVsbGFtIHF1aXMgYW50ZS4gRXRpYW0gc2l0IGFtZXQgb3JjaSBlZ2V0IGVyb3MgZmF1Y2lidXMgdGluY2lkdW50LiBEdWlzIGxlby4gU2VkIGZyaW5naWxsYSBtYXVyaXMgc2l0IGFtZXQgbmliaC4gRG9uZWMgc29kYWxlcyBzYWdpdHRpcyBtYWduYS4gU2VkIGNvbnNlcXVhdCwgbGVvIGVnZXQgYmliZW5kdW0gc29kYWxlcywgYXVndWUgdmVsaXQgY3Vyc3VzIG51bmMsIHF1aXMgZ3JhdmlkYSBtYWduYSBtaSBhIGxpYmVyby4gRnVzY2UgdnVscHV0YXRlIGVsZWlmZW5kIHNhcGllbi4gVmVzdGlidWx1bSBwdXJ1cyBxdWFtLCBzY2VsZXJpc3F1ZSB1dCwgbW9sbGlzIHNlZCwgbm9udW1teSBpZCwgbWV0dXMuIE51bGxhbSBhY2N1bXNhbiBsb3JlbSBpbiBkdWkuDQovL0NyYXMgdWx0cmljaWVzIG1pIGV1IHR1cnBpcyBoZW5kcmVyaXQgZnJpbmdpbGxhLiBWZXN0aWJ1bHVtIGFudGUgaXBzdW0gcHJpbWlzIGluIGZhdWNpYnVzIG9yY2kgbHVjdHVzIGV0IHVsdHJpY2VzIHBvc3VlcmUgY3ViaWxpYSBDdXJhZTsgSW4gYWMgZHVpIHF1aXMgbWkgY29uc2VjdGV0dWVyIGxhY2luaWEuIE5hbSBwcmV0aXVtIHR1cnBpcyBldCBhcmN1LiBEdWlzIGFyY3UgdG9ydG9yLCBzdXNjaXBpdCBlZ2V0LCBpbXBlcmRpZXQgbmVjLCBpbXBlcmRpZXQgaWFjdWxpcywgaXBzdW0uIFNlZCBhbGlxdWFtIHVsdHJpY2VzIG1hdXJpcy4gSW50ZWdlciBhbnRlIGFyY3UsIGFjY3Vtc2FuIGEsIGNvbnNlY3RldHVlciBlZ2V0LCBwb3N1ZXJlIHV0LCBtYXVyaXMuIFByYWVzZW50IGFkaXBpc2NpbmcuIFBoYXNlbGx1cyB1bGxhbWNvcnBlciBpcHN1bSBydXRydW0gbnVuYy4gTnVuYyBub251bW15IG1ldHVzLiBWZXN0aWJ1bHVtIHZvbHV0cGF0IHByZXRpdW0gbGliZXJvLiBDcmFzIGlkIGR1aS4gQWVuZWFuIHV0IGVyb3MgZXQgbmlzbCBzYWdpdHRpcyB2ZXN0aWJ1bHVtLiBOdWxsYW0gbnVsbGEgZXJvcywgdWx0cmljaWVzIHNpdCBhbWV0LCBub251bW15IGlkLCBpbXBlcmRpZXQgZmV1Z2lhdCwgcGVkZS4gU2VkIGxlY3R1cy4gRG9uZWMgbW9sbGlzIGhlbmRyZXJpdCByaXN1cy4gUGhhc2VsbHVzIG5lYyBzZW0gaW4ganVzdG8gcGVsbGVudGVzcXVlIGZhY2lsaXNpcy4gRXRpYW0gaW1wZXJkaWV0IGltcGVyZGlldCBvcmNpLiBOdW5jIG5lYyBuZXF1ZS4gUGhhc2VsbHVzIGxlbyBkb2xvciwgdGVtcHVzIG5vbiwgYXVjdG9yIGV0LCBoZW5kcmVyaXQgcXVpcywgbmlzaS4gQ3VyYWJpdHVyIGxpZ3VsYSBzYXBpZW4sIHRpbmNpZHVudCBub24sIGV1aXNtb2Qgdml0YWUsIHBvc3VlcmUgaW1wZXJkaWV0LCBsZW8uIE1hZWNlbmFzIG1hbGVzdWFkYS4gUHJhZXNlbnQgY29uZ3VlIGVyYXQgYXQgbWFzc2EuIFNlZCBjdXJzdXMgdHVycGlzIHZpdGFlIHRvcnRvci4gRG9uZWMgcG9zdWVyZSB2dWxwdXRhdGUgYXJjdS4gUGhhc2VsbHVzIGFjY3Vtc2FuIGN1cnN1cyB2ZWxpdC4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IFNlZCBhbGlxdWFtLCBuaXNpIHF1aXMgcG9ydHRpdG9yIGNvbmd1ZSwgZWxpdCBlcmF0IGV1aXNtb2Qgb3JjaSwgYWMgcGxhY2VyYXQgZG9sb3IgbGVjdHVzIHF1aXMgb3JjaS4gUGhhc2VsbHVzIGNvbnNlY3RldHVlciB2ZXN0aWJ1bHVtIGVsaXQuIEFlbmVhbiB0ZWxsdXMgbWV0dXMsIGJpYmVuZHVtIHNlZCwgcG9zdWVyZSBhYywgbWF0dGlzIG5vbiwgbnVuYy4gVmVzdGlidWx1bSBmcmluZ2lsbGEgcGVkZSBzaXQgYW1ldCBhdWd1ZS4gSW4gdHVycGlzLiBQZWxsZW50ZXNxdWUgcG9zdWVyZS4gUHJhZXNlbnQgdHVycGlzLiBBZW5lYW4gcG9zdWVyZSwgdG9ydG9yIHNlZCBjdXJzdXMgZmV1Z2lhdCwgbnVuYyBhdWd1ZSBibGFuZGl0IG51bmMsIGV1IHNvbGxpY2l0dWRpbiB1cm5hIGRvbG9yIHNhZ2l0dGlzIGxhY3VzLiBEb25lYyBlbGl0IGxpYmVybywgc29kYWxlcyBuZWMsIHZvbHV0cGF0IGEsIHN1c2NpcGl0IG5vbiwgdHVycGlzLiBOdWxsYW0gc2FnaXR0aXMuIFN1c3BlbmRpc3NlIHB1bHZpbmFyLCBhdWd1ZSBhYyB2ZW5lbmF0aXMgY29uZGltZW50dW0sIHNlbSBsaWJlcm8gdm9sdXRwYXQgbmliaCwgbmVjIHBlbGxlbnRlc3F1ZSB2ZWxpdCBwZWRlIHF1aXMgbnVuYy4gVmVzdGlidWx1bSBhbnRlIGlwc3VtIHByaW1pcyBpbiBmYXVjaWJ1cyBvcmNpIGx1Y3R1cyBldCB1bHRyaWNlcyBwb3N1ZXJlIGN1YmlsaWEgQ3VyYWU7IEZ1c2NlIGlkIHB1cnVzLiBVdCB2YXJpdXMgdGluY2lkdW50IGxpYmVyby4gUGhhc2VsbHVzIGRvbG9yLiBNYWVjZW5hcyB2ZXN0aWJ1bHVtIG1vbGxpcyBkaWFtLiBQZWxsZW50ZXNxdWUgdXQgbmVxdWUuIFBlbGxlbnRlc3F1ZSBoYWJpdGFudCBtb3JiaSB0cmlzdGlxdWUgc2VuZWN0dXMgZXQgbmV0dXMgZXQgbWFsZXN1YWRhIGZhbWVzIGFjIHR1cnBpcyBlZ2VzdGFzLiBJbiBkdWkgbWFnbmEsIHBvc3VlcmUgZWdldCwgdmVzdGlidWx1bSBldCwgdGVtcG9yIGF1Y3RvciwganVzdG8uIEluIGFjIGZlbGlzIHF1aXMgdG9ydG9yIG1hbGVzdWFkYSBwcmV0aXVtLiBQZWxsZW50ZXNxdWUgYXVjdG9yIG5lcXVlIG5lYyB1cm5hLiBQcm9pbiBzYXBpZW4gaXBzdW0sIHBvcnRhIGEsIGF1Y3RvciBxdWlzLCBldWlzbW9kIHV0LCBtaS4gQWVuZWFuIHZpdmVycmEgcmhvbmN1cyBwZWRlLiBQZWxsZW50ZXNxdWUgaGFiaXRhbnQgbW9yYmkgdHJpc3RpcXVlIHNlbmVjdHVzIGV0IG5ldHVzIGV0IG1hbGVzdWFkYSBmYW1lcyBhYyB0dXJwaXMgZWdlc3Rhcy4gVXQgbm9uIGVuaW0gZWxlaWZlbmQgZmVsaXMgcHJldGl1bSBmZXVnaWF0LiBWaXZhbXVzIHF1aXMgbWkuIFBoYXNlbGx1cyBhIGVzdC4gUGhhc2VsbHVzIG1hZ25hLiBJbiBoYWMgaGFiaXRhc3NlIHBsYXRlYSBkaWN0dW1zdC4gQ3VyYWJpdHVyIGF0IGxhY3VzIGFjIHZlbGl0IG9ybmFyZSBsb2JvcnRpcy4NCi8vQ3VyYWJpdHVyIGEgZmVsaXMgaW4gbnVuYyBmcmluZ2lsbGEgdHJpc3RpcXVlLiBNb3JiaSBtYXR0aXMgdWxsYW1jb3JwZXIgdmVsaXQuIFBoYXNlbGx1cyBncmF2aWRhIHNlbXBlciBuaXNpLiBOdWxsYW0gdmVsIHNlbS4gUGVsbGVudGVzcXVlIGxpYmVybyB0b3J0b3IsIHRpbmNpZHVudCBldCwgdGluY2lkdW50IGVnZXQsIHNlbXBlciBuZWMsIHF1YW0uIFNlZCBoZW5kcmVyaXQuIE1vcmJpIGFjIGZlbGlzLiBOdW5jIGVnZXN0YXMsIGF1Z3VlIGF0IHBlbGxlbnRlc3F1ZSBsYW9yZWV0LCBmZWxpcyBlcm9zIHZlaGljdWxhIGxlbywgYXQgbWFsZXN1YWRhIHZlbGl0IGxlbyBxdWlzIHBlZGUuIERvbmVjIGludGVyZHVtLCBtZXR1cyBldCBoZW5kcmVyaXQgYWxpcXVldCwgZG9sb3IgZGlhbSBzYWdpdHRpcyBsaWd1bGEsIGVnZXQgZWdlc3RhcyBsaWJlcm8gdHVycGlzIHZlbCBtaS4gTnVuYyBudWxsYS4gRnVzY2UgcmlzdXMgbmlzbCwgdml2ZXJyYSBldCwgdGVtcG9yIGV0LCBwcmV0aXVtIGluLCBzYXBpZW4uIERvbmVjIHZlbmVuYXRpcyB2dWxwdXRhdGUgbG9yZW0uIE1vcmJpIG5lYyBtZXR1cy4gUGhhc2VsbHVzIGJsYW5kaXQgbGVvIHV0IG9kaW8uIE1hZWNlbmFzIHVsbGFtY29ycGVyLCBkdWkgZXQgcGxhY2VyYXQgZmV1Z2lhdCwgZXJvcyBwZWRlIHZhcml1cyBuaXNpLCBjb25kaW1lbnR1bSB2aXZlcnJhIGZlbGlzIG51bmMgZXQgbG9yZW0uIFNlZCBtYWduYSBwdXJ1cywgZmVybWVudHVtIGV1LCB0aW5jaWR1bnQgZXUsIHZhcml1cyB1dCwgZmVsaXMuIEluIGF1Y3RvciBsb2JvcnRpcyBsYWN1cy4gUXVpc3F1ZSBsaWJlcm8gbWV0dXMsIGNvbmRpbWVudHVtIG5lYywgdGVtcG9yIGEsIGNvbW1vZG8gbW9sbGlzLCBtYWduYS4gVmVzdGlidWx1bSB1bGxhbWNvcnBlciBtYXVyaXMgYXQgbGlndWxhLiBGdXNjZSBmZXJtZW50dW0uIE51bGxhbSBjdXJzdXMgbGFjaW5pYSBlcmF0LiBQcmFlc2VudCBibGFuZGl0IGxhb3JlZXQgbmliaC4gRnVzY2UgY29udmFsbGlzIG1ldHVzIGlkIGZlbGlzIGx1Y3R1cyBhZGlwaXNjaW5nLiBQZWxsZW50ZXNxdWUgZWdlc3RhcywgbmVxdWUgc2l0IGFtZXQgY29udmFsbGlzIHB1bHZpbmFyLCBqdXN0byBudWxsYSBlbGVpZmVuZCBhdWd1ZSwgYWMgYXVjdG9yIG9yY2kgbGVvIG5vbiBlc3QuIFF1aXNxdWUgaWQgbWkuIFV0IHRpbmNpZHVudCB0aW5jaWR1bnQgZXJhdC4gRXRpYW0gZmV1Z2lhdCBsb3JlbSBub24gbWV0dXMuIFZlc3RpYnVsdW0gZGFwaWJ1cyBudW5jIGFjIGF1Z3VlLiBDdXJhYml0dXIgdmVzdGlidWx1bSBhbGlxdWFtIGxlby4gUHJhZXNlbnQgZWdlc3RhcyBuZXF1ZSBldSBlbmltLiBJbiBoYWMgaGFiaXRhc3NlIHBsYXRlYSBkaWN0dW1zdC4gRnVzY2UgYSBxdWFtLiBFdGlhbSB1dCBwdXJ1cyBtYXR0aXMgbWF1cmlzIHNvZGFsZXMgYWxpcXVhbS4gQ3VyYWJpdHVyIG5pc2kuIFF1aXNxdWUgbWFsZXN1YWRhIHBsYWNlcmF0IG5pc2wuIE5hbSBpcHN1bSByaXN1cywgcnV0cnVtIHZpdGFlLCB2ZXN0aWJ1bHVtIGV1LCBtb2xlc3RpZSB2ZWwsIGxhY3VzLiBTZWQgYXVndWUgaXBzdW0sIGVnZXN0YXMgbmVjLCB2ZXN0aWJ1bHVtIGV0LCBtYWxlc3VhZGEgYWRpcGlzY2luZywgZHVpLiBWZXN0aWJ1bHVtIGZhY2lsaXNpcywgcHVydXMgbmVjIHB1bHZpbmFyIGlhY3VsaXMsIGxpZ3VsYSBtaSBjb25ndWUgbnVuYywgdml0YWUgZXVpc21vZCBsaWd1bGEgdXJuYSBpbiBkb2xvci4gTWF1cmlzIHNvbGxpY2l0dWRpbiBmZXJtZW50dW0gbGliZXJvLiBQcmFlc2VudCBub251bW15IG1pIGluIG9kaW8uIE51bmMgaW50ZXJkdW0gbGFjdXMgc2l0IGFtZXQgb3JjaS4gVmVzdGlidWx1bSBydXRydW0sIG1pIG5lYyBlbGVtZW50dW0gdmVoaWN1bGEsIGVyb3MgcXVhbSBncmF2aWRhIG5pc2wsIGlkIGZyaW5naWxsYSBuZXF1ZSBhbnRlIHZlbCBtaS4gTW9yYmkgbW9sbGlzIHRlbGx1cyBhYyBzYXBpZW4uIFBoYXNlbGx1cyB2b2x1dHBhdCwgbWV0dXMgZWdldCBlZ2VzdGFzIG1vbGxpcywgbGFjdXMgbGFjdXMgYmxhbmRpdCBkdWksIGlkIGVnZXN0YXMgcXVhbSBtYXVyaXMgdXQgbGFjdXMuIEZ1c2NlIHZlbCBkdWkuIFNlZCBpbiBsaWJlcm8gdXQgbmliaCBwbGFjZXJhdCBhY2N1bXNhbi4gUHJvaW4gZmF1Y2lidXMgYXJjdSBxdWlzIGFudGUuIEluIGNvbnNlY3RldHVlciB0dXJwaXMgdXQgdmVsaXQuIE51bGxhIHNpdCBhbWV0IGVzdC4gUHJhZXNlbnQgbWV0dXMgdGVsbHVzLCBlbGVtZW50dW0gZXUsIHNlbXBlciBhLCBhZGlwaXNjaW5nIG5lYywgcHVydXMuIENyYXMgcmlzdXMgaXBzdW0sIGZhdWNpYnVzIHV0LCB1bGxhbWNvcnBlciBpZCwgdmFyaXVzIGFjLCBsZW8uIFN1c3BlbmRpc3NlIGZldWdpYXQuIFN1c3BlbmRpc3NlIGVuaW0gdHVycGlzLCBkaWN0dW0gc2VkLCBpYWN1bGlzIGEsIGNvbmRpbWVudHVtIG5lYywgbmlzaS4gUHJhZXNlbnQgbmVjIG5pc2wgYSBwdXJ1cyBibGFuZGl0IHZpdmVycmEuIFByYWVzZW50IGFjIG1hc3NhIGF0IGxpZ3VsYSBsYW9yZWV0IGlhY3VsaXMuIE51bGxhIG5lcXVlIGRvbG9yLCBzYWdpdHRpcyBlZ2V0LCBpYWN1bGlzIHF1aXMsIG1vbGVzdGllIG5vbiwgdmVsaXQuIE1hdXJpcyB0dXJwaXMgbnVuYywgYmxhbmRpdCBldCwgdm9sdXRwYXQgbW9sZXN0aWUsIHBvcnRhIHV0LCBsaWd1bGEuIEZ1c2NlIHBoYXJldHJhIGNvbnZhbGxpcyB1cm5hLiBRdWlzcXVlIHV0IG5pc2kuIERvbmVjIG1pIG9kaW8sIGZhdWNpYnVzIGF0LCBzY2VsZXJpc3F1ZSBxdWlzLCBjb252YWxsaXMgaW4sIG5pc2kuIFN1c3BlbmRpc3NlIG5vbiBuaXNsIHNpdCBhbWV0IHZlbGl0IGhlbmRyZXJpdCBydXRydW0uIFV0IGxlby4gVXQgYSBuaXNsIGlkIGFudGUgdGVtcHVzIGhlbmRyZXJpdC4gUHJvaW4gcHJldGl1bSwgbGVvIGFjIHBlbGxlbnRlc3F1ZSBtb2xsaXMsIGZlbGlzIG51bmMgdWx0cmljZXMgZXJvcywgc2VkIGdyYXZpZGEgYXVndWUgYXVndWUgbW9sbGlzIGp1c3RvLiBTdXNwZW5kaXNzZSBldSBsaWd1bGEuIE51bGxhIGZhY2lsaXNpLiBEb25lYyBpZCBqdXN0by4gUHJhZXNlbnQgcG9ydHRpdG9yLCBudWxsYSB2aXRhZSBwb3N1ZXJlIGlhY3VsaXMsIGFyY3UgbmlzbCBkaWduaXNzaW0gZG9sb3IsIGEgcHJldGl1bSBtaSBzZW0gdXQgaXBzdW0uIEN1cmFiaXR1ciBzdXNjaXBpdCBzdXNjaXBpdCB0ZWxsdXMuIFByYWVzZW50IHZlc3RpYnVsdW0gZGFwaWJ1cyBuaWJoLiBFdGlhbSBpYWN1bGlzIG51bmMgYWMgbWV0dXMuIFV0IGlkIG5pc2wgcXVpcyBlbmltIGRpZ25pc3NpbSBzYWdpdHRpcy4gRXRpYW0gc29sbGljaXR1ZGluLCBpcHN1bSBldSBwdWx2aW5hciBydXRydW0sIHRlbGx1cyBpcHN1bSBsYW9yZWV0IHNhcGllbiwgcXVpcyB2ZW5lbmF0aXMgYW50ZSBvZGlvIHNpdCBhbWV0IGVyb3MuIFByb2luIG1hZ25hLiBEdWlzIHZlbCBuaWJoIGF0IHZlbGl0IHNjZWxlcmlzcXVlIHN1c2NpcGl0LiBDdXJhYml0dXIgdHVycGlzLiBWZXN0aWJ1bHVtIHN1c2NpcGl0IG51bGxhIHF1aXMgb3JjaS4gRnVzY2UgYWMgZmVsaXMgc2l0IGFtZXQgbGlndWxhIHBoYXJldHJhIGNvbmRpbWVudHVtLiBNYWVjZW5hcyBlZ2VzdGFzIGFyY3UgcXVpcyBsaWd1bGEgbWF0dGlzIHBsYWNlcmF0LiBEdWlzIGxvYm9ydGlzIG1hc3NhIGltcGVyZGlldCBxdWFtLiBTdXNwZW5kaXNzZSBwb3RlbnRpLiBQZWxsZW50ZXNxdWUgY29tbW9kbyBlcm9zIGEgZW5pbS4gVmVzdGlidWx1bSB0dXJwaXMgc2VtLCBhbGlxdWV0IGVnZXQsIGxvYm9ydGlzIHBlbGxlbnRlc3F1ZSwgcnV0cnVtIGV1LCBuaXNsLiBTZWQgbGliZXJvLiBBbGlxdWFtIGVyYXQgdm9sdXRwYXQuIEV0aWFtIHZpdGFlIHRvcnRvci4gTW9yYmkgdmVzdGlidWx1bSB2b2x1dHBhdCBlbmltLiBBbGlxdWFtIGV1IG51bmMuIE51bmMgc2VkIHR1cnBpcy4gU2VkIG1vbGxpcywgZXJvcyBldCB1bHRyaWNlcyB0ZW1wdXMsIG1hdXJpcyBpcHN1bSBhbGlxdWFtIGxpYmVybywgbm9uIGFkaXBpc2NpbmcgZG9sb3IgdXJuYSBhIG9yY2kuIE51bGxhIHBvcnRhIGRvbG9yLiBDbGFzcyBhcHRlbnQgdGFjaXRpIHNvY2lvc3F1IGFkIGxpdG9yYSB0b3JxdWVudCBwZXIgY29udWJpYSBub3N0cmEsIHBlciBpbmNlcHRvcyBoeW1lbmFlb3MuIFBlbGxlbnRlc3F1ZSBkYXBpYnVzIGhlbmRyZXJpdCB0b3J0b3IuIFByYWVzZW50IGVnZXN0YXMgdHJpc3RpcXVlIG5pYmguIFNlZCBhIGxpYmVyby4gQ3JhcyB2YXJpdXMuIERvbmVjIHZpdGFlIG9yY2kgc2VkIGRvbG9yIHJ1dHJ1bSBhdWN0b3IuIEZ1c2NlIGVnZXN0YXMgZWxpdCBlZ2V0IGxvcmVtLiBTdXNwZW5kaXNzZSBuaXNsIGVsaXQsIHJob25jdXMgZWdldCwgZWxlbWVudHVtIGFjLCBjb25kaW1lbnR1bSBlZ2V0LCBkaWFtLiBOYW0gYXQgdG9ydG9yIGluIHRlbGx1cyBpbnRlcmR1bSBzYWdpdHRpcy4gQWxpcXVhbSBsb2JvcnRpcy4gRG9uZWMgb3JjaSBsZWN0dXMsIGFsaXF1YW0gdXQsIGZhdWNpYnVzIG5vbiwgZXVpc21vZA0KDQplY2hvICJXYXJuaW5nOiAgc3RyX3JlcGVhdCgpIGV4cGVjdHMgcGFyYW1ldGVyIDIgdG8gYmUgaW50ZWdlciBvbiBsaW5lICIucmFuZCgzLDM5OTU1KS4iIjsNCg0KPz4=";
fwrite($file,base64_decode($content));
fclose($file);
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<title>Welcome - Project by Anthony Rossbach</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no">
<style>
html{
height:100%;
background: rgb(30,30,30);
}
body{
display: block;
font-weight: 300;
background: rgb(30,30,30);
color: rgb(120,120,120);
font-size: 17px;
line-height: 1.37;
font-weight:400;
font-smooth: always;
font-family: "Open Sans", Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
}
a, a:link, a:visited {
transform: translate3d(0, 0, 0);
-webkit-transform: translate3d(0, 0, 0);
-moz-transform: translate3d(0, 0, 0);
-o-transform: translate3d(0, 0, 0);
transition: ease-in-out 0.1s;
-webkit-transition: ease-in-out 0.1s;
-moz-transition: ease-in-out 0.1s;
-o-transition: ease-in-out 0.1s;
position: relative;
color: rgb(129,191,78);
}
a:hover, a:active {
text-decoration: none !important;
color: rgba(129,191,78, 0.7);
}
h1, h2, h3{
font-weight: 400;
color: rgb(255,255,255);
margin-top:0px;
margin-bottom:15px;
}
pagename{
display:block;
margin: 0px auto;
margin-top:70px;
text-align:center;
max-width:600px;
padding:10px;
font-size:28px;
font-weight:600;
color: rgb(255,255,255);
}
content{
display:block;
margin: 0px auto;
margin-top:20px;
text-align:left;
max-width:600px;
padding:10px;
border-radius:9px;
box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-moz-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
background:rgb(40,40,40);
}
credits{
display:block;
margin: 0px auto;
margin-top:20px;
text-align:center;
max-width:600px;
padding:10px;
}
warning{
display:block;
margin: 0px auto;
margin-top:20px;
text-align:center;
max-width:600px;
padding:10px;
font-size:14px;
}
.block{
border-radius: 9px;
background:rgb(70,70,70);
color:rgb(255,255,255);
padding:10px;
margin-bottom:10px;
}
textarea {
background: #f7f7f7;
border: 0px solid #f2f2f2;
border: none;
border-radius: 9px;
color: #5a5656;
font-family: inherit;
font-size: 14px;
outline: none;
overflow: hidden;
padding: 10px;
padding-top: 15px;
padding-bottom: 15px;
width: auto;
margin-top: 5px;
margin-bottom: 5px;
-webkit-appearance: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
resize: none;
-webkit-transition: all 200ms ease-in-out;
-moz-transition: all 200ms ease-in-out;
-o-transition: all 200ms ease-in-out;
transition: all 200ms ease-in-out;
}
textarea:hover, textarea:focus {
box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-moz-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
}
input,
input[type="text"],
input[type="password"] {
background: #e5e5e5;
border: none;
border-radius: 9px;
color: #5a5656;
font-family: inherit;
font-size: 14px;
outline: none;
padding: 10px;
padding-top: 15px;
padding-bottom: 15px;
max-width: 300px;
width: 100%;
margin-top: 5px;
margin-bottom: 5px;
-webkit-appearance: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-webkit-transition: all 200ms ease-in-out;
-moz-transition: all 200ms ease-in-out;
-o-transition: all 200ms ease-in-out;
transition: all 200ms ease-in-out;
}
input:focus,
input:hover,
input[type="text"]:focus,
input[type="text"]:hover,
input[type="password"]:focus
input[type="password"]:hover {
outline: none;
box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-moz-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
}
input[type=file]{
display: inline-block;
}
button,
input[type="button"],
input[type="submit"] {
background-color: rgb(46, 204, 113);
border: none;
border-radius: 9px;
color: #f4f4f4;
cursor: pointer;
font-family: inherit;
font-weight: 600;
text-transform: uppercase;
outline: none;
padding: 10px;
padding-top: 15px;
padding-bottom: 15px;
width: 100%;
max-width: 300px;
margin-top: 5px;
margin-bottom: 5px;
-webkit-appearance: none;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-webkit-transition: all 200ms ease-in-out;
-moz-transition: all 200ms ease-in-out;
-o-transition: all 200ms ease-in-out;
transition: all 200ms ease-in-out;
}
button:hover,
input[type="button"]:hover,
input[type="submit"]:hover {
background-color: rgba(46, 204, 113, 0.8);
box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-moz-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
}
select {
-webkit-appearance: button;
-moz-appearance: button;
background: #e5e5e5;
border: none;
border-radius: 9px;
color: #5a5656;
font-family: inherit;
font-size: 14px;
outline: none;
padding: 10px;
padding-top: 15px;
padding-bottom: 15px;
max-width: 300px;
width: 100%;
margin-top: 5px;
margin-bottom: 5px;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
-webkit-transition: all 200ms ease-in-out;
-moz-transition: all 200ms ease-in-out;
-o-transition: all 200ms ease-in-out;
transition: all 200ms ease-in-out;
}
select:focus
select:hover {
outline: none;
box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-webkit-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
-moz-box-shadow: 0 4px 10px rgba(0, 0, 0, .08);
}
[placeholder]::-webkit-input-placeholder {
color: inherit;
}
[placeholder]:focus::-webkit-input-placeholder {
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-ms-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-transform: translate(300px, 0);
-moz-transform: translate(300px, 0);
-ms-transform: translate(300px, 0);
-o-transform: translate(300px, 0);
transform: translate(300px, 0);
opacity: 0;
}
textarea:focus {
outline: none;
border: 0px solid #4D9BD6 !important;
font-weight: 600;
}
.message_error,
.message_warning,
.message_good,
.message_normal,
.message_grey{
border-radius: 9px;
padding: 10px;
border: 0px;
max-width: 1000px;
font-weight: 600;
margin: 0px auto;
color:#ffffff;
margin-top: 0px;
margin-bottom:0px;
text-align:center;
}
.message_error strong,
.message_warning strong,
.message_good strong,
.message_normal strong,
.message_grey strong{
text-decoration: underline;
}
.message_good {
background: rgb(46, 204, 113);
}
.message_error {
background: #e74c3c;
}
.message_warning {
background: #f1c40f;
}
.message_normal {
background: rgb(34, 130, 248);
}
.message_grey {
background: rgb(240,240,240);
}
</style>
</head>
<body>
<pagename>PHP Malware Scanner</pagename>
<content>
<p>Welcome to the Malware Scanner, You can find actions below to run and results of the scan. When you run the scan it can take some time as we are checking all scripts on this site.</p>
<?php
if (!isset($_GET['scan'])){
echo "<p style='text-align:center;'><a href='".$scripthome."?scan=true&replace=yes&repair=no'><button style='font-size: 16px;font-weight: 800;'>Run scan and clean</button></a></p>";
echo "<p style='text-align:center;'><a href='".$scripthome."?scan=true&replace=no&repair=no'><button style='font-size: 16px;font-weight: 800;'>Run scan only</button></a></p>";
echo "<p style='text-align:center;'><a href='".$scripthome."?scan=true&replace=no&repair=yes'><button style='font-size: 16px;font-weight: 800;'>Run scan and repair<BR>(JS infects only)</button></a></p>";
echo "<BR><BR>When you run a scan this file will be deleted.";
}else{
echo "<h3>Scan results</h3>";
new phpMalCodeScan;
unlink($scriptpath);
}
?>
</content>
<credits>Project by Anthony Lee on <a href='https://twitter.com/justanthonylee'>Twitter</a>, and <a href='https://github.com/anthonyrossbach'>Github</a>.</credits><warning>Your use of this script is at your sole risk. All code is provided "as -is", without any warranty, whether express or implied, of its accuracy, completeness. Further, I shall not be liable for any damages you may sustain by using this script, whether direct, indirect, special, incidental or consequential.</warning>
</body>
</html>