-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_frames.py
More file actions
98 lines (82 loc) · 140 KB
/
test_frames.py
File metadata and controls
98 lines (82 loc) · 140 KB
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
from unittest import TestCase
from websocket_lib.frames import Frames
from websocket_lib.opcode import Opcode
from websocket_lib.status_code import StatusCode
class TestFrames(TestCase):
def test_encode_text_frame(self):
"""
Test for encoding text frames
"""
frames = Frames()
expected_result = [b'\x81\x05Hello']
result = frames.encode_frame(Opcode.TEXT_FRAME, "Hello")
self.assertEqual(result, expected_result)
self.assertNotEqual(frames.encode_frame(Opcode.TEXT_FRAME, "Hei"), expected_result)
def test_encode_fragmented_frame(self):
"""
Test for encoding of fragmented frames
"""
frames = Frames()
expected_result = [
b'\x01~\xff\xff112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341',
b'\x00~\xff\xff122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411',
b'\x80~"\xe222334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334112233411223341122334']
result = frames.encode_frame(Opcode.TEXT_FRAME, ("1122334" * 20000))
self.assertEqual(result, expected_result)
def test_encode_fragmented_close_frame(self):
"""
Test for encoding fragmented close frame, must result in exception
"""
frames = Frames()
result = frames.encode_frame(Opcode.CONNECTION_CLOSE_FRAME, ("1122334" * 20000), StatusCode.CLOSE_NORMAL)
self.failureException(result)
def test_encode_ping_frame(self):
"""
Test for encoding ping frame
"""
frames = Frames()
expected_result = [b'\x89\x00']
result = frames.encode_frame(Opcode.PING_FRAME)
self.assertEqual(result, expected_result)
def test_too_long_max_frame(self):
"""
Test for choosing to long max frame length
"""
frames = Frames(167772155)
self.failureException(frames)
def test_decode_text_frame(self):
"""
Test if function decodes payload data and if it returns the right opcode for text frame
Both results are text frames but payload data is different
"""
frames = Frames()
expected_result_message = "Hello World!"
expected_result_opcode = Opcode.TEXT_FRAME
result1_message, result1_opcode, fin = frames.decode_message(b'\x81\x8c\xff\xb8\xbd\xbd\xb7\xdd\xd1\xd1\x90\x98\xea\xd2\x8d\xd4\xd9\x9c')
result2_message, result2_opcode, fin = frames.decode_message(b'\x81\x83!\xba+Ai\xdfB')
# Test for result1
self.assertEqual(result1_message, expected_result_message)
self.assertEqual(result1_opcode, expected_result_opcode)
# Test for result2
self.assertNotEqual(result2_message, expected_result_message)
self.assertEqual(result2_opcode, expected_result_opcode)
def test_decode_pong_frame(self):
"""
Test if function returns correct opcode. Test for payload data: test_decode_text_frame
result1 is a pong frame, result2 is a text frame
"""
frames = Frames()
expected_result_opcode = Opcode.PONG_FRAME
result1_message, result1_opcode, fin = frames.decode_message(b"\x8a\x85\x37\xfa\x21\x3d\x7f\x9f\x4d\x51\x58")
result2_message, result2_opcode, fin = frames.decode_message(b'\x81\x83!\xba+Ai\xdfB')
# Test for result1:
self.assertEqual(result1_opcode, expected_result_opcode)
# Test for result2:
self.assertNotEqual(result2_opcode, expected_result_opcode)
def test_decode_unmasked_frame(self):
"""
Test if attempt to decode unmasked frame results in exception
"""
frames = Frames()
result = frames.decode_message(b'\x81\x05Hello')
self.failureException(result)