summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_httpservers.py
blob: b2bce1c27ab5da7310396cde258162aa21563074 (plain)
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
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
"""Unittests for the various HTTPServer modules.

Written by Cody A.W. Somerville <cody-somerville@ubuntu.com>,
Josip Dzolonga, and Michael Otteneder for the 2007/08 GHOP contest.
"""

from http.server import BaseHTTPRequestHandler, HTTPServer, \
     SimpleHTTPRequestHandler, CGIHTTPRequestHandler
from http import server

import os
import sys
import re
import base64
import shutil
import urllib.parse
import http.client
import tempfile
from io import BytesIO

import unittest
from test import support
threading = support.import_module('threading')

class NoLogRequestHandler:
    def log_message(self, *args):
        # don't write log messages to stderr
        pass

    def read(self, n=None):
        return ''


class TestServerThread(threading.Thread):
    def __init__(self, test_object, request_handler):
        threading.Thread.__init__(self)
        self.request_handler = request_handler
        self.test_object = test_object

    def run(self):
        self.server = HTTPServer(('localhost', 0), self.request_handler)
        self.test_object.HOST, self.test_object.PORT = self.server.socket.getsockname()
        self.test_object.server_started.set()
        self.test_object = None
        try:
            self.server.serve_forever(0.05)
        finally:
            self.server.server_close()

    def stop(self):
        self.server.shutdown()


class BaseTestCase(unittest.TestCase):
    def setUp(self):
        self._threads = support.threading_setup()
        os.environ = support.EnvironmentVarGuard()
        self.server_started = threading.Event()
        self.thread = TestServerThread(self, self.request_handler)
        self.thread.start()
        self.server_started.wait()

    def tearDown(self):
        self.thread.stop()
        self.thread = None
        os.environ.__exit__()
        support.threading_cleanup(*self._threads)

    def request(self, uri, method='GET', body=None, headers={}):
        self.connection = http.client.HTTPConnection(self.HOST, self.PORT)
        self.connection.request(method, uri, body, headers)
        return self.connection.getresponse()


class BaseHTTPServerTestCase(BaseTestCase):
    class request_handler(NoLogRequestHandler, BaseHTTPRequestHandler):
        protocol_version = 'HTTP/1.1'
        default_request_version = 'HTTP/1.1'

        def do_TEST(self):
            self.send_response(204)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Connection', 'close')
            self.end_headers()

        def do_KEEP(self):
            self.send_response(204)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Connection', 'keep-alive')
            self.end_headers()

        def do_KEYERROR(self):
            self.send_error(999)

        def do_NOTFOUND(self):
            self.send_error(404)

        def do_EXPLAINERROR(self):
            self.send_error(999, "Short Message",
                            "This is a long \n explaination")

        def do_CUSTOM(self):
            self.send_response(999)
            self.send_header('Content-Type', 'text/html')
            self.send_header('Connection', 'close')
            self.end_headers()

        def do_LATINONEHEADER(self):
            self.send_response(999)
            self.send_header('X-Special', 'Dängerous Mind')
            self.send_header('Connection', 'close')
            self.end_headers()
            body = self.headers['x-special-incoming'].encode('utf-8')
            self.wfile.write(body)

    def setUp(self):
        BaseTestCase.setUp(self)
        self.con = http.client.HTTPConnection(self.HOST, self.PORT)
        self.con.connect()

    def test_command(self):
        self.con.request('GET', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 501)

    def test_request_line_trimming(self):
        self.con._http_vsn_str = 'HTTP/1.1\n'
        self.con.putrequest('GET', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 501)

    def test_version_bogus(self):
        self.con._http_vsn_str = 'FUBAR'
        self.con.putrequest('GET', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 400)

    def test_version_digits(self):
        self.con._http_vsn_str = 'HTTP/9.9.9'
        self.con.putrequest('GET', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 400)

    def test_version_none_get(self):
        self.con._http_vsn_str = ''
        self.con.putrequest('GET', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 501)

    def test_version_none(self):
        self.con._http_vsn_str = ''
        self.con.putrequest('PUT', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 400)

    def test_version_invalid(self):
        self.con._http_vsn = 99
        self.con._http_vsn_str = 'HTTP/9.9'
        self.con.putrequest('GET', '/')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 505)

    def test_send_blank(self):
        self.con._http_vsn_str = ''
        self.con.putrequest('', '')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 400)

    def test_header_close(self):
        self.con.putrequest('GET', '/')
        self.con.putheader('Connection', 'close')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 501)

    def test_head_keep_alive(self):
        self.con._http_vsn_str = 'HTTP/1.1'
        self.con.putrequest('GET', '/')
        self.con.putheader('Connection', 'keep-alive')
        self.con.endheaders()
        res = self.con.getresponse()
        self.assertEqual(res.status, 501)

    def test_handler(self):
        self.con.request('TEST', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 204)

    def test_return_header_keep_alive(self):
        self.con.request('KEEP', '/')
        res = self.con.getresponse()
        self.assertEqual(res.getheader('Connection'), 'keep-alive')
        self.con.request('TEST', '/')
        self.addCleanup(self.con.close)

    def test_internal_key_error(self):
        self.con.request('KEYERROR', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 999)

    def test_return_custom_status(self):
        self.con.request('CUSTOM', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 999)

    def test_return_explain_error(self):
        self.con.request('EXPLAINERROR', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 999)
        self.assertTrue(int(res.getheader('Content-Length')))

    def test_latin1_header(self):
        self.con.request('LATINONEHEADER', '/', headers={
            'X-Special-Incoming':       'Ärger mit Unicode'
        })
        res = self.con.getresponse()
        self.assertEqual(res.getheader('X-Special'), 'Dängerous Mind')
        self.assertEqual(res.read(), 'Ärger mit Unicode'.encode('utf-8'))

    def test_error_content_length(self):
        # Issue #16088: standard error responses should have a content-length
        self.con.request('NOTFOUND', '/')
        res = self.con.getresponse()
        self.assertEqual(res.status, 404)
        data = res.read()
        self.assertEqual(int(res.getheader('Content-Length')), len(data))


class SimpleHTTPServerTestCase(BaseTestCase):
    class request_handler(NoLogRequestHandler, SimpleHTTPRequestHandler):
        pass

    def setUp(self):
        BaseTestCase.setUp(self)
        self.cwd = os.getcwd()
        basetempdir = tempfile.gettempdir()
        os.chdir(basetempdir)
        self.data = b'We are the knights who say Ni!'
        self.tempdir = tempfile.mkdtemp(dir=basetempdir)
        self.tempdir_name = os.path.basename(self.tempdir)
        with open(os.path.join(self.tempdir, 'test'), 'wb') as temp:
            temp.write(self.data)

    def tearDown(self):
        try:
            os.chdir(self.cwd)
            try:
                shutil.rmtree(self.tempdir)
            except:
                pass
        finally:
            BaseTestCase.tearDown(self)

    def check_status_and_reason(self, response, status, data=None):
        body = response.read()
        self.assertTrue(response)
        self.assertEqual(response.status, status)
        self.assertIsNotNone(response.reason)
        if data:
            self.assertEqual(data, body)

    def test_get(self):
        #constructs the path relative to the root directory of the HTTPServer
        response = self.request(self.tempdir_name + '/test')
        self.check_status_and_reason(response, 200, data=self.data)
        # check for trailing "/" which should return 404. See Issue17324
        response = self.request(self.tempdir_name + '/test/')
        self.check_status_and_reason(response, 404)
        response = self.request(self.tempdir_name + '/')
        self.check_status_and_reason(response, 200)
        response = self.request(self.tempdir_name)
        self.check_status_and_reason(response, 301)
        response = self.request('/ThisDoesNotExist')
        self.check_status_and_reason(response, 404)
        response = self.request('/' + 'ThisDoesNotExist' + '/')
        self.check_status_and_reason(response, 404)
        with open(os.path.join(self.tempdir_name, 'index.html'), 'w') as f:
            response = self.request('/' + self.tempdir_name + '/')
            self.check_status_and_reason(response, 200)
            # chmod() doesn't work as expected on Windows, and filesystem
            # permissions are ignored by root on Unix.
            if os.name == 'posix' and os.geteuid() != 0:
                os.chmod(self.tempdir, 0)
                response = self.request(self.tempdir_name + '/')
                self.check_status_and_reason(response, 404)
                os.chmod(self.tempdir, 0o755)

    def test_head(self):
        response = self.request(
            self.tempdir_name + '/test', method='HEAD')
        self.check_status_and_reason(response, 200)
        self.assertEqual(response.getheader('content-length'),
                         str(len(self.data)))
        self.assertEqual(response.getheader('content-type'),
                         'application/octet-stream')

    def test_invalid_requests(self):
        response = self.request('/', method='FOO')
        self.check_status_and_reason(response, 501)
        # requests must be case sensitive,so this should fail too
        response = self.request('/', method='get')
        self.check_status_and_reason(response, 501)
        response = self.request('/', method='GETs')
        self.check_status_and_reason(response, 501)


cgi_file1 = """\
#!%s

print("Content-type: text/html")
print()
print("Hello World")
"""

cgi_file2 = """\
#!%s
import cgi

print("Content-type: text/html")
print()

form = cgi.FieldStorage()
print("%%s, %%s, %%s" %% (form.getfirst("spam"), form.getfirst("eggs"),
                          form.getfirst("bacon")))
"""


@unittest.skipIf(hasattr(os, 'geteuid') and os.geteuid() == 0,
        "This test can't be run reliably as root (issue #13308).")
class CGIHTTPServerTestCase(BaseTestCase):
    class request_handler(NoLogRequestHandler, CGIHTTPRequestHandler):
        pass

    linesep = os.linesep.encode('ascii')

    def setUp(self):
        BaseTestCase.setUp(self)
        self.cwd = os.getcwd()
        self.parent_dir = tempfile.mkdtemp()
        self.cgi_dir = os.path.join(self.parent_dir, 'cgi-bin')
        os.mkdir(self.cgi_dir)
        self.nocgi_path = None
        self.file1_path = None
        self.file2_path = None

        # The shebang line should be pure ASCII: use symlink if possible.
        # See issue #7668.
        if support.can_symlink():
            self.pythonexe = os.path.join(self.parent_dir, 'python')
            os.symlink(sys.executable, self.pythonexe)
        else:
            self.pythonexe = sys.executable

        try:
            # The python executable path is written as the first line of the
            # CGI Python script. The encoding cookie cannot be used, and so the
            # path should be encodable to the default script encoding (utf-8)
            self.pythonexe.encode('utf-8')
        except UnicodeEncodeError:
            self.tearDown()
            self.skipTest("Python executable path is not encodable to utf-8")

        self.nocgi_path = os.path.join(self.parent_dir, 'nocgi.py')
        with open(self.nocgi_path, 'w') as fp:
            fp.write(cgi_file1 % self.pythonexe)
        os.chmod(self.nocgi_path, 0o777)

        self.file1_path = os.path.join(self.cgi_dir, 'file1.py')
        with open(self.file1_path, 'w', encoding='utf-8') as file1:
            file1.write(cgi_file1 % self.pythonexe)
        os.chmod(self.file1_path, 0o777)

        self.file2_path = os.path.join(self.cgi_dir, 'file2.py')
        with open(self.file2_path, 'w', encoding='utf-8') as file2:
            file2.write(cgi_file2 % self.pythonexe)
        os.chmod(self.file2_path, 0o777)

        os.chdir(self.parent_dir)

    def tearDown(self):
        try:
            os.chdir(self.cwd)
            if self.pythonexe != sys.executable:
                os.remove(self.pythonexe)
            if self.nocgi_path:
                os.remove(self.nocgi_path)
            if self.file1_path:
                os.remove(self.file1_path)
            if self.file2_path:
                os.remove(self.file2_path)
            os.rmdir(self.cgi_dir)
            os.rmdir(self.parent_dir)
        finally:
            BaseTestCase.tearDown(self)

    def test_url_collapse_path(self):
        # verify tail is the last portion and head is the rest on proper urls
        test_vectors = {
            '': '//',
            '..': IndexError,
            '/.//..': IndexError,
            '/': '//',
            '//': '//',
            '/\\': '//\\',
            '/.//': '//',
            'cgi-bin/file1.py': '/cgi-bin/file1.py',
            '/cgi-bin/file1.py': '/cgi-bin/file1.py',
            'a': '//a',
            '/a': '//a',
            '//a': '//a',
            './a': '//a',
            './C:/': '/C:/',
            '/a/b': '/a/b',
            '/a/b/': '/a/b/',
            '/a/b/.': '/a/b/',
            '/a/b/c/..': '/a/b/',
            '/a/b/c/../d': '/a/b/d',
            '/a/b/c/../d/e/../f': '/a/b/d/f',
            '/a/b/c/../d/e/../../f': '/a/b/f',
            '/a/b/c/../d/e/.././././..//f': '/a/b/f',
            '../a/b/c/../d/e/.././././..//f': IndexError,
            '/a/b/c/../d/e/../../../f': '/a/f',
            '/a/b/c/../d/e/../../../../f': '//f',
            '/a/b/c/../d/e/../../../../../f': IndexError,
            '/a/b/c/../d/e/../../../../f/..': '//',
            '/a/b/c/../d/e/../../../../f/../.': '//',
        }
        for path, expected in test_vectors.items():
            if isinstance(expected, type) and issubclass(expected, Exception):
                self.assertRaises(expected,
                                  server._url_collapse_path, path)
            else:
                actual = server._url_collapse_path(path)
                self.assertEqual(expected, actual,
                                 msg='path = %r\nGot:    %r\nWanted: %r' %
                                 (path, actual, expected))

    def test_headers_and_content(self):
        res = self.request('/cgi-bin/file1.py')
        self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
            (res.read(), res.getheader('Content-type'), res.status))

    def test_issue19435(self):
        res = self.request('///////////nocgi.py/../cgi-bin/nothere.sh')
        self.assertEqual(res.status, 404)

    def test_post(self):
        params = urllib.parse.urlencode(
            {'spam' : 1, 'eggs' : 'python', 'bacon' : 123456})
        headers = {'Content-type' : 'application/x-www-form-urlencoded'}
        res = self.request('/cgi-bin/file2.py', 'POST', params, headers)

        self.assertEqual(res.read(), b'1, python, 123456' + self.linesep)

    def test_invaliduri(self):
        res = self.request('/cgi-bin/invalid')
        res.read()
        self.assertEqual(res.status, 404)

    def test_authorization(self):
        headers = {b'Authorization' : b'Basic ' +
                   base64.b64encode(b'username:pass')}
        res = self.request('/cgi-bin/file1.py', 'GET', headers=headers)
        self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
                (res.read(), res.getheader('Content-type'), res.status))

    def test_no_leading_slash(self):
        # http://bugs.python.org/issue2254
        res = self.request('cgi-bin/file1.py')
        self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
             (res.read(), res.getheader('Content-type'), res.status))

    def test_os_environ_is_not_altered(self):
        signature = "Test CGI Server"
        os.environ['SERVER_SOFTWARE'] = signature
        res = self.request('/cgi-bin/file1.py')
        self.assertEqual((b'Hello World' + self.linesep, 'text/html', 200),
                (res.read(), res.getheader('Content-type'), res.status))
        self.assertEqual(os.environ['SERVER_SOFTWARE'], signature)


class SocketlessRequestHandler(SimpleHTTPRequestHandler):
    def __init__(self):
        self.get_called = False
        self.protocol_version = "HTTP/1.1"

    def do_GET(self):
        self.get_called = True
        self.send_response(200)
        self.send_header('Content-Type', 'text/html')
        self.end_headers()
        self.wfile.write(b'<html><body>Data</body></html>\r\n')

    def log_message(self, format, *args):
        pass

class RejectingSocketlessRequestHandler(SocketlessRequestHandler):
    def handle_expect_100(self):
        self.send_error(417)
        return False


class AuditableBytesIO:

    def __init__(self):
        self.datas = []

    def write(self, data):
        self.datas.append(data)

    def getData(self):
        return b''.join(self.datas)

    @property
    def numWrites(self):
        return len(self.datas)


class BaseHTTPRequestHandlerTestCase(unittest.TestCase):
    """Test the functionality of the BaseHTTPServer.

       Test the support for the Expect 100-continue header.
       """

    HTTPResponseMatch = re.compile(b'HTTP/1.[0-9]+ 200 OK')

    def setUp (self):
        self.handler = SocketlessRequestHandler()

    def send_typical_request(self, message):
        input = BytesIO(message)
        output = BytesIO()
        self.handler.rfile = input
        self.handler.wfile = output
        self.handler.handle_one_request()
        output.seek(0)
        return output.readlines()

    def verify_get_called(self):
        self.assertTrue(self.handler.get_called)

    def verify_expected_headers(self, headers):
        for fieldName in b'Server: ', b'Date: ', b'Content-Type: ':
            self.assertEqual(sum(h.startswith(fieldName) for h in headers), 1)

    def verify_http_server_response(self, response):
        match = self.HTTPResponseMatch.search(response)
        self.assertTrue(match is not None)

    def test_http_1_1(self):
        result = self.send_typical_request(b'GET / HTTP/1.1\r\n\r\n')
        self.verify_http_server_response(result[0])
        self.verify_expected_headers(result[1:-1])
        self.verify_get_called()
        self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')

    def test_http_1_0(self):
        result = self.send_typical_request(b'GET / HTTP/1.0\r\n\r\n')
        self.verify_http_server_response(result[0])
        self.verify_expected_headers(result[1:-1])
        self.verify_get_called()
        self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')

    def test_http_0_9(self):
        result = self.send_typical_request(b'GET / HTTP/0.9\r\n\r\n')
        self.assertEqual(len(result), 1)
        self.assertEqual(result[0], b'<html><body>Data</body></html>\r\n')
        self.verify_get_called()

    def test_with_continue_1_0(self):
        result = self.send_typical_request(b'GET / HTTP/1.0\r\nExpect: 100-continue\r\n\r\n')
        self.verify_http_server_response(result[0])
        self.verify_expected_headers(result[1:-1])
        self.verify_get_called()
        self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')

    def test_with_continue_1_1(self):
        result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
        self.assertEqual(result[0], b'HTTP/1.1 100 Continue\r\n')
        self.assertEqual(result[1], b'HTTP/1.1 200 OK\r\n')
        self.verify_expected_headers(result[2:-1])
        self.verify_get_called()
        self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')

    def test_header_buffering_of_send_error(self):

        input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
        output = AuditableBytesIO()
        handler = SocketlessRequestHandler()
        handler.rfile = input
        handler.wfile = output
        handler.request_version = 'HTTP/1.1'
        handler.requestline = ''
        handler.command = None

        handler.send_error(418)
        self.assertEqual(output.numWrites, 2)

    def test_header_buffering_of_send_response_only(self):

        input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
        output = AuditableBytesIO()
        handler = SocketlessRequestHandler()
        handler.rfile = input
        handler.wfile = output
        handler.request_version = 'HTTP/1.1'

        handler.send_response_only(418)
        self.assertEqual(output.numWrites, 0)
        handler.end_headers()
        self.assertEqual(output.numWrites, 1)

    def test_header_buffering_of_send_header(self):

        input = BytesIO(b'GET / HTTP/1.1\r\n\r\n')
        output = AuditableBytesIO()
        handler = SocketlessRequestHandler()
        handler.rfile = input
        handler.wfile = output
        handler.request_version = 'HTTP/1.1'

        handler.send_header('Foo', 'foo')
        handler.send_header('bar', 'bar')
        self.assertEqual(output.numWrites, 0)
        handler.end_headers()
        self.assertEqual(output.getData(), b'Foo: foo\r\nbar: bar\r\n\r\n')
        self.assertEqual(output.numWrites, 1)

    def test_header_unbuffered_when_continue(self):

        def _readAndReseek(f):
            pos = f.tell()
            f.seek(0)
            data = f.read()
            f.seek(pos)
            return data

        input = BytesIO(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
        output = BytesIO()
        self.handler.rfile = input
        self.handler.wfile = output
        self.handler.request_version = 'HTTP/1.1'

        self.handler.handle_one_request()
        self.assertNotEqual(_readAndReseek(output), b'')
        result = _readAndReseek(output).split(b'\r\n')
        self.assertEqual(result[0], b'HTTP/1.1 100 Continue')
        self.assertEqual(result[1], b'HTTP/1.1 200 OK')

    def test_with_continue_rejected(self):
        usual_handler = self.handler        # Save to avoid breaking any subsequent tests.
        self.handler = RejectingSocketlessRequestHandler()
        result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
        self.assertEqual(result[0], b'HTTP/1.1 417 Expectation Failed\r\n')
        self.verify_expected_headers(result[1:-1])
        # The expect handler should short circuit the usual get method by
        # returning false here, so get_called should be false
        self.assertFalse(self.handler.get_called)
        self.assertEqual(sum(r == b'Connection: close\r\n' for r in result[1:-1]), 1)
        self.handler = usual_handler        # Restore to avoid breaking any subsequent tests.

    def test_request_length(self):
        # Issue #10714: huge request lines are discarded, to avoid Denial
        # of Service attacks.
        result = self.send_typical_request(b'GET ' + b'x' * 65537)
        self.assertEqual(result[0], b'HTTP/1.1 414 Request-URI Too Long\r\n')
        self.assertFalse(self.handler.get_called)

    def test_header_length(self):
        # Issue #6791: same for headers
        result = self.send_typical_request(
            b'GET / HTTP/1.1\r\nX-Foo: bar' + b'r' * 65537 + b'\r\n\r\n')
        self.assertEqual(result[0], b'HTTP/1.1 400 Line too long\r\n')
        self.assertFalse(self.handler.get_called)

class SimpleHTTPRequestHandlerTestCase(unittest.TestCase):
    """ Test url parsing """
    def setUp(self):
        self.translated = os.getcwd()
        self.translated = os.path.join(self.translated, 'filename')
        self.handler = SocketlessRequestHandler()

    def test_query_arguments(self):
        path = self.handler.translate_path('/filename')
        self.assertEqual(path, self.translated)
        path = self.handler.translate_path('/filename?foo=bar')
        self.assertEqual(path, self.translated)
        path = self.handler.translate_path('/filename?a=b&spam=eggs#zot')
        self.assertEqual(path, self.translated)

    def test_start_with_double_slash(self):
        path = self.handler.translate_path('//filename')
        self.assertEqual(path, self.translated)
        path = self.handler.translate_path('//filename?foo=bar')
        self.assertEqual(path, self.translated)


def test_main(verbose=None):
    cwd = os.getcwd()
    try:
        support.run_unittest(
            BaseHTTPRequestHandlerTestCase,
            BaseHTTPServerTestCase,
            SimpleHTTPServerTestCase,
            CGIHTTPServerTestCase,
            SimpleHTTPRequestHandlerTestCase,
        )
    finally:
        os.chdir(cwd)

if __name__ == '__main__':
    test_main()
n class="hl num">110, 115,105,100,101,32,116,104,101,32,97,114,99,104,105,118,101, 46,10,10,32,32,32,32,39,90,105,112,73,109,112,111,114, 116,69,114,114,111,114,32,105,115,32,114,97,105,115,101,100, 32,105,102,32,39,97,114,99,104,105,118,101,112,97,116,104, 39,32,100,111,101,115,110,39,116,32,112,111,105,110,116,32, 116,111,32,97,32,118,97,108,105,100,32,90,105,112,10,32, 32,32,32,97,114,99,104,105,118,101,46,10,10,32,32,32, 32,84,104,101,32,39,97,114,99,104,105,118,101,39,32,97, 116,116,114,105,98,117,116,101,32,111,102,32,122,105,112,105, 109,112,111,114,116,101,114,32,111,98,106,101,99,116,115,32, 99,111,110,116,97,105,110,115,32,116,104,101,32,110,97,109, 101,32,111,102,32,116,104,101,10,32,32,32,32,122,105,112, 102,105,108,101,32,116,97,114,103,101,116,101,100,46,10,32, 32,32,32,99,2,0,0,0,0,0,0,0,0,0,0,0, 8,0,0,0,9,0,0,0,67,0,0,0,115,36,1,0, 0,116,0,124,1,116,1,131,2,115,14,100,1,100,0,108, 2,125,2,124,2,160,3,124,1,161,1,125,1,124,1,115, 22,116,4,100,2,124,1,100,3,141,2,130,1,116,5,114, 30,124,1,160,6,116,5,116,7,161,2,125,1,103,0,125, 3,9,0,122,7,116,8,160,9,124,1,161,1,125,4,87, 0,110,35,4,0,116,10,116,11,102,2,121,75,1,0,1, 0,1,0,116,8,160,12,124,1,161,1,92,2,125,5,125, 6,124,5,124,1,107,2,114,66,116,4,100,5,124,1,100, 3,141,2,130,1,124,5,125,1,124,3,160,13,124,6,161, 1,1,0,89,0,110,15,119,0,124,4,106,14,100,6,64, 0,100,7,107,3,114,89,116,4,100,5,124,1,100,3,141, 2,130,1,113,91,113,33,122,6,116,15,124,1,25,0,125, 7,87,0,110,17,4,0,116,16,121,114,1,0,1,0,1, 0,116,17,124,1,131,1,125,7,124,7,116,15,124,1,60, 0,89,0,110,1,119,0,124,7,124,0,95,18,124,1,124, 0,95,19,116,8,106,20,124,3,100,0,100,0,100,8,133, 3,25,0,142,0,124,0,95,21,124,0,106,21,114,144,124, 0,4,0,106,21,116,7,55,0,2,0,95,21,100,0,83, 0,100,0,83,0,41,9,78,114,0,0,0,0,122,21,97, 114,99,104,105,118,101,32,112,97,116,104,32,105,115,32,101, 109,112,116,121,169,1,218,4,112,97,116,104,84,122,14,110, 111,116,32,97,32,90,105,112,32,102,105,108,101,105,0,240, 0,0,105,0,128,0,0,233,255,255,255,255,41,22,218,10, 105,115,105,110,115,116,97,110,99,101,218,3,115,116,114,218, 2,111,115,90,8,102,115,100,101,99,111,100,101,114,3,0, 0,0,218,12,97,108,116,95,112,97,116,104,95,115,101,112, 218,7,114,101,112,108,97,99,101,218,8,112,97,116,104,95, 115,101,112,218,19,95,98,111,111,116,115,116,114,97,112,95, 101,120,116,101,114,110,97,108,90,10,95,112,97,116,104,95, 115,116,97,116,218,7,79,83,69,114,114,111,114,218,10,86, 97,108,117,101,69,114,114,111,114,90,11,95,112,97,116,104, 95,115,112,108,105,116,218,6,97,112,112,101,110,100,90,7, 115,116,95,109,111,100,101,218,20,95,122,105,112,95,100,105, 114,101,99,116,111,114,121,95,99,97,99,104,101,218,8,75, 101,121,69,114,114,111,114,218,15,95,114,101,97,100,95,100, 105,114,101,99,116,111,114,121,218,6,95,102,105,108,101,115, 218,7,97,114,99,104,105,118,101,218,10,95,112,97,116,104, 95,106,111,105,110,218,6,112,114,101,102,105,120,41,8,218, 4,115,101,108,102,114,13,0,0,0,114,17,0,0,0,114, 31,0,0,0,90,2,115,116,90,7,100,105,114,110,97,109, 101,90,8,98,97,115,101,110,97,109,101,218,5,102,105,108, 101,115,114,9,0,0,0,114,9,0,0,0,114,10,0,0, 0,218,8,95,95,105,110,105,116,95,95,64,0,0,0,115, 68,0,0,0,10,1,8,1,10,1,4,1,12,1,4,1, 12,1,4,2,2,1,2,1,14,1,16,1,14,3,8,1, 12,1,4,1,14,1,2,249,14,10,12,2,2,1,2,240, 2,18,12,1,12,1,8,1,12,1,2,254,6,3,6,1, 22,2,6,1,18,1,4,255,122,20,122,105,112,105,109,112, 111,114,116,101,114,46,95,95,105,110,105,116,95,95,78,99, 3,0,0,0,0,0,0,0,0,0,0,0,5,0,0,0, 4,0,0,0,67,0,0,0,115,90,0,0,0,116,0,160, 1,100,1,116,2,161,2,1,0,116,3,124,0,124,1,131, 2,125,3,124,3,100,2,117,1,114,19,124,0,103,0,102, 2,83,0,116,4,124,0,124,1,131,2,125,4,116,5,124, 0,124,4,131,2,114,41,100,2,124,0,106,6,155,0,116, 7,155,0,124,4,155,0,157,3,103,1,102,2,83,0,100, 2,103,0,102,2,83,0,41,3,97,47,2,0,0,102,105, 110,100,95,108,111,97,100,101,114,40,102,117,108,108,110,97, 109,101,44,32,112,97,116,104,61,78,111,110,101,41,32,45, 62,32,115,101,108,102,44,32,115,116,114,32,111,114,32,78, 111,110,101,46,10,10,32,32,32,32,32,32,32,32,83,101, 97,114,99,104,32,102,111,114,32,97,32,109,111,100,117,108, 101,32,115,112,101,99,105,102,105,101,100,32,98,121,32,39, 102,117,108,108,110,97,109,101,39,46,32,39,102,117,108,108, 110,97,109,101,39,32,109,117,115,116,32,98,101,32,116,104, 101,10,32,32,32,32,32,32,32,32,102,117,108,108,121,32, 113,117,97,108,105,102,105,101,100,32,40,100,111,116,116,101, 100,41,32,109,111,100,117,108,101,32,110,97,109,101,46,32, 73,116,32,114,101,116,117,114,110,115,32,116,104,101,32,122, 105,112,105,109,112,111,114,116,101,114,10,32,32,32,32,32, 32,32,32,105,110,115,116,97,110,99,101,32,105,116,115,101, 108,102,32,105,102,32,116,104,101,32,109,111,100,117,108,101, 32,119,97,115,32,102,111,117,110,100,44,32,97,32,115,116, 114,105,110,103,32,99,111,110,116,97,105,110,105,110,103,32, 116,104,101,10,32,32,32,32,32,32,32,32,102,117,108,108, 32,112,97,116,104,32,110,97,109,101,32,105,102,32,105,116, 39,115,32,112,111,115,115,105,98,108,121,32,97,32,112,111, 114,116,105,111,110,32,111,102,32,97,32,110,97,109,101,115, 112,97,99,101,32,112,97,99,107,97,103,101,44,10,32,32, 32,32,32,32,32,32,111,114,32,78,111,110,101,32,111,116, 104,101,114,119,105,115,101,46,32,84,104,101,32,111,112,116, 105,111,110,97,108,32,39,112,97,116,104,39,32,97,114,103, 117,109,101,110,116,32,105,115,32,105,103,110,111,114,101,100, 32,45,45,32,105,116,39,115,10,32,32,32,32,32,32,32, 32,116,104,101,114,101,32,102,111,114,32,99,111,109,112,97, 116,105,98,105,108,105,116,121,32,119,105,116,104,32,116,104, 101,32,105,109,112,111,114,116,101,114,32,112,114,111,116,111, 99,111,108,46,10,10,32,32,32,32,32,32,32,32,68,101, 112,114,101,99,97,116,101,100,32,115,105,110,99,101,32,80, 121,116,104,111,110,32,51,46,49,48,46,32,85,115,101,32, 102,105,110,100,95,115,112,101,99,40,41,32,105,110,115,116, 101,97,100,46,10,32,32,32,32,32,32,32,32,122,102,122, 105,112,105,109,112,111,114,116,101,114,46,102,105,110,100,95, 108,111,97,100,101,114,40,41,32,105,115,32,100,101,112,114, 101,99,97,116,101,100,32,97,110,100,32,115,108,97,116,101, 100,32,102,111,114,32,114,101,109,111,118,97,108,32,105,110, 32,80,121,116,104,111,110,32,51,46,49,50,59,32,117,115, 101,32,102,105,110,100,95,115,112,101,99,40,41,32,105,110, 115,116,101,97,100,78,41,8,218,9,95,119,97,114,110,105, 110,103,115,218,4,119,97,114,110,218,18,68,101,112,114,101, 99,97,116,105,111,110,87,97,114,110,105,110,103,218,16,95, 103,101,116,95,109,111,100,117,108,101,95,105,110,102,111,218, 16,95,103,101,116,95,109,111,100,117,108,101,95,112,97,116, 104,218,7,95,105,115,95,100,105,114,114,29,0,0,0,114, 20,0,0,0,41,5,114,32,0,0,0,218,8,102,117,108, 108,110,97,109,101,114,13,0,0,0,218,2,109,105,218,7, 109,111,100,112,97,116,104,114,9,0,0,0,114,9,0,0, 0,114,10,0,0,0,218,11,102,105,110,100,95,108,111,97, 100,101,114,110,0,0,0,115,20,0,0,0,6,12,2,2, 4,254,10,3,8,1,8,2,10,7,10,1,24,4,8,2, 122,23,122,105,112,105,109,112,111,114,116,101,114,46,102,105, 110,100,95,108,111,97,100,101,114,99,3,0,0,0,0,0, 0,0,0,0,0,0,3,0,0,0,4,0,0,0,67,0, 0,0,115,28,0,0,0,116,0,160,1,100,1,116,2,161, 2,1,0,124,0,160,3,124,1,124,2,161,2,100,2,25, 0,83,0,41,3,97,203,1,0,0,102,105,110,100,95,109, 111,100,117,108,101,40,102,117,108,108,110,97,109,101,44,32, 112,97,116,104,61,78,111,110,101,41,32,45,62,32,115,101, 108,102,32,111,114,32,78,111,110,101,46,10,10,32,32,32, 32,32,32,32,32,83,101,97,114,99,104,32,102,111,114,32, 97,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105, 101,100,32,98,121,32,39,102,117,108,108,110,97,109,101,39, 46,32,39,102,117,108,108,110,97,109,101,39,32,109,117,115, 116,32,98,101,32,116,104,101,10,32,32,32,32,32,32,32, 32,102,117,108,108,121,32,113,117,97,108,105,102,105,101,100, 32,40,100,111,116,116,101,100,41,32,109,111,100,117,108,101, 32,110,97,109,101,46,32,73,116,32,114,101,116,117,114,110, 115,32,116,104,101,32,122,105,112,105,109,112,111,114,116,101, 114,10,32,32,32,32,32,32,32,32,105,110,115,116,97,110, 99,101,32,105,116,115,101,108,102,32,105,102,32,116,104,101, 32,109,111,100,117,108,101,32,119,97,115,32,102,111,117,110, 100,44,32,111,114,32,78,111,110,101,32,105,102,32,105,116, 32,119,97,115,110,39,116,46,10,32,32,32,32,32,32,32, 32,84,104,101,32,111,112,116,105,111,110,97,108,32,39,112, 97,116,104,39,32,97,114,103,117,109,101,110,116,32,105,115, 32,105,103,110,111,114,101,100,32,45,45,32,105,116,39,115, 32,116,104,101,114,101,32,102,111,114,32,99,111,109,112,97, 116,105,98,105,108,105,116,121,10,32,32,32,32,32,32,32, 32,119,105,116,104,32,116,104,101,32,105,109,112,111,114,116, 101,114,32,112,114,111,116,111,99,111,108,46,10,10,32,32, 32,32,32,32,32,32,68,101,112,114,101,99,97,116,101,100, 32,115,105,110,99,101,32,80,121,116,104,111,110,32,51,46, 49,48,46,32,85,115,101,32,102,105,110,100,95,115,112,101, 99,40,41,32,105,110,115,116,101,97,100,46,10,32,32,32, 32,32,32,32,32,122,102,122,105,112,105,109,112,111,114,116, 101,114,46,102,105,110,100,95,109,111,100,117,108,101,40,41, 32,105,115,32,100,101,112,114,101,99,97,116,101,100,32,97, 110,100,32,115,108,97,116,101,100,32,102,111,114,32,114,101, 109,111,118,97,108,32,105,110,32,80,121,116,104,111,110,32, 51,46,49,50,59,32,117,115,101,32,102,105,110,100,95,115, 112,101,99,40,41,32,105,110,115,116,101,97,100,114,0,0, 0,0,41,4,114,35,0,0,0,114,36,0,0,0,114,37, 0,0,0,114,44,0,0,0,41,3,114,32,0,0,0,114, 41,0,0,0,114,13,0,0,0,114,9,0,0,0,114,9, 0,0,0,114,10,0,0,0,218,11,102,105,110,100,95,109, 111,100,117,108,101,147,0,0,0,115,8,0,0,0,6,11, 2,2,4,254,16,3,122,23,122,105,112,105,109,112,111,114, 116,101,114,46,102,105,110,100,95,109,111,100,117,108,101,99, 3,0,0,0,0,0,0,0,0,0,0,0,7,0,0,0, 5,0,0,0,67,0,0,0,115,108,0,0,0,116,0,124, 0,124,1,131,2,125,3,124,3,100,1,117,1,114,17,116, 1,106,2,124,1,124,0,124,3,100,2,141,3,83,0,116, 3,124,0,124,1,131,2,125,4,116,4,124,0,124,4,131, 2,114,52,124,0,106,5,155,0,116,6,155,0,124,4,155, 0,157,3,125,5,116,1,106,7,124,1,100,1,100,3,100, 4,141,3,125,6,124,6,106,8,160,9,124,5,161,1,1, 0,124,6,83,0,100,1,83,0,41,5,122,107,67,114,101, 97,116,101,32,97,32,77,111,100,117,108,101,83,112,101,99, 32,102,111,114,32,116,104,101,32,115,112,101,99,105,102,105, 101,100,32,109,111,100,117,108,101,46,10,10,32,32,32,32, 32,32,32,32,82,101,116,117,114,110,115,32,78,111,110,101, 32,105,102,32,116,104,101,32,109,111,100,117,108,101,32,99, 97,110,110,111,116,32,98,101,32,102,111,117,110,100,46,10, 32,32,32,32,32,32,32,32,78,41,1,218,10,105,115,95, 112,97,99,107,97,103,101,84,41,3,218,4,110,97,109,101, 90,6,108,111,97,100,101,114,114,46,0,0,0,41,10,114, 38,0,0,0,218,10,95,98,111,111,116,115,116,114,97,112, 90,16,115,112,101,99,95,102,114,111,109,95,108,111,97,100, 101,114,114,39,0,0,0,114,40,0,0,0,114,29,0,0, 0,114,20,0,0,0,90,10,77,111,100,117,108,101,83,112, 101,99,90,26,115,117,98,109,111,100,117,108,101,95,115,101, 97,114,99,104,95,108,111,99,97,116,105,111,110,115,114,24, 0,0,0,41,7,114,32,0,0,0,114,41,0,0,0,90, 6,116,97,114,103,101,116,90,11,109,111,100,117,108,101,95, 105,110,102,111,114,43,0,0,0,114,13,0,0,0,90,4, 115,112,101,99,114,9,0,0,0,114,9,0,0,0,114,10, 0,0,0,218,9,102,105,110,100,95,115,112,101,99,163,0, 0,0,115,24,0,0,0,10,5,8,1,16,1,10,7,10, 1,18,4,8,1,2,1,6,255,12,2,4,1,4,2,122, 21,122,105,112,105,109,112,111,114,116,101,114,46,102,105,110, 100,95,115,112,101,99,99,2,0,0,0,0,0,0,0,0, 0,0,0,5,0,0,0,3,0,0,0,67,0,0,0,115, 20,0,0,0,116,0,124,0,124,1,131,2,92,3,125,2, 125,3,125,4,124,2,83,0,41,1,122,166,103,101,116,95, 99,111,100,101,40,102,117,108,108,110,97,109,101,41,32,45, 62,32,99,111,100,101,32,111,98,106,101,99,116,46,10,10, 32,32,32,32,32,32,32,32,82,101,116,117,114,110,32,116, 104,101,32,99,111,100,101,32,111,98,106,101,99,116,32,102, 111,114,32,116,104,101,32,115,112,101,99,105,102,105,101,100, 32,109,111,100,117,108,101,46,32,82,97,105,115,101,32,90, 105,112,73,109,112,111,114,116,69,114,114,111,114,10,32,32, 32,32,32,32,32,32,105,102,32,116,104,101,32,109,111,100, 117,108,101,32,99,111,117,108,100,110,39,116,32,98,101,32, 105,109,112,111,114,116,101,100,46,10,32,32,32,32,32,32, 32,32,169,1,218,16,95,103,101,116,95,109,111,100,117,108, 101,95,99,111,100,101,169,5,114,32,0,0,0,114,41,0, 0,0,218,4,99,111,100,101,218,9,105,115,112,97,99,107, 97,103,101,114,43,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,8,103,101,116,95,99,111,100, 101,190,0,0,0,115,4,0,0,0,16,6,4,1,122,20, 122,105,112,105,109,112,111,114,116,101,114,46,103,101,116,95, 99,111,100,101,99,2,0,0,0,0,0,0,0,0,0,0, 0,4,0,0,0,8,0,0,0,67,0,0,0,115,112,0, 0,0,116,0,114,8,124,1,160,1,116,0,116,2,161,2, 125,1,124,1,125,2,124,1,160,3,124,0,106,4,116,2, 23,0,161,1,114,29,124,1,116,5,124,0,106,4,116,2, 23,0,131,1,100,1,133,2,25,0,125,2,122,7,124,0, 106,6,124,2,25,0,125,3,87,0,110,13,4,0,116,7, 121,49,1,0,1,0,1,0,116,8,100,2,100,3,124,2, 131,3,130,1,119,0,116,9,124,0,106,4,124,3,131,2, 83,0,41,4,122,154,103,101,116,95,100,97,116,97,40,112, 97,116,104,110,97,109,101,41,32,45,62,32,115,116,114,105, 110,103,32,119,105,116,104,32,102,105,108,101,32,100,97,116, 97,46,10,10,32,32,32,32,32,32,32,32,82,101,116,117, 114,110,32,116,104,101,32,100,97,116,97,32,97,115,115,111, 99,105,97,116,101,100,32,119,105,116,104,32,39,112,97,116, 104,110,97,109,101,39,46,32,82,97,105,115,101,32,79,83, 69,114,114,111,114,32,105,102,10,32,32,32,32,32,32,32, 32,116,104,101,32,102,105,108,101,32,119,97,115,110,39,116, 32,102,111,117,110,100,46,10,32,32,32,32,32,32,32,32, 78,114,0,0,0,0,218,0,41,10,114,18,0,0,0,114, 19,0,0,0,114,20,0,0,0,218,10,115,116,97,114,116, 115,119,105,116,104,114,29,0,0,0,218,3,108,101,110,114, 28,0,0,0,114,26,0,0,0,114,22,0,0,0,218,9, 95,103,101,116,95,100,97,116,97,41,4,114,32,0,0,0, 218,8,112,97,116,104,110,97,109,101,90,3,107,101,121,218, 9,116,111,99,95,101,110,116,114,121,114,9,0,0,0,114, 9,0,0,0,114,10,0,0,0,218,8,103,101,116,95,100, 97,116,97,200,0,0,0,115,22,0,0,0,4,6,12,1, 4,2,16,1,22,1,2,2,14,1,12,1,12,1,2,255, 12,2,122,20,122,105,112,105,109,112,111,114,116,101,114,46, 103,101,116,95,100,97,116,97,99,2,0,0,0,0,0,0, 0,0,0,0,0,5,0,0,0,3,0,0,0,67,0,0, 0,115,20,0,0,0,116,0,124,0,124,1,131,2,92,3, 125,2,125,3,125,4,124,4,83,0,41,1,122,165,103,101, 116,95,102,105,108,101,110,97,109,101,40,102,117,108,108,110, 97,109,101,41,32,45,62,32,102,105,108,101,110,97,109,101, 32,115,116,114,105,110,103,46,10,10,32,32,32,32,32,32, 32,32,82,101,116,117,114,110,32,116,104,101,32,102,105,108, 101,110,97,109,101,32,102,111,114,32,116,104,101,32,115,112, 101,99,105,102,105,101,100,32,109,111,100,117,108,101,32,111, 114,32,114,97,105,115,101,32,90,105,112,73,109,112,111,114, 116,69,114,114,111,114,10,32,32,32,32,32,32,32,32,105, 102,32,105,116,32,99,111,117,108,100,110,39,116,32,98,101, 32,105,109,112,111,114,116,101,100,46,10,32,32,32,32,32, 32,32,32,114,50,0,0,0,114,52,0,0,0,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,218,12,103,101, 116,95,102,105,108,101,110,97,109,101,221,0,0,0,115,4, 0,0,0,16,8,4,1,122,24,122,105,112,105,109,112,111, 114,116,101,114,46,103,101,116,95,102,105,108,101,110,97,109, 101,99,2,0,0,0,0,0,0,0,0,0,0,0,6,0, 0,0,8,0,0,0,67,0,0,0,115,126,0,0,0,116, 0,124,0,124,1,131,2,125,2,124,2,100,1,117,0,114, 18,116,1,100,2,124,1,155,2,157,2,124,1,100,3,141, 2,130,1,116,2,124,0,124,1,131,2,125,3,124,2,114, 32,116,3,160,4,124,3,100,4,161,2,125,4,110,5,124, 3,155,0,100,5,157,2,125,4,122,7,124,0,106,5,124, 4,25,0,125,5,87,0,110,10,4,0,116,6,121,54,1, 0,1,0,1,0,89,0,100,1,83,0,119,0,116,7,124, 0,106,8,124,5,131,2,160,9,161,0,83,0,41,6,122, 253,103,101,116,95,115,111,117,114,99,101,40,102,117,108,108, 110,97,109,101,41,32,45,62,32,115,111,117,114,99,101,32, 115,116,114,105,110,103,46,10,10,32,32,32,32,32,32,32, 32,82,101,116,117,114,110,32,116,104,101,32,115,111,117,114, 99,101,32,99,111,100,101,32,102,111,114,32,116,104,101,32, 115,112,101,99,105,102,105,101,100,32,109,111,100,117,108,101, 46,32,82,97,105,115,101,32,90,105,112,73,109,112,111,114, 116,69,114,114,111,114,10,32,32,32,32,32,32,32,32,105, 102,32,116,104,101,32,109,111,100,117,108,101,32,99,111,117, 108,100,110,39,116,32,98,101,32,102,111,117,110,100,44,32, 114,101,116,117,114,110,32,78,111,110,101,32,105,102,32,116, 104,101,32,97,114,99,104,105,118,101,32,100,111,101,115,10, 32,32,32,32,32,32,32,32,99,111,110,116,97,105,110,32, 116,104,101,32,109,111,100,117,108,101,44,32,98,117,116,32, 104,97,115,32,110,111,32,115,111,117,114,99,101,32,102,111, 114,32,105,116,46,10,32,32,32,32,32,32,32,32,78,250, 18,99,97,110,39,116,32,102,105,110,100,32,109,111,100,117, 108,101,32,169,1,114,47,0,0,0,250,11,95,95,105,110, 105,116,95,95,46,112,121,250,3,46,112,121,41,10,114,38, 0,0,0,114,3,0,0,0,114,39,0,0,0,114,21,0, 0,0,114,30,0,0,0,114,28,0,0,0,114,26,0,0, 0,114,59,0,0,0,114,29,0,0,0,218,6,100,101,99, 111,100,101,41,6,114,32,0,0,0,114,41,0,0,0,114, 42,0,0,0,114,13,0,0,0,218,8,102,117,108,108,112, 97,116,104,114,61,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,10,103,101,116,95,115,111,117, 114,99,101,233,0,0,0,115,26,0,0,0,10,7,8,1, 18,1,10,2,4,1,14,1,10,2,2,2,14,1,12,1, 6,2,2,254,16,3,122,22,122,105,112,105,109,112,111,114, 116,101,114,46,103,101,116,95,115,111,117,114,99,101,99,2, 0,0,0,0,0,0,0,0,0,0,0,3,0,0,0,4, 0,0,0,67,0,0,0,115,40,0,0,0,116,0,124,0, 124,1,131,2,125,2,124,2,100,1,117,0,114,18,116,1, 100,2,124,1,155,2,157,2,124,1,100,3,141,2,130,1, 124,2,83,0,41,4,122,171,105,115,95,112,97,99,107,97, 103,101,40,102,117,108,108,110,97,109,101,41,32,45,62,32, 98,111,111,108,46,10,10,32,32,32,32,32,32,32,32,82, 101,116,117,114,110,32,84,114,117,101,32,105,102,32,116,104, 101,32,109,111,100,117,108,101,32,115,112,101,99,105,102,105, 101,100,32,98,121,32,102,117,108,108,110,97,109,101,32,105, 115,32,97,32,112,97,99,107,97,103,101,46,10,32,32,32, 32,32,32,32,32,82,97,105,115,101,32,90,105,112,73,109, 112,111,114,116,69,114,114,111,114,32,105,102,32,116,104,101, 32,109,111,100,117,108,101,32,99,111,117,108,100,110,39,116, 32,98,101,32,102,111,117,110,100,46,10,32,32,32,32,32, 32,32,32,78,114,64,0,0,0,114,65,0,0,0,41,2, 114,38,0,0,0,114,3,0,0,0,41,3,114,32,0,0, 0,114,41,0,0,0,114,42,0,0,0,114,9,0,0,0, 114,9,0,0,0,114,10,0,0,0,114,46,0,0,0,3, 1,0,0,115,8,0,0,0,10,6,8,1,18,1,4,1, 122,22,122,105,112,105,109,112,111,114,116,101,114,46,105,115, 95,112,97,99,107,97,103,101,99,2,0,0,0,0,0,0, 0,0,0,0,0,9,0,0,0,8,0,0,0,67,0,0, 0,115,252,0,0,0,100,1,125,2,116,0,160,1,124,2, 116,2,161,2,1,0,116,3,124,0,124,1,131,2,92,3, 125,3,125,4,125,5,116,4,106,5,160,6,124,1,161,1, 125,6,124,6,100,2,117,0,115,31,116,7,124,6,116,8, 131,2,115,40,116,8,124,1,131,1,125,6,124,6,116,4, 106,5,124,1,60,0,124,0,124,6,95,9,122,42,124,4, 114,62,116,10,124,0,124,1,131,2,125,7,116,11,160,12, 124,0,106,13,124,7,161,2,125,8,124,8,103,1,124,6, 95,14,116,15,124,6,100,3,131,2,115,70,116,16,124,6, 95,16,116,11,160,17,124,6,106,18,124,1,124,5,161,3, 1,0,116,19,124,3,124,6,106,18,131,2,1,0,87,0, 110,8,1,0,1,0,1,0,116,4,106,5,124,1,61,0, 130,0,122,7,116,4,106,5,124,1,25,0,125,6,87,0, 110,15,4,0,116,20,121,116,1,0,1,0,1,0,116,21, 100,4,124,1,155,2,100,5,157,3,131,1,130,1,119,0, 116,22,160,23,100,6,124,1,124,5,161,3,1,0,124,6, 83,0,41,7,97,64,1,0,0,108,111,97,100,95,109,111, 100,117,108,101,40,102,117,108,108,110,97,109,101,41,32,45, 62,32,109,111,100,117,108,101,46,10,10,32,32,32,32,32, 32,32,32,76,111,97,100,32,116,104,101,32,109,111,100,117, 108,101,32,115,112,101,99,105,102,105,101,100,32,98,121,32, 39,102,117,108,108,110,97,109,101,39,46,32,39,102,117,108, 108,110,97,109,101,39,32,109,117,115,116,32,98,101,32,116, 104,101,10,32,32,32,32,32,32,32,32,102,117,108,108,121, 32,113,117,97,108,105,102,105,101,100,32,40,100,111,116,116, 101,100,41,32,109,111,100,117,108,101,32,110,97,109,101,46, 32,73,116,32,114,101,116,117,114,110,115,32,116,104,101,32, 105,109,112,111,114,116,101,100,10,32,32,32,32,32,32,32, 32,109,111,100,117,108,101,44,32,111,114,32,114,97,105,115, 101,115,32,90,105,112,73,109,112,111,114,116,69,114,114,111, 114,32,105,102,32,105,116,32,99,111,117,108,100,32,110,111, 116,32,98,101,32,105,109,112,111,114,116,101,100,46,10,10, 32,32,32,32,32,32,32,32,68,101,112,114,101,99,97,116, 101,100,32,115,105,110,99,101,32,80,121,116,104,111,110,32, 51,46,49,48,46,32,85,115,101,32,101,120,101,99,95,109, 111,100,117,108,101,40,41,32,105,110,115,116,101,97,100,46, 10,32,32,32,32,32,32,32,32,122,114,122,105,112,105,109, 112,111,114,116,46,122,105,112,105,109,112,111,114,116,101,114, 46,108,111,97,100,95,109,111,100,117,108,101,40,41,32,105, 115,32,100,101,112,114,101,99,97,116,101,100,32,97,110,100, 32,115,108,97,116,101,100,32,102,111,114,32,114,101,109,111, 118,97,108,32,105,110,32,80,121,116,104,111,110,32,51,46, 49,50,59,32,117,115,101,32,101,120,101,99,95,109,111,100, 117,108,101,40,41,32,105,110,115,116,101,97,100,78,218,12, 95,95,98,117,105,108,116,105,110,115,95,95,122,14,76,111, 97,100,101,100,32,109,111,100,117,108,101,32,122,25,32,110, 111,116,32,102,111,117,110,100,32,105,110,32,115,121,115,46, 109,111,100,117,108,101,115,122,30,105,109,112,111,114,116,32, 123,125,32,35,32,108,111,97,100,101,100,32,102,114,111,109, 32,90,105,112,32,123,125,41,24,114,35,0,0,0,114,36, 0,0,0,114,37,0,0,0,114,51,0,0,0,218,3,115, 121,115,218,7,109,111,100,117,108,101,115,218,3,103,101,116, 114,15,0,0,0,218,12,95,109,111,100,117,108,101,95,116, 121,112,101,218,10,95,95,108,111,97,100,101,114,95,95,114, 39,0,0,0,114,21,0,0,0,114,30,0,0,0,114,29, 0,0,0,90,8,95,95,112,97,116,104,95,95,218,7,104, 97,115,97,116,116,114,114,71,0,0,0,90,14,95,102,105, 120,95,117,112,95,109,111,100,117,108,101,218,8,95,95,100, 105,99,116,95,95,218,4,101,120,101,99,114,26,0,0,0, 218,11,73,109,112,111,114,116,69,114,114,111,114,114,48,0, 0,0,218,16,95,118,101,114,98,111,115,101,95,109,101,115, 115,97,103,101,41,9,114,32,0,0,0,114,41,0,0,0, 218,3,109,115,103,114,53,0,0,0,114,54,0,0,0,114, 43,0,0,0,90,3,109,111,100,114,13,0,0,0,114,69, 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, 0,0,218,11,108,111,97,100,95,109,111,100,117,108,101,16, 1,0,0,115,54,0,0,0,4,9,12,2,16,1,12,1, 18,1,8,1,10,1,6,1,2,2,4,1,10,3,14,1, 8,1,10,2,6,1,16,1,16,1,6,1,8,1,2,1, 2,2,14,1,12,1,16,1,2,255,14,2,4,1,122,23, 122,105,112,105,109,112,111,114,116,101,114,46,108,111,97,100, 95,109,111,100,117,108,101,99,2,0,0,0,0,0,0,0, 0,0,0,0,3,0,0,0,8,0,0,0,67,0,0,0, 115,64,0,0,0,122,10,124,0,160,0,124,1,161,1,115, 9,87,0,100,1,83,0,87,0,110,10,4,0,116,1,121, 20,1,0,1,0,1,0,89,0,100,1,83,0,119,0,100, 2,100,3,108,2,109,3,125,2,1,0,124,2,124,0,124, 1,131,2,83,0,41,4,122,204,82,101,116,117,114,110,32, 116,104,101,32,82,101,115,111,117,114,99,101,82,101,97,100, 101,114,32,102,111,114,32,97,32,112,97,99,107,97,103,101, 32,105,110,32,97,32,122,105,112,32,102,105,108,101,46,10, 10,32,32,32,32,32,32,32,32,73,102,32,39,102,117,108, 108,110,97,109,101,39,32,105,115,32,97,32,112,97,99,107, 97,103,101,32,119,105,116,104,105,110,32,116,104,101,32,122, 105,112,32,102,105,108,101,44,32,114,101,116,117,114,110,32, 116,104,101,10,32,32,32,32,32,32,32,32,39,82,101,115, 111,117,114,99,101,82,101,97,100,101,114,39,32,111,98,106, 101,99,116,32,102,111,114,32,116,104,101,32,112,97,99,107, 97,103,101,46,32,32,79,116,104,101,114,119,105,115,101,32, 114,101,116,117,114,110,32,78,111,110,101,46,10,32,32,32, 32,32,32,32,32,78,114,0,0,0,0,41,1,218,9,90, 105,112,82,101,97,100,101,114,41,4,114,46,0,0,0,114, 3,0,0,0,90,17,105,109,112,111,114,116,108,105,98,46, 114,101,97,100,101,114,115,114,84,0,0,0,41,3,114,32, 0,0,0,114,41,0,0,0,114,84,0,0,0,114,9,0, 0,0,114,9,0,0,0,114,10,0,0,0,218,19,103,101, 116,95,114,101,115,111,117,114,99,101,95,114,101,97,100,101, 114,59,1,0,0,115,18,0,0,0,2,6,10,1,6,1, 4,255,12,2,6,1,2,255,12,2,10,1,122,31,122,105, 112,105,109,112,111,114,116,101,114,46,103,101,116,95,114,101, 115,111,117,114,99,101,95,114,101,97,100,101,114,99,1,0, 0,0,0,0,0,0,0,0,0,0,1,0,0,0,8,0, 0,0,67,0,0,0,115,72,0,0,0,122,15,116,0,124, 0,106,1,131,1,124,0,95,2,124,0,106,2,116,3,124, 0,106,1,60,0,87,0,100,1,83,0,4,0,116,4,121, 35,1,0,1,0,1,0,116,3,160,5,124,0,106,1,100, 1,161,2,1,0,105,0,124,0,95,2,89,0,100,1,83, 0,119,0,41,2,122,41,82,101,108,111,97,100,32,116,104, 101,32,102,105,108,101,32,100,97,116,97,32,111,102,32,116, 104,101,32,97,114,99,104,105,118,101,32,112,97,116,104,46, 78,41,6,114,27,0,0,0,114,29,0,0,0,114,28,0, 0,0,114,25,0,0,0,114,3,0,0,0,218,3,112,111, 112,169,1,114,32,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,17,105,110,118,97,108,105,100, 97,116,101,95,99,97,99,104,101,115,74,1,0,0,115,14, 0,0,0,2,2,12,1,18,1,12,1,14,1,12,1,2, 254,122,29,122,105,112,105,109,112,111,114,116,101,114,46,105, 110,118,97,108,105,100,97,116,101,95,99,97,99,104,101,115, 99,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0, 0,5,0,0,0,67,0,0,0,115,24,0,0,0,100,1, 124,0,106,0,155,0,116,1,155,0,124,0,106,2,155,0, 100,2,157,5,83,0,41,3,78,122,21,60,122,105,112,105, 109,112,111,114,116,101,114,32,111,98,106,101,99,116,32,34, 122,2,34,62,41,3,114,29,0,0,0,114,20,0,0,0, 114,31,0,0,0,114,87,0,0,0,114,9,0,0,0,114, 9,0,0,0,114,10,0,0,0,218,8,95,95,114,101,112, 114,95,95,84,1,0,0,115,2,0,0,0,24,1,122,20, 122,105,112,105,109,112,111,114,116,101,114,46,95,95,114,101, 112,114,95,95,169,1,78,41,17,114,6,0,0,0,114,7, 0,0,0,114,8,0,0,0,218,7,95,95,100,111,99,95, 95,114,34,0,0,0,114,44,0,0,0,114,45,0,0,0, 114,49,0,0,0,114,55,0,0,0,114,62,0,0,0,114, 63,0,0,0,114,70,0,0,0,114,46,0,0,0,114,83, 0,0,0,114,85,0,0,0,114,88,0,0,0,114,89,0, 0,0,114,9,0,0,0,114,9,0,0,0,114,9,0,0, 0,114,10,0,0,0,114,4,0,0,0,46,0,0,0,115, 30,0,0,0,8,0,4,1,8,17,10,46,10,37,10,16, 8,27,8,10,8,21,8,12,8,26,8,13,8,43,8,15, 12,10,122,12,95,95,105,110,105,116,95,95,46,112,121,99, 84,114,66,0,0,0,70,41,3,122,4,46,112,121,99,84, 70,41,3,114,67,0,0,0,70,70,99,2,0,0,0,0, 0,0,0,0,0,0,0,2,0,0,0,4,0,0,0,67, 0,0,0,115,20,0,0,0,124,0,106,0,124,1,160,1, 100,1,161,1,100,2,25,0,23,0,83,0,41,3,78,218, 1,46,233,2,0,0,0,41,2,114,31,0,0,0,218,10, 114,112,97,114,116,105,116,105,111,110,41,2,114,32,0,0, 0,114,41,0,0,0,114,9,0,0,0,114,9,0,0,0, 114,10,0,0,0,114,39,0,0,0,102,1,0,0,115,2, 0,0,0,20,1,114,39,0,0,0,99,2,0,0,0,0, 0,0,0,0,0,0,0,3,0,0,0,2,0,0,0,67, 0,0,0,115,18,0,0,0,124,1,116,0,23,0,125,2, 124,2,124,0,106,1,118,0,83,0,114,90,0,0,0,41, 2,114,20,0,0,0,114,28,0,0,0,41,3,114,32,0, 0,0,114,13,0,0,0,90,7,100,105,114,112,97,116,104, 114,9,0,0,0,114,9,0,0,0,114,10,0,0,0,114, 40,0,0,0,106,1,0,0,115,4,0,0,0,8,4,10, 2,114,40,0,0,0,99,2,0,0,0,0,0,0,0,0, 0,0,0,7,0,0,0,4,0,0,0,67,0,0,0,115, 56,0,0,0,116,0,124,0,124,1,131,2,125,2,116,1, 68,0,93,18,92,3,125,3,125,4,125,5,124,2,124,3, 23,0,125,6,124,6,124,0,106,2,118,0,114,25,124,5, 2,0,1,0,83,0,113,7,100,0,83,0,114,90,0,0, 0,41,3,114,39,0,0,0,218,16,95,122,105,112,95,115, 101,97,114,99,104,111,114,100,101,114,114,28,0,0,0,41, 7,114,32,0,0,0,114,41,0,0,0,114,13,0,0,0, 218,6,115,117,102,102,105,120,218,10,105,115,98,121,116,101, 99,111,100,101,114,54,0,0,0,114,69,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,114,38,0, 0,0,115,1,0,0,115,14,0,0,0,10,1,14,1,8, 1,10,1,8,1,2,255,4,2,114,38,0,0,0,99,1, 0,0,0,0,0,0,0,0,0,0,0,26,0,0,0,9, 0,0,0,67,0,0,0,115,220,4,0,0,122,7,116,0, 160,1,124,0,161,1,125,1,87,0,110,16,4,0,116,2, 121,23,1,0,1,0,1,0,116,3,100,1,124,0,155,2, 157,2,124,0,100,2,141,2,130,1,119,0,124,1,144,2, 143,65,1,0,122,18,124,1,160,4,116,5,11,0,100,3, 161,2,1,0,124,1,160,6,161,0,125,2,124,1,160,7, 116,5,161,1,125,3,87,0,110,16,4,0,116,2,121,62, 1,0,1,0,1,0,116,3,100,4,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,119,0,116,8,124,3,131,1, 116,5,107,3,114,78,116,3,100,4,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,124,3,100,0,100,5,133,2, 25,0,116,9,107,3,114,201,122,12,124,1,160,4,100,6, 100,3,161,2,1,0,124,1,160,6,161,0,125,4,87,0, 110,16,4,0,116,2,121,114,1,0,1,0,1,0,116,3, 100,4,124,0,155,2,157,2,124,0,100,2,141,2,130,1, 119,0,116,10,124,4,116,11,24,0,116,5,24,0,100,6, 131,2,125,5,122,11,124,1,160,4,124,5,161,1,1,0, 124,1,160,7,161,0,125,6,87,0,110,16,4,0,116,2, 121,151,1,0,1,0,1,0,116,3,100,4,124,0,155,2, 157,2,124,0,100,2,141,2,130,1,119,0,124,6,160,12, 116,9,161,1,125,7,124,7,100,6,107,0,114,170,116,3, 100,7,124,0,155,2,157,2,124,0,100,2,141,2,130,1, 124,6,124,7,124,7,116,5,23,0,133,2,25,0,125,3, 116,8,124,3,131,1,116,5,107,3,114,193,116,3,100,8, 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,4, 116,8,124,6,131,1,24,0,124,7,23,0,125,2,116,13, 124,3,100,9,100,10,133,2,25,0,131,1,125,8,116,13, 124,3,100,10,100,11,133,2,25,0,131,1,125,9,124,2, 124,8,107,0,114,230,116,3,100,12,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,124,2,124,9,107,0,114,243, 116,3,100,13,124,0,155,2,157,2,124,0,100,2,141,2, 130,1,124,2,124,8,56,0,125,2,124,2,124,9,24,0, 125,10,124,10,100,6,107,0,144,1,114,9,116,3,100,14, 124,0,155,2,157,2,124,0,100,2,141,2,130,1,105,0, 125,11,100,6,125,12,122,7,124,1,160,4,124,2,161,1, 1,0,87,0,110,17,4,0,116,2,144,1,121,37,1,0, 1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0, 100,2,141,2,130,1,119,0,9,0,124,1,160,7,100,16, 161,1,125,3,116,8,124,3,131,1,100,5,107,0,144,1, 114,55,116,14,100,17,131,1,130,1,124,3,100,0,100,5, 133,2,25,0,100,18,107,3,144,1,114,66,144,2,113,85, 116,8,124,3,131,1,100,16,107,3,144,1,114,77,116,14, 100,17,131,1,130,1,116,15,124,3,100,19,100,20,133,2, 25,0,131,1,125,13,116,15,124,3,100,20,100,9,133,2, 25,0,131,1,125,14,116,15,124,3,100,9,100,21,133,2, 25,0,131,1,125,15,116,15,124,3,100,21,100,10,133,2, 25,0,131,1,125,16,116,13,124,3,100,10,100,11,133,2, 25,0,131,1,125,17,116,13,124,3,100,11,100,22,133,2, 25,0,131,1,125,18,116,13,124,3,100,22,100,23,133,2, 25,0,131,1,125,4,116,15,124,3,100,23,100,24,133,2, 25,0,131,1,125,19,116,15,124,3,100,24,100,25,133,2, 25,0,131,1,125,20,116,15,124,3,100,25,100,26,133,2, 25,0,131,1,125,21,116,13,124,3,100,27,100,16,133,2, 25,0,131,1,125,22,124,19,124,20,23,0,124,21,23,0, 125,8,124,22,124,9,107,4,144,1,114,185,116,3,100,28, 124,0,155,2,157,2,124,0,100,2,141,2,130,1,124,22, 124,10,55,0,125,22,122,7,124,1,160,7,124,19,161,1, 125,23,87,0,110,17,4,0,116,2,144,1,121,213,1,0, 1,0,1,0,116,3,100,4,124,0,155,2,157,2,124,0, 100,2,141,2,130,1,119,0,116,8,124,23,131,1,124,19, 107,3,144,1,114,230,116,3,100,4,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,122,25,116,8,124,1,160,7, 124,8,124,19,24,0,161,1,131,1,124,8,124,19,24,0, 107,3,144,1,114,254,116,3,100,4,124,0,155,2,157,2, 124,0,100,2,141,2,130,1,87,0,110,17,4,0,116,2, 144,2,121,16,1,0,1,0,1,0,116,3,100,4,124,0, 155,2,157,2,124,0,100,2,141,2,130,1,119,0,124,13, 100,29,64,0,144,2,114,27,124,23,160,16,161,0,125,23, 110,26,122,7,124,23,160,16,100,30,161,1,125,23,87,0, 110,18,4,0,116,17,144,2,121,52,1,0,1,0,1,0, 124,23,160,16,100,31,161,1,160,18,116,19,161,1,125,23, 89,0,110,1,119,0,124,23,160,20,100,32,116,21,161,2, 125,23,116,22,160,23,124,0,124,23,161,2,125,24,124,24, 124,14,124,18,124,4,124,22,124,15,124,16,124,17,102,8, 125,25,124,25,124,11,124,23,60,0,124,12,100,33,55,0, 125,12,144,1,113,39,87,0,100,0,4,0,4,0,131,3, 1,0,110,9,49,0,144,2,115,96,119,1,1,0,1,0, 1,0,89,0,1,0,116,24,160,25,100,34,124,12,124,0, 161,3,1,0,124,11,83,0,41,35,78,122,21,99,97,110, 39,116,32,111,112,101,110,32,90,105,112,32,102,105,108,101, 58,32,114,12,0,0,0,114,93,0,0,0,250,21,99,97, 110,39,116,32,114,101,97,100,32,90,105,112,32,102,105,108, 101,58,32,233,4,0,0,0,114,0,0,0,0,122,16,110, 111,116,32,97,32,90,105,112,32,102,105,108,101,58,32,122, 18,99,111,114,114,117,112,116,32,90,105,112,32,102,105,108, 101,58,32,233,12,0,0,0,233,16,0,0,0,233,20,0, 0,0,122,28,98,97,100,32,99,101,110,116,114,97,108,32, 100,105,114,101,99,116,111,114,121,32,115,105,122,101,58,32, 122,30,98,97,100,32,99,101,110,116,114,97,108,32,100,105, 114,101,99,116,111,114,121,32,111,102,102,115,101,116,58,32, 122,38,98,97,100,32,99,101,110,116,114,97,108,32,100,105, 114,101,99,116,111,114,121,32,115,105,122,101,32,111,114,32, 111,102,102,115,101,116,58,32,84,233,46,0,0,0,250,27, 69,79,70,32,114,101,97,100,32,119,104,101,114,101,32,110, 111,116,32,101,120,112,101,99,116,101,100,115,4,0,0,0, 80,75,1,2,233,8,0,0,0,233,10,0,0,0,233,14, 0,0,0,233,24,0,0,0,233,28,0,0,0,233,30,0, 0,0,233,32,0,0,0,233,34,0,0,0,233,42,0,0, 0,122,25,98,97,100,32,108,111,99,97,108,32,104,101,97, 100,101,114,32,111,102,102,115,101,116,58,32,105,0,8,0, 0,218,5,97,115,99,105,105,90,6,108,97,116,105,110,49, 250,1,47,114,5,0,0,0,122,33,122,105,112,105,109,112, 111,114,116,58,32,102,111,117,110,100,32,123,125,32,110,97, 109,101,115,32,105,110,32,123,33,114,125,41,26,218,3,95, 105,111,218,9,111,112,101,110,95,99,111,100,101,114,22,0, 0,0,114,3,0,0,0,218,4,115,101,101,107,218,20,69, 78,68,95,67,69,78,84,82,65,76,95,68,73,82,95,83, 73,90,69,90,4,116,101,108,108,218,4,114,101,97,100,114, 58,0,0,0,218,18,83,84,82,73,78,71,95,69,78,68, 95,65,82,67,72,73,86,69,218,3,109,97,120,218,15,77, 65,88,95,67,79,77,77,69,78,84,95,76,69,78,218,5, 114,102,105,110,100,114,2,0,0,0,218,8,69,79,70,69, 114,114,111,114,114,1,0,0,0,114,68,0,0,0,218,18, 85,110,105,99,111,100,101,68,101,99,111,100,101,69,114,114, 111,114,218,9,116,114,97,110,115,108,97,116,101,218,11,99, 112,52,51,55,95,116,97,98,108,101,114,19,0,0,0,114, 20,0,0,0,114,21,0,0,0,114,30,0,0,0,114,48, 0,0,0,114,81,0,0,0,41,26,114,29,0,0,0,218, 2,102,112,90,15,104,101,97,100,101,114,95,112,111,115,105, 116,105,111,110,218,6,98,117,102,102,101,114,218,9,102,105, 108,101,95,115,105,122,101,90,17,109,97,120,95,99,111,109, 109,101,110,116,95,115,116,97,114,116,218,4,100,97,116,97, 90,3,112,111,115,218,11,104,101,97,100,101,114,95,115,105, 122,101,90,13,104,101,97,100,101,114,95,111,102,102,115,101, 116,90,10,97,114,99,95,111,102,102,115,101,116,114,33,0, 0,0,218,5,99,111,117,110,116,218,5,102,108,97,103,115, 218,8,99,111,109,112,114,101,115,115,218,4,116,105,109,101, 218,4,100,97,116,101,218,3,99,114,99,218,9,100,97,116, 97,95,115,105,122,101,218,9,110,97,109,101,95,115,105,122, 101,218,10,101,120,116,114,97,95,115,105,122,101,90,12,99, 111,109,109,101,110,116,95,115,105,122,101,218,11,102,105,108, 101,95,111,102,102,115,101,116,114,47,0,0,0,114,13,0, 0,0,218,1,116,114,9,0,0,0,114,9,0,0,0,114, 10,0,0,0,114,27,0,0,0,146,1,0,0,115,238,0, 0,0,2,1,14,1,12,1,18,1,2,255,8,3,2,1, 14,1,8,1,14,1,12,1,18,1,2,255,12,2,18,1, 16,1,2,3,12,1,12,1,12,1,10,1,2,1,6,255, 2,255,8,3,2,1,2,255,2,1,4,255,2,2,10,1, 12,1,12,1,10,1,2,1,6,255,2,255,10,3,8,1, 10,1,2,1,6,255,16,2,12,1,10,1,2,1,6,255, 16,2,16,2,16,1,8,1,18,1,8,1,18,1,8,1, 8,1,10,1,18,1,4,2,4,2,2,1,14,1,14,1, 18,1,2,255,2,2,10,1,14,1,8,1,18,2,4,1, 14,1,8,1,16,1,16,1,16,1,16,1,16,1,16,1, 16,1,16,1,16,1,16,1,16,1,12,1,10,1,18,1, 8,1,2,2,14,1,14,1,18,1,2,255,14,2,18,1, 2,4,28,1,18,1,4,255,14,2,18,1,2,255,10,3, 10,2,2,3,14,1,14,1,20,1,2,255,12,3,12,1, 20,1,8,1,8,1,4,202,2,6,30,196,14,109,4,1, 114,27,0,0,0,117,190,1,0,0,0,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,195,135,195,188,195,169, 195,162,195,164,195,160,195,165,195,167,195,170,195,171,195,168, 195,175,195,174,195,172,195,132,195,133,195,137,195,166,195,134, 195,180,195,182,195,178,195,187,195,185,195,191,195,150,195,156, 194,162,194,163,194,165,226,130,167,198,146,195,161,195,173,195, 179,195,186,195,177,195,145,194,170,194,186,194,191,226,140,144, 194,172,194,189,194,188,194,161,194,171,194,187,226,150,145,226, 150,146,226,150,147,226,148,130,226,148,164,226,149,161,226,149, 162,226,149,150,226,149,149,226,149,163,226,149,145,226,149,151, 226,149,157,226,149,156,226,149,155,226,148,144,226,148,148,226, 148,180,226,148,172,226,148,156,226,148,128,226,148,188,226,149, 158,226,149,159,226,149,154,226,149,148,226,149,169,226,149,166, 226,149,160,226,149,144,226,149,172,226,149,167,226,149,168,226, 149,164,226,149,165,226,149,153,226,149,152,226,149,146,226,149, 147,226,149,171,226,149,170,226,148,152,226,148,140,226,150,136, 226,150,132,226,150,140,226,150,144,226,150,128,206,177,195,159, 206,147,207,128,206,163,207,131,194,181,207,132,206,166,206,152, 206,169,206,180,226,136,158,207,134,206,181,226,136,169,226,137, 161,194,177,226,137,165,226,137,164,226,140,160,226,140,161,195, 183,226,137,136,194,176,226,136,153,194,183,226,136,154,226,129, 191,194,178,226,150,160,194,160,99,0,0,0,0,0,0,0, 0,0,0,0,0,1,0,0,0,8,0,0,0,67,0,0, 0,115,106,0,0,0,116,0,114,11,116,1,160,2,100,1, 161,1,1,0,116,3,100,2,131,1,130,1,100,3,97,0, 122,29,122,8,100,4,100,5,108,4,109,5,125,0,1,0, 87,0,110,16,4,0,116,6,121,38,1,0,1,0,1,0, 116,1,160,2,100,1,161,1,1,0,116,3,100,2,131,1, 130,1,119,0,87,0,100,6,97,0,110,3,100,6,97,0, 119,0,116,1,160,2,100,7,161,1,1,0,124,0,83,0, 41,8,78,122,27,122,105,112,105,109,112,111,114,116,58,32, 122,108,105,98,32,85,78,65,86,65,73,76,65,66,76,69, 250,41,99,97,110,39,116,32,100,101,99,111,109,112,114,101, 115,115,32,100,97,116,97,59,32,122,108,105,98,32,110,111, 116,32,97,118,97,105,108,97,98,108,101,84,114,0,0,0, 0,169,1,218,10,100,101,99,111,109,112,114,101,115,115,70, 122,25,122,105,112,105,109,112,111,114,116,58,32,122,108,105, 98,32,97,118,97,105,108,97,98,108,101,41,7,218,15,95, 105,109,112,111,114,116,105,110,103,95,122,108,105,98,114,48, 0,0,0,114,81,0,0,0,114,3,0,0,0,90,4,122, 108,105,98,114,147,0,0,0,218,9,69,120,99,101,112,116, 105,111,110,114,146,0,0,0,114,9,0,0,0,114,9,0, 0,0,114,10,0,0,0,218,20,95,103,101,116,95,100,101, 99,111,109,112,114,101,115,115,95,102,117,110,99,48,2,0, 0,115,28,0,0,0,4,2,10,3,8,1,4,2,4,1, 16,1,12,1,10,1,8,1,2,254,2,255,12,5,10,2, 4,1,114,150,0,0,0,99,2,0,0,0,0,0,0,0, 0,0,0,0,17,0,0,0,9,0,0,0,67,0,0,0, 115,120,1,0,0,124,1,92,8,125,2,125,3,125,4,125, 5,125,6,125,7,125,8,125,9,124,4,100,1,107,0,114, 18,116,0,100,2,131,1,130,1,116,1,160,2,124,0,161, 1,143,129,125,10,122,7,124,10,160,3,124,6,161,1,1, 0,87,0,110,16,4,0,116,4,121,47,1,0,1,0,1, 0,116,0,100,3,124,0,155,2,157,2,124,0,100,4,141, 2,130,1,119,0,124,10,160,5,100,5,161,1,125,11,116, 6,124,11,131,1,100,5,107,3,114,63,116,7,100,6,131, 1,130,1,124,11,100,0,100,7,133,2,25,0,100,8,107, 3,114,80,116,0,100,9,124,0,155,2,157,2,124,0,100, 4,141,2,130,1,116,8,124,11,100,10,100,11,133,2,25, 0,131,1,125,12,116,8,124,11,100,11,100,5,133,2,25, 0,131,1,125,13,100,5,124,12,23,0,124,13,23,0,125, 14,124,6,124,14,55,0,125,6,122,7,124,10,160,3,124, 6,161,1,1,0,87,0,110,16,4,0,116,4,121,129,1, 0,1,0,1,0,116,0,100,3,124,0,155,2,157,2,124, 0,100,4,141,2,130,1,119,0,124,10,160,5,124,4,161, 1,125,15,116,6,124,15,131,1,124,4,107,3,114,145,116, 4,100,12,131,1,130,1,87,0,100,0,4,0,4,0,131, 3,1,0,110,8,49,0,115,155,119,1,1,0,1,0,1, 0,89,0,1,0,124,3,100,1,107,2,114,166,124,15,83, 0,122,5,116,9,131,0,125,16,87,0,110,11,4,0,116, 10,121,182,1,0,1,0,1,0,116,0,100,13,131,1,130, 1,119,0,124,16,124,15,100,14,131,2,83,0,41,15,78, 114,0,0,0,0,122,18,110,101,103,97,116,105,118,101,32, 100,97,116,97,32,115,105,122,101,114,98,0,0,0,114,12, 0,0,0,114,110,0,0,0,114,104,0,0,0,114,99,0, 0,0,115,4,0,0,0,80,75,3,4,122,23,98,97,100, 32,108,111,99,97,108,32,102,105,108,101,32,104,101,97,100, 101,114,58,32,233,26,0,0,0,114,109,0,0,0,122,26, 122,105,112,105,109,112,111,114,116,58,32,99,97,110,39,116, 32,114,101,97,100,32,100,97,116,97,114,145,0,0,0,105, 241,255,255,255,41,11,114,3,0,0,0,114,116,0,0,0, 114,117,0,0,0,114,118,0,0,0,114,22,0,0,0,114, 120,0,0,0,114,58,0,0,0,114,125,0,0,0,114,1, 0,0,0,114,150,0,0,0,114,149,0,0,0,41,17,114, 29,0,0,0,114,61,0,0,0,90,8,100,97,116,97,112, 97,116,104,114,136,0,0,0,114,140,0,0,0,114,131,0, 0,0,114,143,0,0,0,114,137,0,0,0,114,138,0,0, 0,114,139,0,0,0,114,129,0,0,0,114,130,0,0,0, 114,141,0,0,0,114,142,0,0,0,114,133,0,0,0,90, 8,114,97,119,95,100,97,116,97,114,147,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,114,59,0, 0,0,69,2,0,0,115,72,0,0,0,20,1,8,1,8, 1,12,2,2,2,14,1,12,1,18,1,2,255,10,2,12, 1,8,1,16,2,18,2,16,2,16,1,12,1,8,1,2, 1,14,1,12,1,18,1,2,255,10,2,12,1,8,1,2, 255,28,233,8,26,4,2,2,3,10,1,12,1,8,1,2, 255,10,2,114,59,0,0,0,99,2,0,0,0,0,0,0, 0,0,0,0,0,2,0,0,0,3,0,0,0,67,0,0, 0,115,16,0,0,0,116,0,124,0,124,1,24,0,131,1, 100,1,107,1,83,0,41,2,78,114,5,0,0,0,41,1, 218,3,97,98,115,41,2,90,2,116,49,90,2,116,50,114, 9,0,0,0,114,9,0,0,0,114,10,0,0,0,218,9, 95,101,113,95,109,116,105,109,101,115,2,0,0,115,2,0, 0,0,16,2,114,153,0,0,0,99,5,0,0,0,0,0, 0,0,0,0,0,0,14,0,0,0,6,0,0,0,67,0, 0,0,115,254,0,0,0,124,3,124,2,100,1,156,2,125, 5,116,0,160,1,124,4,124,3,124,5,161,3,125,6,124, 6,100,2,64,0,100,3,107,3,125,7,124,7,114,63,124, 6,100,4,64,0,100,3,107,3,125,8,116,2,106,3,100, 5,107,3,114,62,124,8,115,38,116,2,106,3,100,6,107, 2,114,62,116,4,124,0,124,2,131,2,125,9,124,9,100, 0,117,1,114,62,116,2,160,5,116,0,106,6,124,9,161, 2,125,10,116,0,160,7,124,4,124,10,124,3,124,5,161, 4,1,0,110,40,116,8,124,0,124,2,131,2,92,2,125, 11,125,12,124,11,114,103,116,9,116,10,124,4,100,7,100, 8,133,2,25,0,131,1,124,11,131,2,114,93,116,10,124, 4,100,8,100,9,133,2,25,0,131,1,124,12,107,3,114, 103,116,11,160,12,100,10,124,3,155,2,157,2,161,1,1, 0,100,0,83,0,116,13,160,14,124,4,100,9,100,0,133, 2,25,0,161,1,125,13,116,15,124,13,116,16,131,2,115, 125,116,17,100,11,124,1,155,2,100,12,157,3,131,1,130, 1,124,13,83,0,41,13,78,41,2,114,47,0,0,0,114, 13,0,0,0,114,5,0,0,0,114,0,0,0,0,114,93, 0,0,0,90,5,110,101,118,101,114,90,6,97,108,119,97, 121,115,114,105,0,0,0,114,100,0,0,0,114,101,0,0, 0,122,22,98,121,116,101,99,111,100,101,32,105,115,32,115, 116,97,108,101,32,102,111,114,32,122,16,99,111,109,112,105, 108,101,100,32,109,111,100,117,108,101,32,122,21,32,105,115, 32,110,111,116,32,97,32,99,111,100,101,32,111,98,106,101, 99,116,41,18,114,21,0,0,0,90,13,95,99,108,97,115, 115,105,102,121,95,112,121,99,218,4,95,105,109,112,90,21, 99,104,101,99,107,95,104,97,115,104,95,98,97,115,101,100, 95,112,121,99,115,218,15,95,103,101,116,95,112,121,99,95, 115,111,117,114,99,101,218,11,115,111,117,114,99,101,95,104, 97,115,104,90,17,95,82,65,87,95,77,65,71,73,67,95, 78,85,77,66,69,82,90,18,95,118,97,108,105,100,97,116, 101,95,104,97,115,104,95,112,121,99,218,29,95,103,101,116, 95,109,116,105,109,101,95,97,110,100,95,115,105,122,101,95, 111,102,95,115,111,117,114,99,101,114,153,0,0,0,114,2, 0,0,0,114,48,0,0,0,114,81,0,0,0,218,7,109, 97,114,115,104,97,108,90,5,108,111,97,100,115,114,15,0, 0,0,218,10,95,99,111,100,101,95,116,121,112,101,218,9, 84,121,112,101,69,114,114,111,114,41,14,114,32,0,0,0, 114,60,0,0,0,114,69,0,0,0,114,41,0,0,0,114, 132,0,0,0,90,11,101,120,99,95,100,101,116,97,105,108, 115,114,135,0,0,0,90,10,104,97,115,104,95,98,97,115, 101,100,90,12,99,104,101,99,107,95,115,111,117,114,99,101, 90,12,115,111,117,114,99,101,95,98,121,116,101,115,114,156, 0,0,0,90,12,115,111,117,114,99,101,95,109,116,105,109, 101,90,11,115,111,117,114,99,101,95,115,105,122,101,114,53, 0,0,0,114,9,0,0,0,114,9,0,0,0,114,10,0, 0,0,218,15,95,117,110,109,97,114,115,104,97,108,95,99, 111,100,101,123,2,0,0,115,72,0,0,0,2,2,2,1, 6,254,14,5,12,2,4,1,12,1,10,1,2,1,2,255, 8,1,2,255,10,2,8,1,4,1,4,1,2,1,4,254, 4,5,8,1,4,255,2,128,8,4,6,255,4,3,22,3, 18,1,2,255,4,2,8,1,4,255,4,2,18,2,10,1, 16,1,4,1,114,161,0,0,0,99,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,0,4,0,0,0,67,0, 0,0,115,28,0,0,0,124,0,160,0,100,1,100,2,161, 2,125,0,124,0,160,0,100,3,100,2,161,2,125,0,124, 0,83,0,41,4,78,115,2,0,0,0,13,10,243,1,0, 0,0,10,243,1,0,0,0,13,41,1,114,19,0,0,0, 41,1,218,6,115,111,117,114,99,101,114,9,0,0,0,114, 9,0,0,0,114,10,0,0,0,218,23,95,110,111,114,109, 97,108,105,122,101,95,108,105,110,101,95,101,110,100,105,110, 103,115,168,2,0,0,115,6,0,0,0,12,1,12,1,4, 1,114,165,0,0,0,99,2,0,0,0,0,0,0,0,0, 0,0,0,2,0,0,0,6,0,0,0,67,0,0,0,115, 24,0,0,0,116,0,124,1,131,1,125,1,116,1,124,1, 124,0,100,1,100,2,100,3,141,4,83,0,41,4,78,114, 79,0,0,0,84,41,1,90,12,100,111,110,116,95,105,110, 104,101,114,105,116,41,2,114,165,0,0,0,218,7,99,111, 109,112,105,108,101,41,2,114,60,0,0,0,114,164,0,0, 0,114,9,0,0,0,114,9,0,0,0,114,10,0,0,0, 218,15,95,99,111,109,112,105,108,101,95,115,111,117,114,99, 101,175,2,0,0,115,4,0,0,0,8,1,16,1,114,167, 0,0,0,99,2,0,0,0,0,0,0,0,0,0,0,0, 2,0,0,0,11,0,0,0,67,0,0,0,115,68,0,0, 0,116,0,160,1,124,0,100,1,63,0,100,2,23,0,124, 0,100,3,63,0,100,4,64,0,124,0,100,5,64,0,124, 1,100,6,63,0,124,1,100,3,63,0,100,7,64,0,124, 1,100,5,64,0,100,8,20,0,100,9,100,9,100,9,102, 9,161,1,83,0,41,10,78,233,9,0,0,0,105,188,7, 0,0,233,5,0,0,0,233,15,0,0,0,233,31,0,0, 0,233,11,0,0,0,233,63,0,0,0,114,93,0,0,0, 114,14,0,0,0,41,2,114,137,0,0,0,90,6,109,107, 116,105,109,101,41,2,218,1,100,114,144,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,218,14,95, 112,97,114,115,101,95,100,111,115,116,105,109,101,181,2,0, 0,115,18,0,0,0,4,1,10,1,10,1,6,1,6,1, 10,1,10,1,6,1,6,249,114,175,0,0,0,99,2,0, 0,0,0,0,0,0,0,0,0,0,6,0,0,0,10,0, 0,0,67,0,0,0,115,110,0,0,0,122,41,124,1,100, 1,100,0,133,2,25,0,100,2,118,0,115,11,74,0,130, 1,124,1,100,0,100,1,133,2,25,0,125,1,124,0,106, 0,124,1,25,0,125,2,124,2,100,3,25,0,125,3,124, 2,100,4,25,0,125,4,124,2,100,5,25,0,125,5,116, 1,124,4,124,3,131,2,124,5,102,2,87,0,83,0,4, 0,116,2,116,3,116,4,102,3,121,54,1,0,1,0,1, 0,89,0,100,6,83,0,119,0,41,7,78,114,14,0,0, 0,169,2,218,1,99,218,1,111,114,169,0,0,0,233,6, 0,0,0,233,3,0,0,0,41,2,114,0,0,0,0,114, 0,0,0,0,41,5,114,28,0,0,0,114,175,0,0,0, 114,26,0,0,0,218,10,73,110,100,101,120,69,114,114,111, 114,114,160,0,0,0,41,6,114,32,0,0,0,114,13,0, 0,0,114,61,0,0,0,114,137,0,0,0,114,138,0,0, 0,90,17,117,110,99,111,109,112,114,101,115,115,101,100,95, 115,105,122,101,114,9,0,0,0,114,9,0,0,0,114,10, 0,0,0,114,157,0,0,0,194,2,0,0,115,22,0,0, 0,2,1,20,2,12,1,10,1,8,3,8,1,8,1,16, 1,18,1,6,1,2,255,114,157,0,0,0,99,2,0,0, 0,0,0,0,0,0,0,0,0,3,0,0,0,8,0,0, 0,67,0,0,0,115,80,0,0,0,124,1,100,1,100,0, 133,2,25,0,100,2,118,0,115,10,74,0,130,1,124,1, 100,0,100,1,133,2,25,0,125,1,122,7,124,0,106,0, 124,1,25,0,125,2,87,0,110,10,4,0,116,1,121,33, 1,0,1,0,1,0,89,0,100,0,83,0,119,0,116,2, 124,0,106,3,124,2,131,2,83,0,41,3,78,114,14,0, 0,0,114,176,0,0,0,41,4,114,28,0,0,0,114,26, 0,0,0,114,59,0,0,0,114,29,0,0,0,41,3,114, 32,0,0,0,114,13,0,0,0,114,61,0,0,0,114,9, 0,0,0,114,9,0,0,0,114,10,0,0,0,114,155,0, 0,0,213,2,0,0,115,16,0,0,0,20,2,12,1,2, 2,14,1,12,1,6,1,2,255,12,3,114,155,0,0,0, 99,2,0,0,0,0,0,0,0,0,0,0,0,14,0,0, 0,11,0,0,0,67,0,0,0,115,14,1,0,0,116,0, 124,0,124,1,131,2,125,2,100,0,125,3,116,1,68,0, 93,102,92,3,125,4,125,5,125,6,124,2,124,4,23,0, 125,7,116,2,106,3,100,1,124,0,106,4,116,5,124,7, 100,2,100,3,141,5,1,0,122,7,124,0,106,6,124,7, 25,0,125,8,87,0,110,9,4,0,116,7,121,45,1,0, 1,0,1,0,89,0,113,9,119,0,124,8,100,4,25,0, 125,9,116,8,124,0,106,4,124,8,131,2,125,10,100,0, 125,11,124,5,114,91,122,10,116,9,124,0,124,9,124,7, 124,1,124,10,131,5,125,11,87,0,113,96,4,0,116,10, 121,90,1,0,125,12,1,0,122,8,124,12,125,3,87,0, 89,0,100,0,125,12,126,12,113,96,100,0,125,12,126,12, 119,1,119,0,116,11,124,9,124,10,131,2,125,11,124,11, 100,0,117,0,114,101,113,9,124,8,100,4,25,0,125,9, 124,11,124,6,124,9,102,3,2,0,1,0,83,0,124,3, 114,126,100,5,124,3,155,0,157,2,125,13,116,12,124,13, 124,1,100,6,141,2,124,3,130,2,116,12,100,7,124,1, 155,2,157,2,124,1,100,6,141,2,130,1,41,8,78,122, 13,116,114,121,105,110,103,32,123,125,123,125,123,125,114,93, 0,0,0,41,1,90,9,118,101,114,98,111,115,105,116,121, 114,0,0,0,0,122,20,109,111,100,117,108,101,32,108,111, 97,100,32,102,97,105,108,101,100,58,32,114,65,0,0,0, 114,64,0,0,0,41,13,114,39,0,0,0,114,95,0,0, 0,114,48,0,0,0,114,81,0,0,0,114,29,0,0,0, 114,20,0,0,0,114,28,0,0,0,114,26,0,0,0,114, 59,0,0,0,114,161,0,0,0,114,80,0,0,0,114,167, 0,0,0,114,3,0,0,0,41,14,114,32,0,0,0,114, 41,0,0,0,114,13,0,0,0,90,12,105,109,112,111,114, 116,95,101,114,114,111,114,114,96,0,0,0,114,97,0,0, 0,114,54,0,0,0,114,69,0,0,0,114,61,0,0,0, 114,43,0,0,0,114,132,0,0,0,114,53,0,0,0,90, 3,101,120,99,114,82,0,0,0,114,9,0,0,0,114,9, 0,0,0,114,10,0,0,0,114,51,0,0,0,228,2,0, 0,115,58,0,0,0,10,1,4,1,14,1,8,1,22,1, 2,1,14,1,12,1,4,1,2,255,8,3,12,1,4,1, 4,1,2,1,20,1,14,1,16,1,8,128,2,255,10,3, 8,1,2,3,8,1,14,1,4,2,10,1,14,1,18,2, 114,51,0,0,0,41,46,114,91,0,0,0,90,26,95,102, 114,111,122,101,110,95,105,109,112,111,114,116,108,105,98,95, 101,120,116,101,114,110,97,108,114,21,0,0,0,114,1,0, 0,0,114,2,0,0,0,90,17,95,102,114,111,122,101,110, 95,105,109,112,111,114,116,108,105,98,114,48,0,0,0,114, 154,0,0,0,114,116,0,0,0,114,158,0,0,0,114,72, 0,0,0,114,137,0,0,0,114,35,0,0,0,90,7,95, 95,97,108,108,95,95,114,20,0,0,0,90,15,112,97,116, 104,95,115,101,112,97,114,97,116,111,114,115,114,18,0,0, 0,114,80,0,0,0,114,3,0,0,0,114,25,0,0,0, 218,4,116,121,112,101,114,75,0,0,0,114,119,0,0,0, 114,121,0,0,0,114,123,0,0,0,90,13,95,76,111,97, 100,101,114,66,97,115,105,99,115,114,4,0,0,0,114,95, 0,0,0,114,39,0,0,0,114,40,0,0,0,114,38,0, 0,0,114,27,0,0,0,114,128,0,0,0,114,148,0,0, 0,114,150,0,0,0,114,59,0,0,0,114,153,0,0,0, 114,161,0,0,0,218,8,95,95,99,111,100,101,95,95,114, 159,0,0,0,114,165,0,0,0,114,167,0,0,0,114,175, 0,0,0,114,157,0,0,0,114,155,0,0,0,114,51,0, 0,0,114,9,0,0,0,114,9,0,0,0,114,9,0,0, 0,114,10,0,0,0,218,8,60,109,111,100,117,108,101,62, 1,0,0,0,115,90,0,0,0,4,0,8,16,16,1,8, 1,8,1,8,1,8,1,8,1,8,1,8,1,8,2,6, 3,14,1,16,3,4,4,8,2,4,2,4,1,4,1,18, 2,0,127,0,127,12,50,12,1,2,1,2,1,4,252,8, 9,8,4,8,9,8,31,2,126,2,254,4,29,8,5,8, 21,8,46,8,8,10,40,8,5,8,7,8,6,8,13,8, 19,12,15, };