Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
36ff451e
Commit
36ff451e
authored
Jun 11, 2017
by
Serhiy Storchaka
Committed by
GitHub
Jun 11, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-30501: Make the compiler producing optimized code for condition expressions. (#1851)
parent
1efbf92e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
2537 additions
and
2448 deletions
+2537
-2448
Misc/NEWS
Misc/NEWS
+4
-0
Python/compile.c
Python/compile.c
+137
-41
Python/importlib.h
Python/importlib.h
+409
-409
Python/importlib_external.h
Python/importlib_external.h
+1985
-1986
Python/peephole.c
Python/peephole.c
+2
-12
No files found.
Misc/NEWS
View file @
36ff451e
...
...
@@ -10,6 +10,10 @@ What's New in Python 3.7.0 alpha 1?
Core and Builtins
-----------------
- bpo-30501: The compiler now produces more optimal code for complex condition
expressions in the "if", "while" and "assert" statement, the "if" expression,
and generator expressions and comprehensions.
- bpo-28180: Implement PEP 538 (legacy C locale coercion). This means that when
a suitable coercion target locale is available, both the core interpreter and
locale-aware C extensions will assume the use of UTF-8 as the default text
...
...
Python/compile.c
View file @
36ff451e
...
...
@@ -1999,6 +1999,131 @@ compiler_class(struct compiler *c, stmt_ty s)
return
1
;
}
static
int
cmpop
(
cmpop_ty
op
)
{
switch
(
op
)
{
case
Eq
:
return
PyCmp_EQ
;
case
NotEq
:
return
PyCmp_NE
;
case
Lt
:
return
PyCmp_LT
;
case
LtE
:
return
PyCmp_LE
;
case
Gt
:
return
PyCmp_GT
;
case
GtE
:
return
PyCmp_GE
;
case
Is
:
return
PyCmp_IS
;
case
IsNot
:
return
PyCmp_IS_NOT
;
case
In
:
return
PyCmp_IN
;
case
NotIn
:
return
PyCmp_NOT_IN
;
default:
return
PyCmp_BAD
;
}
}
static
int
compiler_jump_if
(
struct
compiler
*
c
,
expr_ty
e
,
basicblock
*
next
,
int
cond
)
{
switch
(
e
->
kind
)
{
case
UnaryOp_kind
:
if
(
e
->
v
.
UnaryOp
.
op
==
Not
)
return
compiler_jump_if
(
c
,
e
->
v
.
UnaryOp
.
operand
,
next
,
!
cond
);
/* fallback to general implementation */
break
;
case
BoolOp_kind
:
{
asdl_seq
*
s
=
e
->
v
.
BoolOp
.
values
;
Py_ssize_t
i
,
n
=
asdl_seq_LEN
(
s
)
-
1
;
assert
(
n
>=
0
);
int
cond2
=
e
->
v
.
BoolOp
.
op
==
Or
;
basicblock
*
next2
=
next
;
if
(
!
cond2
!=
!
cond
)
{
next2
=
compiler_new_block
(
c
);
if
(
next2
==
NULL
)
return
0
;
}
for
(
i
=
0
;
i
<
n
;
++
i
)
{
if
(
!
compiler_jump_if
(
c
,
(
expr_ty
)
asdl_seq_GET
(
s
,
i
),
next2
,
cond2
))
return
0
;
}
if
(
!
compiler_jump_if
(
c
,
(
expr_ty
)
asdl_seq_GET
(
s
,
n
),
next
,
cond
))
return
0
;
if
(
next2
!=
next
)
compiler_use_next_block
(
c
,
next2
);
return
1
;
}
case
IfExp_kind
:
{
basicblock
*
end
,
*
next2
;
end
=
compiler_new_block
(
c
);
if
(
end
==
NULL
)
return
0
;
next2
=
compiler_new_block
(
c
);
if
(
next2
==
NULL
)
return
0
;
if
(
!
compiler_jump_if
(
c
,
e
->
v
.
IfExp
.
test
,
next2
,
0
))
return
0
;
if
(
!
compiler_jump_if
(
c
,
e
->
v
.
IfExp
.
body
,
next
,
cond
))
return
0
;
ADDOP_JREL
(
c
,
JUMP_FORWARD
,
end
);
compiler_use_next_block
(
c
,
next2
);
if
(
!
compiler_jump_if
(
c
,
e
->
v
.
IfExp
.
orelse
,
next
,
cond
))
return
0
;
compiler_use_next_block
(
c
,
end
);
return
1
;
}
case
Compare_kind
:
{
Py_ssize_t
i
,
n
=
asdl_seq_LEN
(
e
->
v
.
Compare
.
ops
)
-
1
;
if
(
n
>
0
)
{
basicblock
*
cleanup
=
compiler_new_block
(
c
);
if
(
cleanup
==
NULL
)
return
0
;
VISIT
(
c
,
expr
,
e
->
v
.
Compare
.
left
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
VISIT
(
c
,
expr
,
(
expr_ty
)
asdl_seq_GET
(
e
->
v
.
Compare
.
comparators
,
i
));
ADDOP
(
c
,
DUP_TOP
);
ADDOP
(
c
,
ROT_THREE
);
ADDOP_I
(
c
,
COMPARE_OP
,
cmpop
((
cmpop_ty
)(
asdl_seq_GET
(
e
->
v
.
Compare
.
ops
,
i
))));
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
cleanup
);
NEXT_BLOCK
(
c
);
}
VISIT
(
c
,
expr
,
(
expr_ty
)
asdl_seq_GET
(
e
->
v
.
Compare
.
comparators
,
n
));
ADDOP_I
(
c
,
COMPARE_OP
,
cmpop
((
cmpop_ty
)(
asdl_seq_GET
(
e
->
v
.
Compare
.
ops
,
n
))));
ADDOP_JABS
(
c
,
cond
?
POP_JUMP_IF_TRUE
:
POP_JUMP_IF_FALSE
,
next
);
basicblock
*
end
=
compiler_new_block
(
c
);
if
(
end
==
NULL
)
return
0
;
ADDOP_JREL
(
c
,
JUMP_FORWARD
,
end
);
compiler_use_next_block
(
c
,
cleanup
);
ADDOP
(
c
,
POP_TOP
);
if
(
!
cond
)
{
ADDOP_JREL
(
c
,
JUMP_FORWARD
,
next
);
}
compiler_use_next_block
(
c
,
end
);
return
1
;
}
/* fallback to general implementation */
break
;
}
default:
/* fallback to general implementation */
break
;
}
/* general implementation */
VISIT
(
c
,
expr
,
e
);
ADDOP_JABS
(
c
,
cond
?
POP_JUMP_IF_TRUE
:
POP_JUMP_IF_FALSE
,
next
);
return
1
;
}
static
int
compiler_ifexp
(
struct
compiler
*
c
,
expr_ty
e
)
{
...
...
@@ -2011,8 +2136,8 @@ compiler_ifexp(struct compiler *c, expr_ty e)
next
=
compiler_new_block
(
c
);
if
(
next
==
NULL
)
return
0
;
VISIT
(
c
,
expr
,
e
->
v
.
IfExp
.
test
);
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
next
)
;
if
(
!
compiler_jump_if
(
c
,
e
->
v
.
IfExp
.
test
,
next
,
0
))
return
0
;
VISIT
(
c
,
expr
,
e
->
v
.
IfExp
.
body
);
ADDOP_JREL
(
c
,
JUMP_FORWARD
,
end
);
compiler_use_next_block
(
c
,
next
);
...
...
@@ -2101,8 +2226,8 @@ compiler_if(struct compiler *c, stmt_ty s)
}
else
next
=
end
;
VISIT
(
c
,
expr
,
s
->
v
.
If
.
test
);
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
next
)
;
if
(
!
compiler_jump_if
(
c
,
s
->
v
.
If
.
test
,
next
,
0
))
return
0
;
VISIT_SEQ
(
c
,
stmt
,
s
->
v
.
If
.
body
);
if
(
asdl_seq_LEN
(
s
->
v
.
If
.
orelse
))
{
ADDOP_JREL
(
c
,
JUMP_FORWARD
,
end
);
...
...
@@ -2261,8 +2386,8 @@ compiler_while(struct compiler *c, stmt_ty s)
if
(
!
compiler_push_fblock
(
c
,
LOOP
,
loop
))
return
0
;
if
(
constant
==
-
1
)
{
VISIT
(
c
,
expr
,
s
->
v
.
While
.
test
);
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
anchor
)
;
if
(
!
compiler_jump_if
(
c
,
s
->
v
.
While
.
test
,
anchor
,
0
))
return
0
;
}
VISIT_SEQ
(
c
,
stmt
,
s
->
v
.
While
.
body
);
ADDOP_JABS
(
c
,
JUMP_ABSOLUTE
,
loop
);
...
...
@@ -2721,11 +2846,11 @@ compiler_assert(struct compiler *c, stmt_ty s)
}
Py_DECREF
(
msg
);
}
VISIT
(
c
,
expr
,
s
->
v
.
Assert
.
test
);
end
=
compiler_new_block
(
c
);
if
(
end
==
NULL
)
return
0
;
ADDOP_JABS
(
c
,
POP_JUMP_IF_TRUE
,
end
);
if
(
!
compiler_jump_if
(
c
,
s
->
v
.
Assert
.
test
,
end
,
1
))
return
0
;
ADDOP_O
(
c
,
LOAD_GLOBAL
,
assertion_error
,
names
);
if
(
s
->
v
.
Assert
.
msg
)
{
VISIT
(
c
,
expr
,
s
->
v
.
Assert
.
msg
);
...
...
@@ -2909,35 +3034,6 @@ binop(struct compiler *c, operator_ty op)
}
}
static
int
cmpop
(
cmpop_ty
op
)
{
switch
(
op
)
{
case
Eq
:
return
PyCmp_EQ
;
case
NotEq
:
return
PyCmp_NE
;
case
Lt
:
return
PyCmp_LT
;
case
LtE
:
return
PyCmp_LE
;
case
Gt
:
return
PyCmp_GT
;
case
GtE
:
return
PyCmp_GE
;
case
Is
:
return
PyCmp_IS
;
case
IsNot
:
return
PyCmp_IS_NOT
;
case
In
:
return
PyCmp_IN
;
case
NotIn
:
return
PyCmp_NOT_IN
;
default:
return
PyCmp_BAD
;
}
}
static
int
inplace_binop
(
struct
compiler
*
c
,
operator_ty
op
)
{
...
...
@@ -3676,8 +3772,8 @@ compiler_sync_comprehension_generator(struct compiler *c,
n
=
asdl_seq_LEN
(
gen
->
ifs
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
expr_ty
e
=
(
expr_ty
)
asdl_seq_GET
(
gen
->
ifs
,
i
);
VISIT
(
c
,
expr
,
e
);
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
if_cleanup
)
;
if
(
!
compiler_jump_if
(
c
,
e
,
if_cleanup
,
0
))
return
0
;
NEXT_BLOCK
(
c
);
}
...
...
@@ -3807,8 +3903,8 @@ compiler_async_comprehension_generator(struct compiler *c,
n
=
asdl_seq_LEN
(
gen
->
ifs
);
for
(
i
=
0
;
i
<
n
;
i
++
)
{
expr_ty
e
=
(
expr_ty
)
asdl_seq_GET
(
gen
->
ifs
,
i
);
VISIT
(
c
,
expr
,
e
);
ADDOP_JABS
(
c
,
POP_JUMP_IF_FALSE
,
if_cleanup
)
;
if
(
!
compiler_jump_if
(
c
,
e
,
if_cleanup
,
0
))
return
0
;
NEXT_BLOCK
(
c
);
}
...
...
Python/importlib.h
View file @
36ff451e
...
...
@@ -1411,422 +1411,422 @@ const unsigned char _Py_M__importlib[] = {
102
,
105
,
110
,
100
,
95
,
115
,
112
,
101
,
99
,
95
,
108
,
101
,
103
,
97
,
99
,
121
,
84
,
3
,
0
,
0
,
115
,
8
,
0
,
0
,
0
,
0
,
3
,
12
,
1
,
8
,
1
,
4
,
1
,
114
,
165
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
10
,
0
,
0
,
0
,
27
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
24
2
,
0
,
0
,
0
,
0
,
0
,
0
,
27
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
24
0
,
0
,
0
,
0
,
116
,
0
,
106
,
1
,
125
,
3
,
124
,
3
,
100
,
1
,
107
,
8
,
114
,
22
,
116
,
2
,
100
,
2
,
131
,
1
,
130
,
1
,
124
,
3
,
115
,
38
,
116
,
3
,
160
,
4
,
100
,
3
,
116
,
5
,
161
,
2
,
1
,
0
,
124
,
0
,
116
,
0
,
106
,
6
,
107
,
6
,
125
,
4
,
120
,
18
8
,
124
,
3
,
68
,
0
,
93
,
176
,
125
,
5
,
116
,
7
,
131
,
0
,
143
,
72
,
120
,
18
6
,
124
,
3
,
68
,
0
,
93
,
174
,
125
,
5
,
116
,
7
,
131
,
0
,
143
,
72
,
1
,
0
,
121
,
10
,
124
,
5
,
106
,
8
,
125
,
6
,
87
,
0
,
110
,
42
,
4
,
0
,
116
,
9
,
107
,
10
,
114
,
118
,
1
,
0
,
1
,
0
,
1
,
0
,
116
,
10
,
124
,
5
,
124
,
0
,
124
,
1
,
131
,
3
,
125
,
7
,
124
,
7
,
100
,
1
,
107
,
8
,
114
,
114
,
119
,
54
,
89
,
0
,
110
,
14
,
88
,
0
,
124
,
6
,
124
,
0
,
124
,
1
,
124
,
2
,
131
,
3
,
125
,
7
,
87
,
0
,
100
,
1
,
81
,
0
,
82
,
0
,
88
,
0
,
124
,
7
,
100
,
1
,
107
,
9
,
114
,
54
,
124
,
4
,
12
,
0
,
114
,
226
,
124
,
0
,
116
,
0
,
106
,
6
,
107
,
6
,
114
,
226
,
116
,
0
,
106
,
6
,
124
,
0
,
25
,
0
,
125
,
8
,
121
,
10
,
124
,
8
,
106
,
11
,
125
,
9
,
87
,
0
,
110
,
20
,
4
,
0
,
116
,
9
,
107
,
10
,
114
,
206
,
1
,
0
,
1
,
0
,
1
,
0
,
124
,
7
,
83
,
0
,
88
,
0
,
124
,
9
,
100
,
1
,
107
,
8
,
114
,
220
,
124
,
7
,
83
,
0
,
124
,
9
,
83
,
0
,
113
,
54
,
124
,
7
,
83
,
0
,
113
,
54
,
87
,
0
,
100
,
1
,
83
,
0
,
100
,
1
,
83
,
0
,
41
,
4
,
122
,
21
,
70
,
105
,
110
,
100
,
32
,
97
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
39
,
115
,
32
,
115
,
112
,
101
,
99
,
46
,
78
,
122
,
53
,
115
,
121
,
115
,
46
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
32
,
105
,
115
,
32
,
78
,
111
,
110
,
101
,
44
,
32
,
80
,
121
,
116
,
104
,
111
,
110
,
32
,
105
,
115
,
32
,
108
,
105
,
107
,
101
,
108
,
121
,
32
,
115
,
104
,
117
,
116
,
116
,
105
,
110
,
103
,
32
,
100
,
111
,
119
,
110
,
122
,
22
,
115
,
121
,
115
,
46
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
32
,
105
,
115
,
32
,
101
,
109
,
112
,
116
,
121
,
41
,
12
,
114
,
14
,
0
,
0
,
0
,
218
,
9
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
114
,
70
,
0
,
0
,
0
,
218
,
9
,
95
,
119
,
97
,
114
,
110
,
105
,
110
,
103
,
115
,
218
,
4
,
119
,
97
,
114
,
110
,
218
,
13
,
73
,
109
,
112
,
111
,
114
,
116
,
87
,
97
,
114
,
110
,
105
,
110
,
103
,
114
,
79
,
0
,
0
,
0
,
114
,
157
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
90
,
0
,
0
,
0
,
114
,
165
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
41
,
10
,
114
,
15
,
0
,
0
,
0
,
114
,
144
,
0
,
0
,
0
,
114
,
145
,
0
,
0
,
0
,
114
,
166
,
0
,
0
,
0
,
90
,
9
,
105
,
115
,
95
,
114
,
101
,
108
,
111
,
97
,
100
,
114
,
164
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
10
,
95
,
102
,
105
,
110
,
100
,
95
,
115
,
112
,
101
,
99
,
93
,
3
,
0
,
0
,
115
,
54
,
0
,
0
,
0
,
0
,
2
,
6
,
1
,
8
,
2
,
8
,
3
,
4
,
1
,
12
,
5
,
10
,
1
,
10
,
1
,
8
,
1
,
2
,
1
,
10
,
1
,
14
,
1
,
12
,
1
,
8
,
1
,
8
,
2
,
22
,
1
,
8
,
2
,
16
,
1
,
10
,
1
,
2
,
1
,
10
,
1
,
14
,
4
,
6
,
2
,
8
,
1
,
4
,
2
,
6
,
2
,
8
,
2
,
114
,
170
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
140
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
116
,
1
,
131
,
2
,
115
,
28
,
116
,
2
,
100
,
1
,
160
,
3
,
116
,
4
,
124
,
0
,
131
,
1
,
161
,
1
,
131
,
1
,
130
,
1
,
124
,
2
,
100
,
2
,
107
,
0
,
114
,
44
,
116
,
5
,
100
,
3
,
131
,
1
,
130
,
1
,
124
,
2
,
100
,
2
,
107
,
4
,
114
,
114
,
116
,
0
,
124
,
1
,
116
,
1
,
131
,
2
,
115
,
72
,
116
,
2
,
100
,
4
,
131
,
1
,
130
,
1
,
110
,
42
,
124
,
1
,
115
,
86
,
116
,
6
,
100
,
5
,
131
,
1
,
130
,
1
,
110
,
28
,
124
,
1
,
116
,
7
,
106
,
8
,
107
,
7
,
114
,
114
,
100
,
6
,
125
,
3
,
116
,
9
,
124
,
3
,
160
,
3
,
124
,
1
,
161
,
1
,
131
,
1
,
130
,
1
,
124
,
0
,
12
,
0
,
114
,
136
,
124
,
2
,
100
,
2
,
107
,
2
,
114
,
136
,
116
,
5
,
100
,
7
,
131
,
1
,
130
,
1
,
100
,
8
,
83
,
0
,
41
,
9
,
122
,
28
,
86
,
101
,
114
,
105
,
102
,
121
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
115
,
32
,
97
,
114
,
101
,
32
,
34
,
115
,
97
,
110
,
101
,
34
,
46
,
122
,
31
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
115
,
116
,
114
,
44
,
32
,
110
,
111
,
116
,
32
,
123
,
125
,
114
,
19
,
0
,
0
,
0
,
122
,
18
,
108
,
101
,
118
,
101
,
108
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
62
,
61
,
32
,
48
,
122
,
31
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
110
,
111
,
116
,
32
,
115
,
101
,
116
,
32
,
116
,
111
,
32
,
97
,
32
,
115
,
116
,
114
,
105
,
110
,
103
,
122
,
54
,
97
,
116
,
116
,
101
,
109
,
112
,
116
,
101
,
100
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
119
,
105
,
116
,
104
,
32
,
110
,
111
,
32
,
107
,
110
,
111
,
119
,
110
,
32
,
112
,
97
,
114
,
101
,
110
,
116
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
122
,
61
,
80
,
97
,
114
,
101
,
110
,
116
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
123
,
33
,
114
,
125
,
32
,
110
,
111
,
116
,
32
,
108
,
111
,
97
,
100
,
101
,
100
,
44
,
32
,
99
,
97
,
110
,
110
,
111
,
116
,
32
,
112
,
101
,
114
,
102
,
111
,
114
,
109
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
122
,
17
,
69
,
109
,
112
,
116
,
121
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
78
,
41
,
10
,
218
,
10
,
105
,
115
,
105
,
110
,
115
,
116
,
97
,
110
,
99
,
101
,
218
,
3
,
115
,
116
,
114
,
218
,
9
,
84
,
121
,
112
,
101
,
69
,
114
,
114
,
111
,
114
,
114
,
38
,
0
,
0
,
0
,
114
,
13
,
0
,
0
,
0
,
114
,
160
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
218
,
11
,
83
,
121
,
115
,
116
,
101
,
109
,
69
,
114
,
114
,
111
,
114
,
41
,
4
,
114
,
15
,
0
,
0
,
0
,
114
,
161
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
139
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
13
,
95
,
115
,
97
,
110
,
105
,
116
,
121
,
95
,
99
,
104
,
101
,
99
,
107
,
140
,
3
,
0
,
0
,
115
,
28
,
0
,
0
,
0
,
0
,
2
,
10
,
1
,
18
,
1
,
8
,
1
,
8
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
4
,
1
,
10
,
2
,
10
,
1
,
4
,
2
,
14
,
1
,
14
,
1
,
114
,
175
,
0
,
0
,
0
,
122
,
16
,
78
,
111
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
100
,
32
,
122
,
4
,
123
,
33
,
114
,
125
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
8
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
220
,
0
,
0
,
0
,
100
,
0
,
125
,
2
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
100
,
2
,
25
,
0
,
125
,
3
,
124
,
3
,
114
,
134
,
124
,
3
,
116
,
1
,
106
,
2
,
107
,
7
,
114
,
42
,
116
,
3
,
124
,
1
,
124
,
3
,
131
,
2
,
1
,
0
,
124
,
0
,
116
,
1
,
106
,
2
,
107
,
6
,
114
,
62
,
116
,
1
,
106
,
2
,
124
,
0
,
25
,
0
,
83
,
0
,
116
,
1
,
106
,
2
,
124
,
3
,
25
,
0
,
125
,
4
,
121
,
10
,
124
,
4
,
106
,
4
,
125
,
2
,
87
,
0
,
110
,
50
,
4
,
0
,
116
,
5
,
107
,
10
,
114
,
132
,
1
,
0
,
1
,
0
,
1
,
0
,
116
,
6
,
100
,
3
,
23
,
0
,
160
,
7
,
124
,
0
,
124
,
3
,
161
,
2
,
125
,
5
,
116
,
8
,
124
,
5
,
124
,
0
,
100
,
4
,
141
,
2
,
100
,
0
,
130
,
2
,
89
,
0
,
110
,
2
,
88
,
0
,
116
,
9
,
124
,
0
,
124
,
2
,
131
,
2
,
125
,
6
,
124
,
6
,
100
,
0
,
107
,
8
,
114
,
172
,
116
,
8
,
116
,
6
,
160
,
7
,
124
,
0
,
161
,
1
,
124
,
0
,
100
,
4
,
141
,
2
,
130
,
1
,
110
,
8
,
116
,
10
,
124
,
6
,
131
,
1
,
125
,
7
,
124
,
3
,
114
,
216
,
116
,
1
,
106
,
2
,
124
,
3
,
25
,
0
,
125
,
4
,
116
,
11
,
124
,
4
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
100
,
5
,
25
,
0
,
124
,
7
,
131
,
3
,
1
,
0
,
124
,
7
,
83
,
0
,
41
,
6
,
78
,
114
,
117
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
122
,
23
,
59
,
32
,
123
,
33
,
114
,
125
,
32
,
105
,
115
,
32
,
110
,
111
,
116
,
32
,
97
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
41
,
1
,
114
,
15
,
0
,
0
,
0
,
233
,
2
,
0
,
0
,
0
,
41
,
12
,
114
,
118
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
127
,
0
,
0
,
0
,
114
,
90
,
0
,
0
,
0
,
218
,
8
,
95
,
69
,
82
,
82
,
95
,
77
,
83
,
71
,
114
,
38
,
0
,
0
,
0
,
218
,
19
,
77
,
111
,
100
,
117
,
108
,
101
,
78
,
111
,
116
,
70
,
111
,
117
,
110
,
100
,
69
,
114
,
114
,
111
,
114
,
114
,
170
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
114
,
5
,
0
,
0
,
0
,
41
,
8
,
114
,
15
,
0
,
0
,
0
,
218
,
7
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
114
,
144
,
0
,
0
,
0
,
114
,
119
,
0
,
0
,
0
,
90
,
13
,
112
,
97
,
114
,
101
,
110
,
116
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
114
,
139
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
23
,
95
,
102
,
105
,
110
,
100
,
95
,
97
,
110
,
100
,
95
,
108
,
111
,
97
,
100
,
95
,
117
,
110
,
108
,
111
,
99
,
107
,
101
,
100
,
163
,
3
,
0
,
0
,
115
,
42
,
0
,
0
,
0
,
0
,
1
,
4
,
1
,
14
,
1
,
4
,
1
,
10
,
1
,
10
,
2
,
10
,
1
,
10
,
1
,
10
,
1
,
2
,
1
,
10
,
1
,
14
,
1
,
16
,
1
,
20
,
1
,
10
,
1
,
8
,
1
,
20
,
2
,
8
,
1
,
4
,
2
,
10
,
1
,
22
,
1
,
114
,
180
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
10
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
30
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
131
,
1
,
143
,
12
,
1
,
0
,
116
,
1
,
124
,
0
,
124
,
1
,
131
,
2
,
83
,
0
,
81
,
0
,
82
,
0
,
88
,
0
,
100
,
1
,
83
,
0
,
41
,
2
,
122
,
54
,
70
,
105
,
110
,
100
,
32
,
97
,
110
,
100
,
32
,
108
,
111
,
97
,
100
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
44
,
32
,
97
,
110
,
100
,
32
,
114
,
101
,
108
,
101
,
97
,
115
,
101
,
32
,
116
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
108
,
111
,
99
,
107
,
46
,
78
,
41
,
2
,
114
,
42
,
0
,
0
,
0
,
114
,
180
,
0
,
0
,
0
,
41
,
2
,
114
,
15
,
0
,
0
,
0
,
114
,
179
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
14
,
95
,
102
,
105
,
110
,
100
,
95
,
97
,
110
,
100
,
95
,
108
,
111
,
97
,
100
,
190
,
3
,
0
,
0
,
115
,
4
,
0
,
0
,
0
,
0
,
2
,
10
,
1
,
114
,
181
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
120
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
124
,
1
,
124
,
2
,
131
,
3
,
1
,
0
,
124
,
2
,
100
,
1
,
107
,
4
,
114
,
32
,
116
,
1
,
124
,
0
,
124
,
1
,
124
,
2
,
131
,
3
,
125
,
0
,
116
,
2
,
160
,
3
,
161
,
0
,
1
,
0
,
124
,
0
,
116
,
4
,
106
,
5
,
107
,
7
,
114
,
60
,
116
,
6
,
124
,
0
,
116
,
7
,
131
,
2
,
83
,
0
,
116
,
4
,
106
,
5
,
124
,
0
,
25
,
0
,
125
,
3
,
124
,
3
,
100
,
2
,
107
,
8
,
114
,
108
,
116
,
2
,
160
,
8
,
161
,
0
,
1
,
0
,
100
,
3
,
160
,
9
,
124
,
0
,
161
,
1
,
125
,
4
,
116
,
10
,
124
,
4
,
124
,
0
,
100
,
4
,
141
,
2
,
130
,
1
,
116
,
11
,
124
,
0
,
131
,
1
,
1
,
0
,
124
,
3
,
83
,
0
,
41
,
5
,
97
,
50
,
1
,
0
,
0
,
73
,
109
,
112
,
111
,
114
,
116
,
32
,
97
,
110
,
100
,
32
,
114
,
101
,
116
,
117
,
114
,
110
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
98
,
97
,
115
,
101
,
100
,
32
,
111
,
110
,
32
,
105
,
116
,
115
,
32
,
110
,
97
,
109
,
101
,
44
,
32
,
116
,
104
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
116
,
104
,
101
,
32
,
99
,
97
,
108
,
108
,
32
,
105
,
115
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
105
,
110
,
103
,
32
,
109
,
97
,
100
,
101
,
32
,
102
,
114
,
111
,
109
,
44
,
32
,
97
,
110
,
100
,
32
,
116
,
104
,
101
,
32
,
108
,
101
,
118
,
101
,
108
,
32
,
97
,
100
,
106
,
117
,
115
,
116
,
109
,
101
,
110
,
116
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
105
,
115
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
115
,
32
,
116
,
104
,
101
,
32
,
103
,
114
,
101
,
97
,
116
,
101
,
115
,
116
,
32
,
99
,
111
,
109
,
109
,
111
,
110
,
32
,
100
,
101
,
110
,
111
,
109
,
105
,
110
,
97
,
116
,
111
,
114
,
32
,
111
,
102
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
97
,
108
,
105
,
116
,
121
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
116
,
119
,
101
,
101
,
110
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
97
,
110
,
100
,
32
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
46
,
32
,
84
,
104
,
105
,
115
,
32
,
105
,
110
,
99
,
108
,
117
,
100
,
101
,
115
,
32
,
115
,
101
,
116
,
116
,
105
,
110
,
103
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
105
,
102
,
10
,
32
,
32
,
32
,
32
,
116
,
104
,
101
,
32
,
108
,
111
,
97
,
100
,
101
,
114
,
32
,
100
,
105
,
100
,
32
,
110
,
111
,
116
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
19
,
0
,
0
,
0
,
78
,
122
,
40
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
111
,
102
,
32
,
123
,
125
,
32
,
104
,
97
,
108
,
116
,
101
,
100
,
59
,
32
,
78
,
111
,
110
,
101
,
32
,
105
,
110
,
32
,
115
,
121
,
115
,
46
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
41
,
1
,
114
,
15
,
0
,
0
,
0
,
41
,
12
,
114
,
175
,
0
,
0
,
0
,
114
,
163
,
0
,
0
,
0
,
114
,
46
,
0
,
0
,
0
,
114
,
137
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
181
,
0
,
0
,
0
,
218
,
11
,
95
,
103
,
99
,
100
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
114
,
47
,
0
,
0
,
0
,
114
,
38
,
0
,
0
,
0
,
114
,
178
,
0
,
0
,
0
,
114
,
56
,
0
,
0
,
0
,
41
,
5
,
114
,
15
,
0
,
0
,
0
,
114
,
161
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
67
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
114
,
182
,
0
,
0
,
0
,
196
,
3
,
0
,
0
,
115
,
28
,
0
,
0
,
0
,
0
,
9
,
12
,
1
,
8
,
1
,
12
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
10
,
1
,
8
,
1
,
8
,
1
,
4
,
1
,
6
,
1
,
12
,
1
,
8
,
1
,
114
,
182
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
6
,
0
,
0
,
0
,
17
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
164
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
100
,
1
,
131
,
2
,
114
,
160
,
100
,
2
,
124
,
1
,
107
,
6
,
114
,
58
,
116
,
1
,
124
,
1
,
131
,
1
,
125
,
1
,
124
,
1
,
160
,
2
,
100
,
2
,
161
,
1
,
1
,
0
,
116
,
0
,
124
,
0
,
100
,
3
,
131
,
2
,
114
,
58
,
124
,
1
,
160
,
3
,
124
,
0
,
106
,
4
,
161
,
1
,
1
,
0
,
120
,
100
,
124
,
1
,
68
,
0
,
93
,
92
,
125
,
3
,
116
,
0
,
124
,
0
,
124
,
3
,
131
,
2
,
115
,
64
,
100
,
4
,
160
,
5
,
124
,
0
,
106
,
6
,
124
,
3
,
161
,
2
,
125
,
4
,
121
,
14
,
116
,
7
,
124
,
2
,
124
,
4
,
131
,
2
,
1
,
0
,
87
,
0
,
113
,
64
,
4
,
0
,
116
,
8
,
107
,
10
,
114
,
154
,
1
,
0
,
125
,
5
,
1
,
0
,
122
,
20
,
124
,
5
,
106
,
9
,
124
,
4
,
107
,
2
,
114
,
136
,
119
,
64
,
130
,
0
,
87
,
0
,
89
,
0
,
100
,
5
,
100
,
5
,
125
,
5
,
126
,
5
,
88
,
0
,
113
,
64
,
88
,
0
,
113
,
64
,
87
,
0
,
124
,
0
,
83
,
0
,
41
,
6
,
122
,
238
,
70
,
105
,
103
,
117
,
114
,
101
,
32
,
111
,
117
,
116
,
32
,
119
,
104
,
97
,
116
,
32
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
114
,
101
,
116
,
117
,
114
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
32
,
112
,
97
,
114
,
97
,
109
,
101
,
116
,
101
,
114
,
32
,
105
,
115
,
32
,
97
,
32
,
99
,
97
,
108
,
108
,
97
,
98
,
108
,
101
,
32
,
119
,
104
,
105
,
99
,
104
,
32
,
116
,
97
,
107
,
101
,
115
,
32
,
116
,
104
,
101
,
32
,
110
,
97
,
109
,
101
,
32
,
111
,
102
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
116
,
111
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
46
,
32
,
73
,
116
,
32
,
105
,
115
,
32
,
114
,
101
,
113
,
117
,
105
,
114
,
101
,
100
,
32
,
116
,
111
,
32
,
100
,
101
,
99
,
111
,
117
,
112
,
108
,
101
,
32
,
116
,
104
,
101
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
32
,
102
,
114
,
111
,
109
,
32
,
97
,
115
,
115
,
117
,
109
,
105
,
110
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
39
,
115
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
105
,
109
,
112
,
108
,
101
,
109
,
101
,
110
,
116
,
97
,
116
,
105
,
111
,
110
,
32
,
105
,
115
,
32
,
100
,
101
,
115
,
105
,
114
,
101
,
100
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
127
,
0
,
0
,
0
,
250
,
1
,
42
,
218
,
7
,
95
,
95
,
97
,
108
,
108
,
95
,
95
,
122
,
5
,
123
,
125
,
46
,
123
,
125
,
78
,
41
,
10
,
114
,
4
,
0
,
0
,
0
,
114
,
126
,
0
,
0
,
0
,
218
,
6
,
114
,
101
,
109
,
111
,
118
,
101
,
218
,
6
,
101
,
120
,
116
,
101
,
110
,
100
,
114
,
184
,
0
,
0
,
0
,
114
,
38
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
178
,
0
,
0
,
0
,
114
,
15
,
0
,
0
,
0
,
41
,
6
,
114
,
83
,
0
,
0
,
0
,
218
,
8
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
114
,
179
,
0
,
0
,
0
,
218
,
1
,
120
,
90
,
9
,
102
,
114
,
111
,
109
,
95
,
110
,
97
,
109
,
101
,
90
,
3
,
101
,
120
,
99
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
16
,
95
,
104
,
97
,
110
,
100
,
108
,
101
,
95
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
221
,
3
,
0
,
0
,
115
,
32
,
0
,
0
,
0
,
0
,
10
,
10
,
1
,
8
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
12
,
1
,
10
,
1
,
10
,
1
,
14
,
1
,
2
,
1
,
14
,
1
,
16
,
4
,
10
,
1
,
2
,
1
,
24
,
1
,
114
,
189
,
0
,
0
,
0
,
99
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
6
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
146
,
0
,
0
,
0
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
125
,
1
,
124
,
0
,
160
,
0
,
100
,
2
,
161
,
1
,
125
,
2
,
124
,
1
,
100
,
3
,
107
,
9
,
114
,
82
,
124
,
2
,
100
,
3
,
107
,
9
,
114
,
78
,
124
,
1
,
124
,
2
,
106
,
1
,
107
,
3
,
114
,
78
,
116
,
2
,
106
,
3
,
100
,
4
,
124
,
1
,
155
,
2
,
100
,
5
,
124
,
2
,
106
,
1
,
155
,
2
,
100
,
6
,
157
,
5
,
116
,
4
,
100
,
7
,
100
,
8
,
141
,
3
,
1
,
0
,
124
,
1
,
83
,
0
,
124
,
2
,
100
,
3
,
107
,
9
,
114
,
96
,
124
,
2
,
106
,
1
,
83
,
0
,
116
,
2
,
106
,
3
,
100
,
9
,
116
,
4
,
100
,
7
,
100
,
8
,
141
,
3
,
1
,
0
,
124
,
0
,
100
,
10
,
25
,
0
,
125
,
1
,
100
,
11
,
124
,
0
,
107
,
7
,
114
,
142
,
124
,
1
,
160
,
5
,
100
,
12
,
161
,
1
,
100
,
13
,
25
,
0
,
125
,
1
,
124
,
1
,
83
,
0
,
41
,
14
,
122
,
167
,
67
,
97
,
108
,
99
,
117
,
108
,
97
,
116
,
101
,
32
,
119
,
104
,
97
,
116
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
98
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
105
,
115
,
32
,
110
,
111
,
116
,
32
,
103
,
117
,
97
,
114
,
97
,
110
,
116
,
101
,
101
,
100
,
32
,
116
,
111
,
32
,
98
,
101
,
32
,
100
,
101
,
102
,
105
,
110
,
101
,
100
,
32
,
111
,
114
,
32
,
99
,
111
,
117
,
108
,
100
,
32
,
98
,
101
,
32
,
115
,
101
,
116
,
32
,
116
,
111
,
32
,
78
,
111
,
110
,
101
,
10
,
32
,
32
,
32
,
32
,
116
,
111
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
32
,
116
,
104
,
97
,
116
,
32
,
105
,
116
,
115
,
32
,
112
,
114
,
111
,
112
,
101
,
114
,
32
,
118
,
97
,
108
,
117
,
101
,
32
,
105
,
115
,
32
,
117
,
110
,
107
,
110
,
111
,
119
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
130
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
78
,
122
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
33
,
61
,
32
,
95
,
95
,
115
,
112
,
101
,
99
,
95
,
95
,
46
,
112
,
97
,
114
,
101
,
110
,
116
,
32
,
40
,
122
,
4
,
32
,
33
,
61
,
32
,
250
,
1
,
41
,
233
,
3
,
0
,
0
,
0
,
41
,
1
,
90
,
10
,
115
,
116
,
97
,
99
,
107
,
108
,
101
,
118
,
101
,
108
,
122
,
89
,
99
,
97
,
110
,
39
,
116
,
32
,
114
,
101
,
115
,
111
,
108
,
118
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
102
,
114
,
111
,
109
,
32
,
95
,
95
,
115
,
112
,
101
,
99
,
95
,
95
,
32
,
111
,
114
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
44
,
32
,
102
,
97
,
108
,
108
,
105
,
110
,
103
,
32
,
98
,
97
,
99
,
107
,
32
,
111
,
110
,
32
,
95
,
95
,
110
,
97
,
109
,
101
,
95
,
95
,
32
,
97
,
110
,
100
,
32
,
95
,
95
,
112
,
97
,
116
,
104
,
95
,
95
,
114
,
1
,
0
,
0
,
0
,
114
,
127
,
0
,
0
,
0
,
114
,
117
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
41
,
6
,
114
,
30
,
0
,
0
,
0
,
114
,
119
,
0
,
0
,
0
,
114
,
167
,
0
,
0
,
0
,
114
,
168
,
0
,
0
,
0
,
114
,
169
,
0
,
0
,
0
,
114
,
118
,
0
,
0
,
0
,
41
,
3
,
218
,
7
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
114
,
161
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
17
,
95
,
99
,
97
,
108
,
99
,
95
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
252
,
3
,
0
,
0
,
115
,
30
,
0
,
0
,
0
,
0
,
7
,
10
,
1
,
10
,
1
,
8
,
1
,
18
,
1
,
22
,
2
,
10
,
1
,
4
,
1
,
8
,
1
,
6
,
2
,
6
,
2
,
10
,
1
,
8
,
1
,
8
,
1
,
14
,
1
,
114
,
193
,
0
,
0
,
0
,
99
,
5
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
9
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
166
,
0
,
0
,
0
,
124
,
4
,
100
,
1
,
107
,
2
,
114
,
18
,
116
,
0
,
124
,
0
,
131
,
1
,
125
,
5
,
110
,
36
,
124
,
1
,
100
,
2
,
107
,
9
,
114
,
30
,
124
,
1
,
110
,
2
,
105
,
0
,
125
,
6
,
116
,
1
,
124
,
6
,
131
,
1
,
125
,
7
,
116
,
0
,
124
,
0
,
124
,
7
,
124
,
4
,
131
,
3
,
125
,
5
,
124
,
3
,
115
,
150
,
124
,
4
,
100
,
1
,
107
,
2
,
114
,
84
,
116
,
0
,
124
,
0
,
160
,
2
,
100
,
3
,
161
,
1
,
100
,
1
,
25
,
0
,
131
,
1
,
83
,
0
,
124
,
0
,
115
,
92
,
124
,
5
,
83
,
0
,
116
,
3
,
124
,
0
,
131
,
1
,
116
,
3
,
124
,
0
,
160
,
2
,
100
,
3
,
161
,
1
,
100
,
1
,
25
,
0
,
131
,
1
,
24
,
0
,
125
,
8
,
116
,
4
,
106
,
5
,
124
,
5
,
106
,
6
,
100
,
2
,
116
,
3
,
124
,
5
,
106
,
6
,
131
,
1
,
124
,
8
,
24
,
0
,
133
,
2
,
25
,
0
,
25
,
0
,
83
,
0
,
110
,
12
,
116
,
7
,
124
,
5
,
124
,
3
,
116
,
0
,
131
,
3
,
83
,
0
,
100
,
2
,
83
,
0
,
41
,
4
,
97
,
215
,
1
,
0
,
0
,
73
,
109
,
112
,
111
,
114
,
116
,
32
,
97
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
101
,
32
,
39
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
105
,
115
,
32
,
117
,
115
,
101
,
100
,
32
,
116
,
111
,
32
,
105
,
110
,
102
,
101
,
114
,
32
,
119
,
104
,
101
,
114
,
101
,
32
,
116
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
105
,
115
,
32
,
111
,
99
,
99
,
117
,
114
,
114
,
105
,
110
,
103
,
32
,
102
,
114
,
111
,
109
,
10
,
32
,
32
,
32
,
32
,
116
,
111
,
32
,
104
,
97
,
110
,
100
,
108
,
101
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
115
,
46
,
32
,
84
,
104
,
101
,
32
,
39
,
108
,
111
,
99
,
97
,
108
,
115
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
105
,
115
,
32
,
105
,
103
,
110
,
111
,
114
,
101
,
100
,
46
,
32
,
84
,
104
,
101
,
10
,
32
,
32
,
32
,
32
,
39
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
115
,
112
,
101
,
99
,
105
,
102
,
105
,
101
,
115
,
32
,
119
,
104
,
97
,
116
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
101
,
120
,
105
,
115
,
116
,
32
,
97
,
115
,
32
,
97
,
116
,
116
,
114
,
105
,
98
,
117
,
116
,
101
,
115
,
32
,
111
,
110
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
105
,
110
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
100
,
32
,
40
,
101
,
46
,
103
,
46
,
32
,
96
,
96
,
102
,
114
,
111
,
109
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
60
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
62
,
96
,
96
,
41
,
46
,
32
,
32
,
84
,
104
,
101
,
32
,
39
,
108
,
101
,
118
,
101
,
108
,
39
,
10
,
32
,
32
,
32
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
115
,
32
,
116
,
104
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
108
,
111
,
99
,
97
,
116
,
105
,
111
,
110
,
32
,
116
,
111
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
102
,
114
,
111
,
109
,
32
,
105
,
110
,
32
,
97
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
40
,
101
,
46
,
103
,
46
,
32
,
96
,
96
,
102
,
114
,
111
,
109
,
32
,
46
,
46
,
112
,
107
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
109
,
111
,
100
,
96
,
96
,
32
,
119
,
111
,
117
,
108
,
100
,
32
,
104
,
97
,
118
,
101
,
32
,
97
,
32
,
39
,
108
,
101
,
118
,
101
,
108
,
39
,
32
,
111
,
102
,
32
,
50
,
41
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
19
,
0
,
0
,
0
,
78
,
114
,
117
,
0
,
0
,
0
,
41
,
8
,
114
,
182
,
0
,
0
,
0
,
114
,
193
,
0
,
0
,
0
,
218
,
9
,
112
,
97
,
114
,
116
,
105
,
116
,
105
,
111
,
110
,
114
,
159
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
189
,
0
,
0
,
0
,
41
,
9
,
114
,
15
,
0
,
0
,
0
,
114
,
192
,
0
,
0
,
0
,
218
,
6
,
108
,
111
,
99
,
97
,
108
,
115
,
114
,
187
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
90
,
8
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
95
,
114
,
161
,
0
,
0
,
0
,
90
,
7
,
99
,
117
,
116
,
95
,
111
,
102
,
102
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
10
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
23
,
4
,
0
,
0
,
115
,
26
,
0
,
0
,
0
,
0
,
11
,
8
,
1
,
10
,
2
,
16
,
1
,
8
,
1
,
12
,
1
,
4
,
3
,
8
,
1
,
18
,
1
,
4
,
1
,
4
,
4
,
26
,
3
,
32
,
2
,
114
,
196
,
0
,
0
,
0
,
99
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
38
,
0
,
0
,
0
,
116
,
0
,
160
,
1
,
124
,
0
,
161
,
1
,
125
,
1
,
124
,
1
,
100
,
0
,
107
,
8
,
114
,
30
,
116
,
2
,
100
,
1
,
124
,
0
,
23
,
0
,
131
,
1
,
130
,
1
,
116
,
3
,
124
,
1
,
131
,
1
,
83
,
0
,
41
,
2
,
78
,
122
,
25
,
110
,
111
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
100
,
32
,
41
,
4
,
114
,
142
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
41
,
2
,
114
,
15
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
18
,
95
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
102
,
114
,
111
,
109
,
95
,
110
,
97
,
109
,
101
,
58
,
4
,
0
,
0
,
115
,
8
,
0
,
0
,
0
,
0
,
1
,
10
,
1
,
8
,
1
,
12
,
1
,
114
,
197
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
12
,
0
,
0
,
0
,
12
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
244
,
0
,
0
,
0
,
124
,
1
,
97
,
0
,
124
,
0
,
97
,
1
,
116
,
2
,
116
,
1
,
131
,
1
,
125
,
2
,
120
,
86
,
116
,
1
,
106
,
3
,
160
,
4
,
161
,
0
,
68
,
0
,
93
,
72
,
92
,
2
,
125
,
3
,
125
,
4
,
116
,
5
,
124
,
4
,
124
,
2
,
131
,
2
,
114
,
28
,
124
,
3
,
116
,
1
,
106
,
6
,
107
,
6
,
114
,
62
,
116
,
7
,
125
,
5
,
110
,
18
,
116
,
0
,
160
,
8
,
124
,
3
,
161
,
1
,
114
,
28
,
116
,
9
,
125
,
5
,
110
,
2
,
113
,
28
,
116
,
10
,
124
,
4
,
124
,
5
,
131
,
2
,
125
,
6
,
116
,
11
,
124
,
6
,
124
,
4
,
131
,
2
,
1
,
0
,
113
,
28
,
87
,
0
,
116
,
1
,
106
,
3
,
116
,
12
,
25
,
0
,
125
,
7
,
120
,
54
,
100
,
5
,
68
,
0
,
93
,
46
,
125
,
8
,
124
,
8
,
116
,
1
,
106
,
3
,
107
,
7
,
114
,
144
,
116
,
13
,
124
,
8
,
131
,
1
,
125
,
9
,
110
,
10
,
116
,
1
,
106
,
3
,
124
,
8
,
25
,
0
,
125
,
9
,
116
,
14
,
124
,
7
,
124
,
8
,
124
,
9
,
131
,
3
,
1
,
0
,
113
,
120
,
87
,
0
,
121
,
12
,
116
,
13
,
100
,
2
,
131
,
1
,
125
,
10
,
87
,
0
,
110
,
24
,
4
,
0
,
116
,
15
,
107
,
10
,
114
,
206
,
1
,
0
,
1
,
0
,
1
,
0
,
100
,
3
,
125
,
10
,
89
,
0
,
110
,
2
,
88
,
0
,
116
,
14
,
124
,
7
,
100
,
2
,
124
,
10
,
131
,
3
,
1
,
0
,
116
,
13
,
100
,
4
,
131
,
1
,
125
,
11
,
116
,
14
,
124
,
7
,
100
,
4
,
124
,
11
,
131
,
3
,
1
,
0
,
100
,
3
,
83
,
0
,
41
,
6
,
122
,
250
,
83
,
101
,
116
,
117
,
112
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
32
,
98
,
121
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
105
,
110
,
103
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
97
,
110
,
100
,
32
,
105
,
110
,
106
,
101
,
99
,
116
,
105
,
110
,
103
,
32
,
116
,
104
,
101
,
109
,
10
,
32
,
32
,
32
,
32
,
105
,
110
,
116
,
111
,
32
,
116
,
104
,
101
,
32
,
103
,
108
,
111
,
98
,
97
,
108
,
32
,
110
,
97
,
109
,
101
,
115
,
112
,
97
,
99
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
65
,
115
,
32
,
115
,
121
,
115
,
32
,
105
,
115
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
102
,
111
,
114
,
32
,
115
,
121
,
115
,
46
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
97
,
99
,
99
,
101
,
115
,
115
,
32
,
97
,
110
,
100
,
32
,
95
,
105
,
109
,
112
,
32
,
105
,
115
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
116
,
111
,
32
,
108
,
111
,
97
,
100
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
10
,
32
,
32
,
32
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
44
,
32
,
116
,
104
,
111
,
115
,
101
,
32
,
116
,
119
,
111
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
101
,
120
,
112
,
108
,
105
,
99
,
105
,
116
,
108
,
121
,
32
,
112
,
97
,
115
,
115
,
101
,
100
,
32
,
105
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
167
,
0
,
0
,
0
,
114
,
20
,
0
,
0
,
0
,
78
,
114
,
55
,
0
,
0
,
0
,
41
,
1
,
114
,
167
,
0
,
0
,
0
,
41
,
16
,
114
,
46
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
13
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
218
,
5
,
105
,
116
,
101
,
109
,
115
,
114
,
171
,
0
,
0
,
0
,
114
,
69
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
75
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
114
,
128
,
0
,
0
,
0
,
114
,
133
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
197
,
0
,
0
,
0
,
114
,
5
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
41
,
12
,
218
,
10
,
115
,
121
,
115
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
218
,
11
,
95
,
105
,
109
,
112
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
11
,
109
,
111
,
100
,
117
,
108
,
101
,
95
,
116
,
121
,
112
,
101
,
114
,
15
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
93
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
90
,
11
,
115
,
101
,
108
,
102
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
12
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
110
,
97
,
109
,
101
,
90
,
14
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
13
,
116
,
104
,
114
,
101
,
97
,
100
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
14
,
119
,
101
,
97
,
107
,
114
,
101
,
102
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
6
,
95
,
115
,
101
,
116
,
117
,
112
,
65
,
4
,
0
,
0
,
115
,
50
,
0
,
0
,
0
,
0
,
9
,
4
,
1
,
4
,
3
,
8
,
1
,
20
,
1
,
10
,
1
,
10
,
1
,
6
,
1
,
10
,
1
,
6
,
2
,
2
,
1
,
10
,
1
,
14
,
3
,
10
,
1
,
10
,
1
,
10
,
1
,
10
,
2
,
10
,
1
,
16
,
3
,
2
,
1
,
12
,
1
,
14
,
2
,
10
,
1
,
12
,
3
,
8
,
1
,
114
,
201
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
38
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
124
,
1
,
131
,
2
,
1
,
0
,
116
,
1
,
106
,
2
,
160
,
3
,
116
,
4
,
161
,
1
,
1
,
0
,
116
,
1
,
106
,
2
,
160
,
3
,
116
,
5
,
161
,
1
,
1
,
0
,
100
,
1
,
83
,
0
,
41
,
2
,
122
,
48
,
73
,
110
,
115
,
116
,
97
,
108
,
108
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
32
,
102
,
111
,
114
,
32
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
32
,
97
,
110
,
100
,
32
,
102
,
114
,
111
,
122
,
101
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
78
,
41
,
6
,
114
,
201
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
166
,
0
,
0
,
0
,
114
,
109
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
41
,
2
,
114
,
199
,
0
,
0
,
0
,
114
,
200
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
8
,
95
,
105
,
110
,
115
,
116
,
97
,
108
,
108
,
112
,
4
,
0
,
0
,
115
,
6
,
0
,
0
,
0
,
0
,
2
,
10
,
2
,
12
,
1
,
114
,
202
,
0
,
0
,
0
,
99
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
32
,
0
,
0
,
0
,
100
,
1
,
100
,
2
,
108
,
0
,
125
,
0
,
124
,
0
,
97
,
1
,
124
,
0
,
160
,
2
,
116
,
3
,
106
,
4
,
116
,
5
,
25
,
0
,
161
,
1
,
1
,
0
,
100
,
2
,
83
,
0
,
41
,
3
,
122
,
57
,
73
,
110
,
115
,
116
,
97
,
108
,
108
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
32
,
116
,
104
,
97
,
116
,
32
,
114
,
101
,
113
,
117
,
105
,
114
,
101
,
32
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
32
,
102
,
105
,
108
,
101
,
115
,
121
,
115
,
116
,
101
,
109
,
32
,
97
,
99
,
99
,
101
,
115
,
115
,
114
,
19
,
0
,
0
,
0
,
78
,
41
,
6
,
218
,
26
,
95
,
102
,
114
,
111
,
122
,
101
,
110
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
95
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
114
,
115
,
0
,
0
,
0
,
114
,
202
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
41
,
1
,
114
,
203
,
100
,
1
,
107
,
9
,
114
,
54
,
124
,
4
,
115
,
224
,
124
,
0
,
116
,
0
,
106
,
6
,
107
,
6
,
114
,
224
,
116
,
0
,
106
,
6
,
124
,
0
,
25
,
0
,
125
,
8
,
121
,
10
,
124
,
8
,
106
,
11
,
125
,
9
,
87
,
0
,
110
,
20
,
4
,
0
,
116
,
9
,
107
,
10
,
114
,
204
,
1
,
0
,
1
,
0
,
1
,
0
,
124
,
7
,
83
,
0
,
88
,
0
,
124
,
9
,
100
,
1
,
107
,
8
,
114
,
218
,
124
,
7
,
83
,
0
,
124
,
9
,
83
,
0
,
113
,
54
,
124
,
7
,
83
,
0
,
113
,
54
,
87
,
0
,
100
,
1
,
83
,
0
,
100
,
1
,
83
,
0
,
41
,
4
,
122
,
21
,
70
,
105
,
110
,
100
,
32
,
97
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
39
,
115
,
32
,
115
,
112
,
101
,
99
,
46
,
78
,
122
,
53
,
115
,
121
,
115
,
46
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
32
,
105
,
115
,
32
,
78
,
111
,
110
,
101
,
44
,
32
,
80
,
121
,
116
,
104
,
111
,
110
,
32
,
105
,
115
,
32
,
108
,
105
,
107
,
101
,
108
,
121
,
32
,
115
,
104
,
117
,
116
,
116
,
105
,
110
,
103
,
32
,
100
,
111
,
119
,
110
,
122
,
22
,
115
,
121
,
115
,
46
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
32
,
105
,
115
,
32
,
101
,
109
,
112
,
116
,
121
,
41
,
12
,
114
,
14
,
0
,
0
,
0
,
218
,
9
,
109
,
101
,
116
,
97
,
95
,
112
,
97
,
116
,
104
,
114
,
70
,
0
,
0
,
0
,
218
,
9
,
95
,
119
,
97
,
114
,
110
,
105
,
110
,
103
,
115
,
218
,
4
,
119
,
97
,
114
,
110
,
218
,
13
,
73
,
109
,
112
,
111
,
114
,
116
,
87
,
97
,
114
,
110
,
105
,
110
,
103
,
114
,
79
,
0
,
0
,
0
,
114
,
157
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
90
,
0
,
0
,
0
,
114
,
165
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
41
,
10
,
114
,
15
,
0
,
0
,
0
,
114
,
144
,
0
,
0
,
0
,
114
,
145
,
0
,
0
,
0
,
114
,
166
,
0
,
0
,
0
,
90
,
9
,
105
,
115
,
95
,
114
,
101
,
108
,
111
,
97
,
100
,
114
,
164
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
10
,
95
,
102
,
105
,
110
,
100
,
95
,
115
,
112
,
101
,
99
,
93
,
3
,
0
,
0
,
115
,
54
,
0
,
0
,
0
,
0
,
2
,
6
,
1
,
8
,
2
,
8
,
3
,
4
,
1
,
12
,
5
,
10
,
1
,
10
,
1
,
8
,
1
,
2
,
1
,
10
,
1
,
14
,
1
,
12
,
1
,
8
,
1
,
8
,
2
,
22
,
1
,
8
,
2
,
14
,
1
,
10
,
1
,
2
,
1
,
10
,
1
,
14
,
4
,
6
,
2
,
8
,
1
,
4
,
2
,
6
,
2
,
8
,
2
,
114
,
170
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
138
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
116
,
1
,
131
,
2
,
115
,
28
,
116
,
2
,
100
,
1
,
160
,
3
,
116
,
4
,
124
,
0
,
131
,
1
,
161
,
1
,
131
,
1
,
130
,
1
,
124
,
2
,
100
,
2
,
107
,
0
,
114
,
44
,
116
,
5
,
100
,
3
,
131
,
1
,
130
,
1
,
124
,
2
,
100
,
2
,
107
,
4
,
114
,
114
,
116
,
0
,
124
,
1
,
116
,
1
,
131
,
2
,
115
,
72
,
116
,
2
,
100
,
4
,
131
,
1
,
130
,
1
,
110
,
42
,
124
,
1
,
115
,
86
,
116
,
6
,
100
,
5
,
131
,
1
,
130
,
1
,
110
,
28
,
124
,
1
,
116
,
7
,
106
,
8
,
107
,
7
,
114
,
114
,
100
,
6
,
125
,
3
,
116
,
9
,
124
,
3
,
160
,
3
,
124
,
1
,
161
,
1
,
131
,
1
,
130
,
1
,
124
,
0
,
115
,
134
,
124
,
2
,
100
,
2
,
107
,
2
,
114
,
134
,
116
,
5
,
100
,
7
,
131
,
1
,
130
,
1
,
100
,
8
,
83
,
0
,
41
,
9
,
122
,
28
,
86
,
101
,
114
,
105
,
102
,
121
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
115
,
32
,
97
,
114
,
101
,
32
,
34
,
115
,
97
,
110
,
101
,
34
,
46
,
122
,
31
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
115
,
116
,
114
,
44
,
32
,
110
,
111
,
116
,
32
,
123
,
125
,
114
,
19
,
0
,
0
,
0
,
122
,
18
,
108
,
101
,
118
,
101
,
108
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
62
,
61
,
32
,
48
,
122
,
31
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
110
,
111
,
116
,
32
,
115
,
101
,
116
,
32
,
116
,
111
,
32
,
97
,
32
,
115
,
116
,
114
,
105
,
110
,
103
,
122
,
54
,
97
,
116
,
116
,
101
,
109
,
112
,
116
,
101
,
100
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
119
,
105
,
116
,
104
,
32
,
110
,
111
,
32
,
107
,
110
,
111
,
119
,
110
,
32
,
112
,
97
,
114
,
101
,
110
,
116
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
122
,
61
,
80
,
97
,
114
,
101
,
110
,
116
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
123
,
33
,
114
,
125
,
32
,
110
,
111
,
116
,
32
,
108
,
111
,
97
,
100
,
101
,
100
,
44
,
32
,
99
,
97
,
110
,
110
,
111
,
116
,
32
,
112
,
101
,
114
,
102
,
111
,
114
,
109
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
122
,
17
,
69
,
109
,
112
,
116
,
121
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
78
,
41
,
10
,
218
,
10
,
105
,
115
,
105
,
110
,
115
,
116
,
97
,
110
,
99
,
101
,
218
,
3
,
115
,
116
,
114
,
218
,
9
,
84
,
121
,
112
,
101
,
69
,
114
,
114
,
111
,
114
,
114
,
38
,
0
,
0
,
0
,
114
,
13
,
0
,
0
,
0
,
114
,
160
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
218
,
11
,
83
,
121
,
115
,
116
,
101
,
109
,
69
,
114
,
114
,
111
,
114
,
41
,
4
,
114
,
15
,
0
,
0
,
0
,
114
,
161
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
139
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
13
,
95
,
115
,
97
,
110
,
105
,
116
,
121
,
95
,
99
,
104
,
101
,
99
,
107
,
140
,
3
,
0
,
0
,
115
,
28
,
0
,
0
,
0
,
0
,
2
,
10
,
1
,
18
,
1
,
8
,
1
,
8
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
4
,
1
,
10
,
2
,
10
,
1
,
4
,
2
,
14
,
1
,
12
,
1
,
114
,
175
,
0
,
0
,
0
,
122
,
16
,
78
,
111
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
100
,
32
,
122
,
4
,
123
,
33
,
114
,
125
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
8
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
220
,
0
,
0
,
0
,
100
,
0
,
125
,
2
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
100
,
2
,
25
,
0
,
125
,
3
,
124
,
3
,
114
,
134
,
124
,
3
,
116
,
1
,
106
,
2
,
107
,
7
,
114
,
42
,
116
,
3
,
124
,
1
,
124
,
3
,
131
,
2
,
1
,
0
,
124
,
0
,
116
,
1
,
106
,
2
,
107
,
6
,
114
,
62
,
116
,
1
,
106
,
2
,
124
,
0
,
25
,
0
,
83
,
0
,
116
,
1
,
106
,
2
,
124
,
3
,
25
,
0
,
125
,
4
,
121
,
10
,
124
,
4
,
106
,
4
,
125
,
2
,
87
,
0
,
110
,
50
,
4
,
0
,
116
,
5
,
107
,
10
,
114
,
132
,
1
,
0
,
1
,
0
,
1
,
0
,
116
,
6
,
100
,
3
,
23
,
0
,
160
,
7
,
124
,
0
,
124
,
3
,
161
,
2
,
125
,
5
,
116
,
8
,
124
,
5
,
124
,
0
,
100
,
4
,
141
,
2
,
100
,
0
,
130
,
2
,
89
,
0
,
110
,
2
,
88
,
0
,
116
,
9
,
124
,
0
,
124
,
2
,
131
,
2
,
125
,
6
,
124
,
6
,
100
,
0
,
107
,
8
,
114
,
172
,
116
,
8
,
116
,
6
,
160
,
7
,
124
,
0
,
161
,
1
,
124
,
0
,
100
,
4
,
141
,
2
,
130
,
1
,
110
,
8
,
116
,
10
,
124
,
6
,
131
,
1
,
125
,
7
,
124
,
3
,
114
,
216
,
116
,
1
,
106
,
2
,
124
,
3
,
25
,
0
,
125
,
4
,
116
,
11
,
124
,
4
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
100
,
5
,
25
,
0
,
124
,
7
,
131
,
3
,
1
,
0
,
124
,
7
,
83
,
0
,
41
,
6
,
78
,
114
,
117
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
122
,
23
,
59
,
32
,
123
,
33
,
114
,
125
,
32
,
105
,
115
,
32
,
110
,
111
,
116
,
32
,
97
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
41
,
1
,
114
,
15
,
0
,
0
,
0
,
233
,
2
,
0
,
0
,
0
,
41
,
12
,
114
,
118
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
127
,
0
,
0
,
0
,
114
,
90
,
0
,
0
,
0
,
218
,
8
,
95
,
69
,
82
,
82
,
95
,
77
,
83
,
71
,
114
,
38
,
0
,
0
,
0
,
218
,
19
,
77
,
111
,
100
,
117
,
108
,
101
,
78
,
111
,
116
,
70
,
111
,
117
,
110
,
100
,
69
,
114
,
114
,
111
,
114
,
114
,
170
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
114
,
5
,
0
,
0
,
0
,
41
,
8
,
114
,
15
,
0
,
0
,
0
,
218
,
7
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
114
,
144
,
0
,
0
,
0
,
114
,
119
,
0
,
0
,
0
,
90
,
13
,
112
,
97
,
114
,
101
,
110
,
116
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
114
,
139
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
27
,
95
,
105
,
110
,
115
,
116
,
97
,
108
,
108
,
95
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
120
,
4
,
0
,
0
,
115
,
6
,
0
,
0
,
0
,
0
,
3
,
8
,
1
,
4
,
1
,
114
,
204
,
0
,
0
,
0
,
41
,
2
,
78
,
78
,
41
,
1
,
78
,
41
,
2
,
78
,
114
,
19
,
0
,
0
,
0
,
41
,
51
,
114
,
3
,
0
,
0
,
0
,
114
,
115
,
0
,
0
,
0
,
114
,
12
,
0
,
0
,
0
,
114
,
16
,
0
,
0
,
0
,
114
,
51
,
0
,
0
,
0
,
114
,
29
,
0
,
0
,
0
,
114
,
36
,
0
,
0
,
0
,
114
,
17
,
0
,
0
,
0
,
114
,
18
,
0
,
0
,
0
,
114
,
41
,
0
,
0
,
0
,
114
,
42
,
0
,
0
,
0
,
114
,
45
,
0
,
0
,
0
,
114
,
56
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
68
,
0
,
0
,
0
,
114
,
74
,
0
,
0
,
0
,
114
,
77
,
0
,
0
,
0
,
114
,
84
,
0
,
0
,
0
,
114
,
95
,
0
,
0
,
0
,
114
,
96
,
0
,
0
,
0
,
114
,
102
,
0
,
0
,
0
,
114
,
78
,
0
,
0
,
0
,
218
,
6
,
111
,
98
,
106
,
101
,
99
,
116
,
90
,
9
,
95
,
80
,
79
,
80
,
85
,
76
,
65
,
84
,
69
,
114
,
128
,
0
,
0
,
0
,
114
,
133
,
0
,
0
,
0
,
114
,
136
,
0
,
0
,
0
,
114
,
91
,
0
,
0
,
0
,
114
,
80
,
0
,
0
,
0
,
114
,
140
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
114
,
81
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
114
,
157
,
0
,
0
,
0
,
114
,
163
,
0
,
0
,
0
,
114
,
165
,
0
,
0
,
0
,
114
,
170
,
0
,
0
,
0
,
114
,
175
,
0
,
0
,
0
,
90
,
15
,
95
,
69
,
82
,
82
,
95
,
77
,
83
,
71
,
95
,
80
,
82
,
69
,
70
,
73
,
88
,
114
,
177
,
0
,
0
,
0
,
114
,
180
,
0
,
0
,
0
,
114
,
181
,
0
,
0
,
0
,
114
,
182
,
0
,
0
,
0
,
114
,
189
,
0
,
0
,
0
,
114
,
193
,
0
,
0
,
0
,
114
,
196
,
0
,
0
,
0
,
114
,
197
,
0
,
0
,
0
,
114
,
201
,
0
,
0
,
0
,
114
,
202
,
0
,
0
,
0
,
114
,
204
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
8
,
60
,
109
,
111
,
100
,
117
,
108
,
101
,
62
,
25
,
0
,
0
,
0
,
115
,
96
,
0
,
0
,
0
,
4
,
0
,
4
,
2
,
8
,
8
,
8
,
7
,
4
,
2
,
4
,
3
,
16
,
4
,
14
,
68
,
14
,
21
,
14
,
19
,
8
,
19
,
8
,
19
,
8
,
11
,
14
,
8
,
8
,
11
,
8
,
12
,
8
,
16
,
8
,
36
,
14
,
27
,
14
,
101
,
16
,
26
,
6
,
3
,
10
,
45
,
14
,
60
,
8
,
17
,
8
,
17
,
8
,
25
,
8
,
29
,
8
,
23
,
8
,
16
,
14
,
73
,
14
,
77
,
14
,
13
,
8
,
9
,
8
,
9
,
10
,
47
,
8
,
20
,
4
,
1
,
8
,
2
,
8
,
27
,
8
,
6
,
10
,
25
,
8
,
31
,
8
,
27
,
18
,
35
,
8
,
7
,
8
,
47
,
8
,
8
,
0
,
0
,
218
,
23
,
95
,
102
,
105
,
110
,
100
,
95
,
97
,
110
,
100
,
95
,
108
,
111
,
97
,
100
,
95
,
117
,
110
,
108
,
111
,
99
,
107
,
101
,
100
,
163
,
3
,
0
,
0
,
115
,
42
,
0
,
0
,
0
,
0
,
1
,
4
,
1
,
14
,
1
,
4
,
1
,
10
,
1
,
10
,
2
,
10
,
1
,
10
,
1
,
10
,
1
,
2
,
1
,
10
,
1
,
14
,
1
,
16
,
1
,
20
,
1
,
10
,
1
,
8
,
1
,
20
,
2
,
8
,
1
,
4
,
2
,
10
,
1
,
22
,
1
,
114
,
180
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
10
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
30
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
131
,
1
,
143
,
12
,
1
,
0
,
116
,
1
,
124
,
0
,
124
,
1
,
131
,
2
,
83
,
0
,
81
,
0
,
82
,
0
,
88
,
0
,
100
,
1
,
83
,
0
,
41
,
2
,
122
,
54
,
70
,
105
,
110
,
100
,
32
,
97
,
110
,
100
,
32
,
108
,
111
,
97
,
100
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
44
,
32
,
97
,
110
,
100
,
32
,
114
,
101
,
108
,
101
,
97
,
115
,
101
,
32
,
116
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
108
,
111
,
99
,
107
,
46
,
78
,
41
,
2
,
114
,
42
,
0
,
0
,
0
,
114
,
180
,
0
,
0
,
0
,
41
,
2
,
114
,
15
,
0
,
0
,
0
,
114
,
179
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
14
,
95
,
102
,
105
,
110
,
100
,
95
,
97
,
110
,
100
,
95
,
108
,
111
,
97
,
100
,
190
,
3
,
0
,
0
,
115
,
4
,
0
,
0
,
0
,
0
,
2
,
10
,
1
,
114
,
181
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
120
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
124
,
1
,
124
,
2
,
131
,
3
,
1
,
0
,
124
,
2
,
100
,
1
,
107
,
4
,
114
,
32
,
116
,
1
,
124
,
0
,
124
,
1
,
124
,
2
,
131
,
3
,
125
,
0
,
116
,
2
,
160
,
3
,
161
,
0
,
1
,
0
,
124
,
0
,
116
,
4
,
106
,
5
,
107
,
7
,
114
,
60
,
116
,
6
,
124
,
0
,
116
,
7
,
131
,
2
,
83
,
0
,
116
,
4
,
106
,
5
,
124
,
0
,
25
,
0
,
125
,
3
,
124
,
3
,
100
,
2
,
107
,
8
,
114
,
108
,
116
,
2
,
160
,
8
,
161
,
0
,
1
,
0
,
100
,
3
,
160
,
9
,
124
,
0
,
161
,
1
,
125
,
4
,
116
,
10
,
124
,
4
,
124
,
0
,
100
,
4
,
141
,
2
,
130
,
1
,
116
,
11
,
124
,
0
,
131
,
1
,
1
,
0
,
124
,
3
,
83
,
0
,
41
,
5
,
97
,
50
,
1
,
0
,
0
,
73
,
109
,
112
,
111
,
114
,
116
,
32
,
97
,
110
,
100
,
32
,
114
,
101
,
116
,
117
,
114
,
110
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
98
,
97
,
115
,
101
,
100
,
32
,
111
,
110
,
32
,
105
,
116
,
115
,
32
,
110
,
97
,
109
,
101
,
44
,
32
,
116
,
104
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
116
,
104
,
101
,
32
,
99
,
97
,
108
,
108
,
32
,
105
,
115
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
105
,
110
,
103
,
32
,
109
,
97
,
100
,
101
,
32
,
102
,
114
,
111
,
109
,
44
,
32
,
97
,
110
,
100
,
32
,
116
,
104
,
101
,
32
,
108
,
101
,
118
,
101
,
108
,
32
,
97
,
100
,
106
,
117
,
115
,
116
,
109
,
101
,
110
,
116
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
105
,
115
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
115
,
32
,
116
,
104
,
101
,
32
,
103
,
114
,
101
,
97
,
116
,
101
,
115
,
116
,
32
,
99
,
111
,
109
,
109
,
111
,
110
,
32
,
100
,
101
,
110
,
111
,
109
,
105
,
110
,
97
,
116
,
111
,
114
,
32
,
111
,
102
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
97
,
108
,
105
,
116
,
121
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
116
,
119
,
101
,
101
,
110
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
97
,
110
,
100
,
32
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
46
,
32
,
84
,
104
,
105
,
115
,
32
,
105
,
110
,
99
,
108
,
117
,
100
,
101
,
115
,
32
,
115
,
101
,
116
,
116
,
105
,
110
,
103
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
105
,
102
,
10
,
32
,
32
,
32
,
32
,
116
,
104
,
101
,
32
,
108
,
111
,
97
,
100
,
101
,
114
,
32
,
100
,
105
,
100
,
32
,
110
,
111
,
116
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
19
,
0
,
0
,
0
,
78
,
122
,
40
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
111
,
102
,
32
,
123
,
125
,
32
,
104
,
97
,
108
,
116
,
101
,
100
,
59
,
32
,
78
,
111
,
110
,
101
,
32
,
105
,
110
,
32
,
115
,
121
,
115
,
46
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
41
,
1
,
114
,
15
,
0
,
0
,
0
,
41
,
12
,
114
,
175
,
0
,
0
,
0
,
114
,
163
,
0
,
0
,
0
,
114
,
46
,
0
,
0
,
0
,
114
,
137
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
181
,
0
,
0
,
0
,
218
,
11
,
95
,
103
,
99
,
100
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
114
,
47
,
0
,
0
,
0
,
114
,
38
,
0
,
0
,
0
,
114
,
178
,
0
,
0
,
0
,
114
,
56
,
0
,
0
,
0
,
41
,
5
,
114
,
15
,
0
,
0
,
0
,
114
,
161
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
67
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
114
,
182
,
0
,
0
,
0
,
196
,
3
,
0
,
0
,
115
,
28
,
0
,
0
,
0
,
0
,
9
,
12
,
1
,
8
,
1
,
12
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
10
,
1
,
8
,
1
,
8
,
1
,
4
,
1
,
6
,
1
,
12
,
1
,
8
,
1
,
114
,
182
,
0
,
0
,
0
,
99
,
3
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
6
,
0
,
0
,
0
,
17
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
164
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
100
,
1
,
131
,
2
,
114
,
160
,
100
,
2
,
124
,
1
,
107
,
6
,
114
,
58
,
116
,
1
,
124
,
1
,
131
,
1
,
125
,
1
,
124
,
1
,
160
,
2
,
100
,
2
,
161
,
1
,
1
,
0
,
116
,
0
,
124
,
0
,
100
,
3
,
131
,
2
,
114
,
58
,
124
,
1
,
160
,
3
,
124
,
0
,
106
,
4
,
161
,
1
,
1
,
0
,
120
,
100
,
124
,
1
,
68
,
0
,
93
,
92
,
125
,
3
,
116
,
0
,
124
,
0
,
124
,
3
,
131
,
2
,
115
,
64
,
100
,
4
,
160
,
5
,
124
,
0
,
106
,
6
,
124
,
3
,
161
,
2
,
125
,
4
,
121
,
14
,
116
,
7
,
124
,
2
,
124
,
4
,
131
,
2
,
1
,
0
,
87
,
0
,
113
,
64
,
4
,
0
,
116
,
8
,
107
,
10
,
114
,
154
,
1
,
0
,
125
,
5
,
1
,
0
,
122
,
20
,
124
,
5
,
106
,
9
,
124
,
4
,
107
,
2
,
114
,
136
,
119
,
64
,
130
,
0
,
87
,
0
,
89
,
0
,
100
,
5
,
100
,
5
,
125
,
5
,
126
,
5
,
88
,
0
,
113
,
64
,
88
,
0
,
113
,
64
,
87
,
0
,
124
,
0
,
83
,
0
,
41
,
6
,
122
,
238
,
70
,
105
,
103
,
117
,
114
,
101
,
32
,
111
,
117
,
116
,
32
,
119
,
104
,
97
,
116
,
32
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
114
,
101
,
116
,
117
,
114
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
32
,
112
,
97
,
114
,
97
,
109
,
101
,
116
,
101
,
114
,
32
,
105
,
115
,
32
,
97
,
32
,
99
,
97
,
108
,
108
,
97
,
98
,
108
,
101
,
32
,
119
,
104
,
105
,
99
,
104
,
32
,
116
,
97
,
107
,
101
,
115
,
32
,
116
,
104
,
101
,
32
,
110
,
97
,
109
,
101
,
32
,
111
,
102
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
116
,
111
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
46
,
32
,
73
,
116
,
32
,
105
,
115
,
32
,
114
,
101
,
113
,
117
,
105
,
114
,
101
,
100
,
32
,
116
,
111
,
32
,
100
,
101
,
99
,
111
,
117
,
112
,
108
,
101
,
32
,
116
,
104
,
101
,
32
,
102
,
117
,
110
,
99
,
116
,
105
,
111
,
110
,
32
,
102
,
114
,
111
,
109
,
32
,
97
,
115
,
115
,
117
,
109
,
105
,
110
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
39
,
115
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
105
,
109
,
112
,
108
,
101
,
109
,
101
,
110
,
116
,
97
,
116
,
105
,
111
,
110
,
32
,
105
,
115
,
32
,
100
,
101
,
115
,
105
,
114
,
101
,
100
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
127
,
0
,
0
,
0
,
250
,
1
,
42
,
218
,
7
,
95
,
95
,
97
,
108
,
108
,
95
,
95
,
122
,
5
,
123
,
125
,
46
,
123
,
125
,
78
,
41
,
10
,
114
,
4
,
0
,
0
,
0
,
114
,
126
,
0
,
0
,
0
,
218
,
6
,
114
,
101
,
109
,
111
,
118
,
101
,
218
,
6
,
101
,
120
,
116
,
101
,
110
,
100
,
114
,
184
,
0
,
0
,
0
,
114
,
38
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
178
,
0
,
0
,
0
,
114
,
15
,
0
,
0
,
0
,
41
,
6
,
114
,
83
,
0
,
0
,
0
,
218
,
8
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
114
,
179
,
0
,
0
,
0
,
218
,
1
,
120
,
90
,
9
,
102
,
114
,
111
,
109
,
95
,
110
,
97
,
109
,
101
,
90
,
3
,
101
,
120
,
99
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
16
,
95
,
104
,
97
,
110
,
100
,
108
,
101
,
95
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
221
,
3
,
0
,
0
,
115
,
32
,
0
,
0
,
0
,
0
,
10
,
10
,
1
,
8
,
1
,
8
,
1
,
10
,
1
,
10
,
1
,
12
,
1
,
10
,
1
,
10
,
1
,
14
,
1
,
2
,
1
,
14
,
1
,
16
,
4
,
10
,
1
,
2
,
1
,
24
,
1
,
114
,
189
,
0
,
0
,
0
,
99
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
6
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
146
,
0
,
0
,
0
,
124
,
0
,
160
,
0
,
100
,
1
,
161
,
1
,
125
,
1
,
124
,
0
,
160
,
0
,
100
,
2
,
161
,
1
,
125
,
2
,
124
,
1
,
100
,
3
,
107
,
9
,
114
,
82
,
124
,
2
,
100
,
3
,
107
,
9
,
114
,
78
,
124
,
1
,
124
,
2
,
106
,
1
,
107
,
3
,
114
,
78
,
116
,
2
,
106
,
3
,
100
,
4
,
124
,
1
,
155
,
2
,
100
,
5
,
124
,
2
,
106
,
1
,
155
,
2
,
100
,
6
,
157
,
5
,
116
,
4
,
100
,
7
,
100
,
8
,
141
,
3
,
1
,
0
,
124
,
1
,
83
,
0
,
124
,
2
,
100
,
3
,
107
,
9
,
114
,
96
,
124
,
2
,
106
,
1
,
83
,
0
,
116
,
2
,
106
,
3
,
100
,
9
,
116
,
4
,
100
,
7
,
100
,
8
,
141
,
3
,
1
,
0
,
124
,
0
,
100
,
10
,
25
,
0
,
125
,
1
,
100
,
11
,
124
,
0
,
107
,
7
,
114
,
142
,
124
,
1
,
160
,
5
,
100
,
12
,
161
,
1
,
100
,
13
,
25
,
0
,
125
,
1
,
124
,
1
,
83
,
0
,
41
,
14
,
122
,
167
,
67
,
97
,
108
,
99
,
117
,
108
,
97
,
116
,
101
,
32
,
119
,
104
,
97
,
116
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
98
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
105
,
115
,
32
,
110
,
111
,
116
,
32
,
103
,
117
,
97
,
114
,
97
,
110
,
116
,
101
,
101
,
100
,
32
,
116
,
111
,
32
,
98
,
101
,
32
,
100
,
101
,
102
,
105
,
110
,
101
,
100
,
32
,
111
,
114
,
32
,
99
,
111
,
117
,
108
,
100
,
32
,
98
,
101
,
32
,
115
,
101
,
116
,
32
,
116
,
111
,
32
,
78
,
111
,
110
,
101
,
10
,
32
,
32
,
32
,
32
,
116
,
111
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
32
,
116
,
104
,
97
,
116
,
32
,
105
,
116
,
115
,
32
,
112
,
114
,
111
,
112
,
101
,
114
,
32
,
118
,
97
,
108
,
117
,
101
,
32
,
105
,
115
,
32
,
117
,
110
,
107
,
110
,
111
,
119
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
130
,
0
,
0
,
0
,
114
,
89
,
0
,
0
,
0
,
78
,
122
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
32
,
33
,
61
,
32
,
95
,
95
,
115
,
112
,
101
,
99
,
95
,
95
,
46
,
112
,
97
,
114
,
101
,
110
,
116
,
32
,
40
,
122
,
4
,
32
,
33
,
61
,
32
,
250
,
1
,
41
,
233
,
3
,
0
,
0
,
0
,
41
,
1
,
90
,
10
,
115
,
116
,
97
,
99
,
107
,
108
,
101
,
118
,
101
,
108
,
122
,
89
,
99
,
97
,
110
,
39
,
116
,
32
,
114
,
101
,
115
,
111
,
108
,
118
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
102
,
114
,
111
,
109
,
32
,
95
,
95
,
115
,
112
,
101
,
99
,
95
,
95
,
32
,
111
,
114
,
32
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
44
,
32
,
102
,
97
,
108
,
108
,
105
,
110
,
103
,
32
,
98
,
97
,
99
,
107
,
32
,
111
,
110
,
32
,
95
,
95
,
110
,
97
,
109
,
101
,
95
,
95
,
32
,
97
,
110
,
100
,
32
,
95
,
95
,
112
,
97
,
116
,
104
,
95
,
95
,
114
,
1
,
0
,
0
,
0
,
114
,
127
,
0
,
0
,
0
,
114
,
117
,
0
,
0
,
0
,
114
,
19
,
0
,
0
,
0
,
41
,
6
,
114
,
30
,
0
,
0
,
0
,
114
,
119
,
0
,
0
,
0
,
114
,
167
,
0
,
0
,
0
,
114
,
168
,
0
,
0
,
0
,
114
,
169
,
0
,
0
,
0
,
114
,
118
,
0
,
0
,
0
,
41
,
3
,
218
,
7
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
114
,
161
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
17
,
95
,
99
,
97
,
108
,
99
,
95
,
95
,
95
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
95
,
95
,
252
,
3
,
0
,
0
,
115
,
30
,
0
,
0
,
0
,
0
,
7
,
10
,
1
,
10
,
1
,
8
,
1
,
18
,
1
,
22
,
2
,
10
,
1
,
4
,
1
,
8
,
1
,
6
,
2
,
6
,
2
,
10
,
1
,
8
,
1
,
8
,
1
,
14
,
1
,
114
,
193
,
0
,
0
,
0
,
99
,
5
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
9
,
0
,
0
,
0
,
5
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
166
,
0
,
0
,
0
,
124
,
4
,
100
,
1
,
107
,
2
,
114
,
18
,
116
,
0
,
124
,
0
,
131
,
1
,
125
,
5
,
110
,
36
,
124
,
1
,
100
,
2
,
107
,
9
,
114
,
30
,
124
,
1
,
110
,
2
,
105
,
0
,
125
,
6
,
116
,
1
,
124
,
6
,
131
,
1
,
125
,
7
,
116
,
0
,
124
,
0
,
124
,
7
,
124
,
4
,
131
,
3
,
125
,
5
,
124
,
3
,
115
,
150
,
124
,
4
,
100
,
1
,
107
,
2
,
114
,
84
,
116
,
0
,
124
,
0
,
160
,
2
,
100
,
3
,
161
,
1
,
100
,
1
,
25
,
0
,
131
,
1
,
83
,
0
,
124
,
0
,
115
,
92
,
124
,
5
,
83
,
0
,
116
,
3
,
124
,
0
,
131
,
1
,
116
,
3
,
124
,
0
,
160
,
2
,
100
,
3
,
161
,
1
,
100
,
1
,
25
,
0
,
131
,
1
,
24
,
0
,
125
,
8
,
116
,
4
,
106
,
5
,
124
,
5
,
106
,
6
,
100
,
2
,
116
,
3
,
124
,
5
,
106
,
6
,
131
,
1
,
124
,
8
,
24
,
0
,
133
,
2
,
25
,
0
,
25
,
0
,
83
,
0
,
110
,
12
,
116
,
7
,
124
,
5
,
124
,
3
,
116
,
0
,
131
,
3
,
83
,
0
,
100
,
2
,
83
,
0
,
41
,
4
,
97
,
215
,
1
,
0
,
0
,
73
,
109
,
112
,
111
,
114
,
116
,
32
,
97
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
84
,
104
,
101
,
32
,
39
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
105
,
115
,
32
,
117
,
115
,
101
,
100
,
32
,
116
,
111
,
32
,
105
,
110
,
102
,
101
,
114
,
32
,
119
,
104
,
101
,
114
,
101
,
32
,
116
,
104
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
105
,
115
,
32
,
111
,
99
,
99
,
117
,
114
,
114
,
105
,
110
,
103
,
32
,
102
,
114
,
111
,
109
,
10
,
32
,
32
,
32
,
32
,
116
,
111
,
32
,
104
,
97
,
110
,
100
,
108
,
101
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
115
,
46
,
32
,
84
,
104
,
101
,
32
,
39
,
108
,
111
,
99
,
97
,
108
,
115
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
105
,
115
,
32
,
105
,
103
,
110
,
111
,
114
,
101
,
100
,
46
,
32
,
84
,
104
,
101
,
10
,
32
,
32
,
32
,
32
,
39
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
39
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
115
,
112
,
101
,
99
,
105
,
102
,
105
,
101
,
115
,
32
,
119
,
104
,
97
,
116
,
32
,
115
,
104
,
111
,
117
,
108
,
100
,
32
,
101
,
120
,
105
,
115
,
116
,
32
,
97
,
115
,
32
,
97
,
116
,
116
,
114
,
105
,
98
,
117
,
116
,
101
,
115
,
32
,
111
,
110
,
32
,
116
,
104
,
101
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
10
,
32
,
32
,
32
,
32
,
98
,
101
,
105
,
110
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
100
,
32
,
40
,
101
,
46
,
103
,
46
,
32
,
96
,
96
,
102
,
114
,
111
,
109
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
60
,
102
,
114
,
111
,
109
,
108
,
105
,
115
,
116
,
62
,
96
,
96
,
41
,
46
,
32
,
32
,
84
,
104
,
101
,
32
,
39
,
108
,
101
,
118
,
101
,
108
,
39
,
10
,
32
,
32
,
32
,
32
,
97
,
114
,
103
,
117
,
109
,
101
,
110
,
116
,
32
,
114
,
101
,
112
,
114
,
101
,
115
,
101
,
110
,
116
,
115
,
32
,
116
,
104
,
101
,
32
,
112
,
97
,
99
,
107
,
97
,
103
,
101
,
32
,
108
,
111
,
99
,
97
,
116
,
105
,
111
,
110
,
32
,
116
,
111
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
102
,
114
,
111
,
109
,
32
,
105
,
110
,
32
,
97
,
32
,
114
,
101
,
108
,
97
,
116
,
105
,
118
,
101
,
10
,
32
,
32
,
32
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
40
,
101
,
46
,
103
,
46
,
32
,
96
,
96
,
102
,
114
,
111
,
109
,
32
,
46
,
46
,
112
,
107
,
103
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
32
,
109
,
111
,
100
,
96
,
96
,
32
,
119
,
111
,
117
,
108
,
100
,
32
,
104
,
97
,
118
,
101
,
32
,
97
,
32
,
39
,
108
,
101
,
118
,
101
,
108
,
39
,
32
,
111
,
102
,
32
,
50
,
41
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
19
,
0
,
0
,
0
,
78
,
114
,
117
,
0
,
0
,
0
,
41
,
8
,
114
,
182
,
0
,
0
,
0
,
114
,
193
,
0
,
0
,
0
,
218
,
9
,
112
,
97
,
114
,
116
,
105
,
116
,
105
,
111
,
110
,
114
,
159
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
189
,
0
,
0
,
0
,
41
,
9
,
114
,
15
,
0
,
0
,
0
,
114
,
192
,
0
,
0
,
0
,
218
,
6
,
108
,
111
,
99
,
97
,
108
,
115
,
114
,
187
,
0
,
0
,
0
,
114
,
162
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
90
,
8
,
103
,
108
,
111
,
98
,
97
,
108
,
115
,
95
,
114
,
161
,
0
,
0
,
0
,
90
,
7
,
99
,
117
,
116
,
95
,
111
,
102
,
102
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
10
,
95
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
95
,
95
,
23
,
4
,
0
,
0
,
115
,
26
,
0
,
0
,
0
,
0
,
11
,
8
,
1
,
10
,
2
,
16
,
1
,
8
,
1
,
12
,
1
,
4
,
3
,
8
,
1
,
18
,
1
,
4
,
1
,
4
,
4
,
26
,
3
,
32
,
2
,
114
,
196
,
0
,
0
,
0
,
99
,
1
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
38
,
0
,
0
,
0
,
116
,
0
,
160
,
1
,
124
,
0
,
161
,
1
,
125
,
1
,
124
,
1
,
100
,
0
,
107
,
8
,
114
,
30
,
116
,
2
,
100
,
1
,
124
,
0
,
23
,
0
,
131
,
1
,
130
,
1
,
116
,
3
,
124
,
1
,
131
,
1
,
83
,
0
,
41
,
2
,
78
,
122
,
25
,
110
,
111
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
32
,
110
,
97
,
109
,
101
,
100
,
32
,
41
,
4
,
114
,
142
,
0
,
0
,
0
,
114
,
146
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
41
,
2
,
114
,
15
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
18
,
95
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
102
,
114
,
111
,
109
,
95
,
110
,
97
,
109
,
101
,
58
,
4
,
0
,
0
,
115
,
8
,
0
,
0
,
0
,
0
,
1
,
10
,
1
,
8
,
1
,
12
,
1
,
114
,
197
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
12
,
0
,
0
,
0
,
12
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
244
,
0
,
0
,
0
,
124
,
1
,
97
,
0
,
124
,
0
,
97
,
1
,
116
,
2
,
116
,
1
,
131
,
1
,
125
,
2
,
120
,
86
,
116
,
1
,
106
,
3
,
160
,
4
,
161
,
0
,
68
,
0
,
93
,
72
,
92
,
2
,
125
,
3
,
125
,
4
,
116
,
5
,
124
,
4
,
124
,
2
,
131
,
2
,
114
,
28
,
124
,
3
,
116
,
1
,
106
,
6
,
107
,
6
,
114
,
62
,
116
,
7
,
125
,
5
,
110
,
18
,
116
,
0
,
160
,
8
,
124
,
3
,
161
,
1
,
114
,
28
,
116
,
9
,
125
,
5
,
110
,
2
,
113
,
28
,
116
,
10
,
124
,
4
,
124
,
5
,
131
,
2
,
125
,
6
,
116
,
11
,
124
,
6
,
124
,
4
,
131
,
2
,
1
,
0
,
113
,
28
,
87
,
0
,
116
,
1
,
106
,
3
,
116
,
12
,
25
,
0
,
125
,
7
,
120
,
54
,
100
,
5
,
68
,
0
,
93
,
46
,
125
,
8
,
124
,
8
,
116
,
1
,
106
,
3
,
107
,
7
,
114
,
144
,
116
,
13
,
124
,
8
,
131
,
1
,
125
,
9
,
110
,
10
,
116
,
1
,
106
,
3
,
124
,
8
,
25
,
0
,
125
,
9
,
116
,
14
,
124
,
7
,
124
,
8
,
124
,
9
,
131
,
3
,
1
,
0
,
113
,
120
,
87
,
0
,
121
,
12
,
116
,
13
,
100
,
2
,
131
,
1
,
125
,
10
,
87
,
0
,
110
,
24
,
4
,
0
,
116
,
15
,
107
,
10
,
114
,
206
,
1
,
0
,
1
,
0
,
1
,
0
,
100
,
3
,
125
,
10
,
89
,
0
,
110
,
2
,
88
,
0
,
116
,
14
,
124
,
7
,
100
,
2
,
124
,
10
,
131
,
3
,
1
,
0
,
116
,
13
,
100
,
4
,
131
,
1
,
125
,
11
,
116
,
14
,
124
,
7
,
100
,
4
,
124
,
11
,
131
,
3
,
1
,
0
,
100
,
3
,
83
,
0
,
41
,
6
,
122
,
250
,
83
,
101
,
116
,
117
,
112
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
32
,
98
,
121
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
105
,
110
,
103
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
97
,
110
,
100
,
32
,
105
,
110
,
106
,
101
,
99
,
116
,
105
,
110
,
103
,
32
,
116
,
104
,
101
,
109
,
10
,
32
,
32
,
32
,
32
,
105
,
110
,
116
,
111
,
32
,
116
,
104
,
101
,
32
,
103
,
108
,
111
,
98
,
97
,
108
,
32
,
110
,
97
,
109
,
101
,
115
,
112
,
97
,
99
,
101
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
65
,
115
,
32
,
115
,
121
,
115
,
32
,
105
,
115
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
102
,
111
,
114
,
32
,
115
,
121
,
115
,
46
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
97
,
99
,
99
,
101
,
115
,
115
,
32
,
97
,
110
,
100
,
32
,
95
,
105
,
109
,
112
,
32
,
105
,
115
,
32
,
110
,
101
,
101
,
100
,
101
,
100
,
32
,
116
,
111
,
32
,
108
,
111
,
97
,
100
,
32
,
98
,
117
,
105
,
108
,
116
,
45
,
105
,
110
,
10
,
32
,
32
,
32
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
44
,
32
,
116
,
104
,
111
,
115
,
101
,
32
,
116
,
119
,
111
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
32
,
109
,
117
,
115
,
116
,
32
,
98
,
101
,
32
,
101
,
120
,
112
,
108
,
105
,
99
,
105
,
116
,
108
,
121
,
32
,
112
,
97
,
115
,
115
,
101
,
100
,
32
,
105
,
110
,
46
,
10
,
10
,
32
,
32
,
32
,
32
,
114
,
167
,
0
,
0
,
0
,
114
,
20
,
0
,
0
,
0
,
78
,
114
,
55
,
0
,
0
,
0
,
41
,
1
,
114
,
167
,
0
,
0
,
0
,
41
,
16
,
114
,
46
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
13
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
218
,
5
,
105
,
116
,
101
,
109
,
115
,
114
,
171
,
0
,
0
,
0
,
114
,
69
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
75
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
114
,
128
,
0
,
0
,
0
,
114
,
133
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
114
,
197
,
0
,
0
,
0
,
114
,
5
,
0
,
0
,
0
,
114
,
70
,
0
,
0
,
0
,
41
,
12
,
218
,
10
,
115
,
121
,
115
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
218
,
11
,
95
,
105
,
109
,
112
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
11
,
109
,
111
,
100
,
117
,
108
,
101
,
95
,
116
,
121
,
112
,
101
,
114
,
15
,
0
,
0
,
0
,
114
,
83
,
0
,
0
,
0
,
114
,
93
,
0
,
0
,
0
,
114
,
82
,
0
,
0
,
0
,
90
,
11
,
115
,
101
,
108
,
102
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
12
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
110
,
97
,
109
,
101
,
90
,
14
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
13
,
116
,
104
,
114
,
101
,
97
,
100
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
90
,
14
,
119
,
101
,
97
,
107
,
114
,
101
,
102
,
95
,
109
,
111
,
100
,
117
,
108
,
101
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
6
,
95
,
115
,
101
,
116
,
117
,
112
,
65
,
4
,
0
,
0
,
115
,
50
,
0
,
0
,
0
,
0
,
9
,
4
,
1
,
4
,
3
,
8
,
1
,
20
,
1
,
10
,
1
,
10
,
1
,
6
,
1
,
10
,
1
,
6
,
2
,
2
,
1
,
10
,
1
,
14
,
3
,
10
,
1
,
10
,
1
,
10
,
1
,
10
,
2
,
10
,
1
,
16
,
3
,
2
,
1
,
12
,
1
,
14
,
2
,
10
,
1
,
12
,
3
,
8
,
1
,
114
,
201
,
0
,
0
,
0
,
99
,
2
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
,
0
,
0
,
0
,
3
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
38
,
0
,
0
,
0
,
116
,
0
,
124
,
0
,
124
,
1
,
131
,
2
,
1
,
0
,
116
,
1
,
106
,
2
,
160
,
3
,
116
,
4
,
161
,
1
,
1
,
0
,
116
,
1
,
106
,
2
,
160
,
3
,
116
,
5
,
161
,
1
,
1
,
0
,
100
,
1
,
83
,
0
,
41
,
2
,
122
,
48
,
73
,
110
,
115
,
116
,
97
,
108
,
108
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
32
,
102
,
111
,
114
,
32
,
98
,
117
,
105
,
108
,
116
,
105
,
110
,
32
,
97
,
110
,
100
,
32
,
102
,
114
,
111
,
122
,
101
,
110
,
32
,
109
,
111
,
100
,
117
,
108
,
101
,
115
,
78
,
41
,
6
,
114
,
201
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
166
,
0
,
0
,
0
,
114
,
109
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
41
,
2
,
114
,
199
,
0
,
0
,
0
,
114
,
200
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
8
,
95
,
105
,
110
,
115
,
116
,
97
,
108
,
108
,
112
,
4
,
0
,
0
,
115
,
6
,
0
,
0
,
0
,
0
,
2
,
10
,
2
,
12
,
1
,
114
,
202
,
0
,
0
,
0
,
99
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
,
0
,
0
,
0
,
4
,
0
,
0
,
0
,
67
,
0
,
0
,
0
,
115
,
32
,
0
,
0
,
0
,
100
,
1
,
100
,
2
,
108
,
0
,
125
,
0
,
124
,
0
,
97
,
1
,
124
,
0
,
160
,
2
,
116
,
3
,
106
,
4
,
116
,
5
,
25
,
0
,
161
,
1
,
1
,
0
,
100
,
2
,
83
,
0
,
41
,
3
,
122
,
57
,
73
,
110
,
115
,
116
,
97
,
108
,
108
,
32
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
32
,
116
,
104
,
97
,
116
,
32
,
114
,
101
,
113
,
117
,
105
,
114
,
101
,
32
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
32
,
102
,
105
,
108
,
101
,
115
,
121
,
115
,
116
,
101
,
109
,
32
,
97
,
99
,
99
,
101
,
115
,
115
,
114
,
19
,
0
,
0
,
0
,
78
,
41
,
6
,
218
,
26
,
95
,
102
,
114
,
111
,
122
,
101
,
110
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
108
,
105
,
98
,
95
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
114
,
115
,
0
,
0
,
0
,
114
,
202
,
0
,
0
,
0
,
114
,
14
,
0
,
0
,
0
,
114
,
79
,
0
,
0
,
0
,
114
,
1
,
0
,
0
,
0
,
41
,
1
,
114
,
203
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
27
,
95
,
105
,
110
,
115
,
116
,
97
,
108
,
108
,
95
,
101
,
120
,
116
,
101
,
114
,
110
,
97
,
108
,
95
,
105
,
109
,
112
,
111
,
114
,
116
,
101
,
114
,
115
,
120
,
4
,
0
,
0
,
115
,
6
,
0
,
0
,
0
,
0
,
3
,
8
,
1
,
4
,
1
,
114
,
204
,
0
,
0
,
0
,
41
,
2
,
78
,
78
,
41
,
1
,
78
,
41
,
2
,
78
,
114
,
19
,
0
,
0
,
0
,
41
,
51
,
114
,
3
,
0
,
0
,
0
,
114
,
115
,
0
,
0
,
0
,
114
,
12
,
0
,
0
,
0
,
114
,
16
,
0
,
0
,
0
,
114
,
51
,
0
,
0
,
0
,
114
,
29
,
0
,
0
,
0
,
114
,
36
,
0
,
0
,
0
,
114
,
17
,
0
,
0
,
0
,
114
,
18
,
0
,
0
,
0
,
114
,
41
,
0
,
0
,
0
,
114
,
42
,
0
,
0
,
0
,
114
,
45
,
0
,
0
,
0
,
114
,
56
,
0
,
0
,
0
,
114
,
58
,
0
,
0
,
0
,
114
,
68
,
0
,
0
,
0
,
114
,
74
,
0
,
0
,
0
,
114
,
77
,
0
,
0
,
0
,
114
,
84
,
0
,
0
,
0
,
114
,
95
,
0
,
0
,
0
,
114
,
96
,
0
,
0
,
0
,
114
,
102
,
0
,
0
,
0
,
114
,
78
,
0
,
0
,
0
,
218
,
6
,
111
,
98
,
106
,
101
,
99
,
116
,
90
,
9
,
95
,
80
,
79
,
80
,
85
,
76
,
65
,
84
,
69
,
114
,
128
,
0
,
0
,
0
,
114
,
133
,
0
,
0
,
0
,
114
,
136
,
0
,
0
,
0
,
114
,
91
,
0
,
0
,
0
,
114
,
80
,
0
,
0
,
0
,
114
,
140
,
0
,
0
,
0
,
114
,
141
,
0
,
0
,
0
,
114
,
81
,
0
,
0
,
0
,
114
,
142
,
0
,
0
,
0
,
114
,
152
,
0
,
0
,
0
,
114
,
157
,
0
,
0
,
0
,
114
,
163
,
0
,
0
,
0
,
114
,
165
,
0
,
0
,
0
,
114
,
170
,
0
,
0
,
0
,
114
,
175
,
0
,
0
,
0
,
90
,
15
,
95
,
69
,
82
,
82
,
95
,
77
,
83
,
71
,
95
,
80
,
82
,
69
,
70
,
73
,
88
,
114
,
177
,
0
,
0
,
0
,
114
,
180
,
0
,
0
,
0
,
114
,
181
,
0
,
0
,
0
,
114
,
182
,
0
,
0
,
0
,
114
,
189
,
0
,
0
,
0
,
114
,
193
,
0
,
0
,
0
,
114
,
196
,
0
,
0
,
0
,
114
,
197
,
0
,
0
,
0
,
114
,
201
,
0
,
0
,
0
,
114
,
202
,
0
,
0
,
0
,
114
,
204
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
10
,
0
,
0
,
0
,
114
,
11
,
0
,
0
,
0
,
218
,
8
,
60
,
109
,
111
,
100
,
117
,
108
,
101
,
62
,
25
,
0
,
0
,
0
,
115
,
96
,
0
,
0
,
0
,
4
,
0
,
4
,
2
,
8
,
8
,
8
,
7
,
4
,
2
,
4
,
3
,
16
,
4
,
14
,
68
,
14
,
21
,
14
,
19
,
8
,
19
,
8
,
19
,
8
,
11
,
14
,
8
,
8
,
11
,
8
,
12
,
8
,
16
,
8
,
36
,
14
,
27
,
14
,
101
,
16
,
26
,
6
,
3
,
10
,
45
,
14
,
60
,
8
,
17
,
8
,
17
,
8
,
25
,
8
,
29
,
8
,
23
,
8
,
16
,
14
,
73
,
14
,
77
,
14
,
13
,
8
,
9
,
8
,
9
,
10
,
47
,
8
,
20
,
4
,
1
,
8
,
2
,
8
,
27
,
8
,
6
,
10
,
25
,
8
,
31
,
8
,
27
,
18
,
35
,
8
,
7
,
8
,
47
,
8
,
8
,
};
Python/importlib_external.h
View file @
36ff451e
This source diff could not be displayed because it is too large. You can
view the blob
instead.
Python/peephole.c
View file @
36ff451e
...
...
@@ -492,16 +492,6 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
in_consts
=
0
;
switch
(
opcode
)
{
/* Replace UNARY_NOT POP_JUMP_IF_FALSE
with POP_JUMP_IF_TRUE */
case
UNARY_NOT
:
if
(
nextop
!=
POP_JUMP_IF_FALSE
||
!
ISBASICBLOCK
(
blocks
,
op_start
,
i
+
1
))
break
;
fill_nops
(
codestr
,
op_start
,
i
+
1
);
codestr
[
nexti
]
=
PACKOPARG
(
POP_JUMP_IF_TRUE
,
_Py_OPARG
(
codestr
[
nexti
]));
break
;
/* not a is b --> a is not b
not a in b --> a not in b
not a is not b --> a is b
...
...
@@ -626,10 +616,10 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
result of the first test implies the success of a similar
test or the failure of the opposite test.
Arises in code like:
"if a and b:"
"if a or b:"
"a and b or c"
"(a and b) and c"
"(a or b) or c"
"(a or b) and c"
x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_FALSE_OR_POP z
--> x:JUMP_IF_FALSE_OR_POP z
x:JUMP_IF_FALSE_OR_POP y y:JUMP_IF_TRUE_OR_POP z
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment