bpo-41076: Pre-feed the parser with the f-string expression location (GH-21054)

This commit changes the parsing of f-string expressions with the new parser. The parser gets pre-fed with the location of the expression itself (not the f-string, which was what we were doing before). This allows us to completely skip the shifting of the AST nodes after the parsing is completed.
This commit is contained in:
Lysandros Nikolaou 2020-06-28 02:41:48 +03:00 committed by GitHub
parent 89e82c4a62
commit 1f0f4abb11
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 2437 additions and 2653 deletions

View File

@ -0,0 +1 @@
Pre-feed the parser with the location of the f-string expression, not the f-string itself, which allows us to skip the shifting of the AST node locations after the parsing is completed.

View File

@ -423,6 +423,9 @@ _PyPegen_raise_error_known_location(Parser *p, PyObject *errtype,
}
}
if (p->start_rule == Py_fstring_input) {
col_offset -= p->starting_col_offset;
}
Py_ssize_t col_number = col_offset;
if (p->tok->encoding != NULL) {

View File

@ -271,235 +271,6 @@ _PyPegen_parsestr(Parser *p, int *bytesmode, int *rawmode, PyObject **result,
// FSTRING STUFF
static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset);
static void fstring_shift_argument(expr_ty parent, arg_ty args, int lineno, int col_offset);
static inline void shift_expr(expr_ty parent, expr_ty n, int line, int col) {
if (n == NULL) {
return;
}
if (parent->lineno < n->lineno) {
col = 0;
}
fstring_shift_expr_locations(n, line, col);
}
static inline void shift_arg(expr_ty parent, arg_ty n, int line, int col) {
if (parent->lineno < n->lineno) {
col = 0;
}
fstring_shift_argument(parent, n, line, col);
}
static void fstring_shift_seq_locations(expr_ty parent, asdl_seq *seq, int lineno, int col_offset) {
for (Py_ssize_t i = 0, l = asdl_seq_LEN(seq); i < l; i++) {
expr_ty expr = asdl_seq_GET(seq, i);
if (expr == NULL){
continue;
}
shift_expr(parent, expr, lineno, col_offset);
}
}
static void fstring_shift_slice_locations(expr_ty parent, expr_ty slice, int lineno, int col_offset) {
switch (slice->kind) {
case Slice_kind:
if (slice->v.Slice.lower) {
shift_expr(parent, slice->v.Slice.lower, lineno, col_offset);
}
if (slice->v.Slice.upper) {
shift_expr(parent, slice->v.Slice.upper, lineno, col_offset);
}
if (slice->v.Slice.step) {
shift_expr(parent, slice->v.Slice.step, lineno, col_offset);
}
break;
case Tuple_kind:
fstring_shift_seq_locations(parent, slice->v.Tuple.elts, lineno, col_offset);
break;
default:
break;
}
}
static void fstring_shift_comprehension(expr_ty parent, comprehension_ty comp, int lineno, int col_offset) {
shift_expr(parent, comp->target, lineno, col_offset);
shift_expr(parent, comp->iter, lineno, col_offset);
fstring_shift_seq_locations(parent, comp->ifs, lineno, col_offset);
}
static void fstring_shift_argument(expr_ty parent, arg_ty arg, int lineno, int col_offset) {
if (arg->annotation != NULL){
shift_expr(parent, arg->annotation, lineno, col_offset);
}
arg->col_offset = arg->col_offset + col_offset;
arg->end_col_offset = arg->end_col_offset + col_offset;
arg->lineno = arg->lineno + lineno;
arg->end_lineno = arg->end_lineno + lineno;
}
static void fstring_shift_arguments(expr_ty parent, arguments_ty args, int lineno, int col_offset) {
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->posonlyargs); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->posonlyargs, i);
shift_arg(parent, arg, lineno, col_offset);
}
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->args); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->args, i);
shift_arg(parent, arg, lineno, col_offset);
}
if (args->vararg != NULL) {
shift_arg(parent, args->vararg, lineno, col_offset);
}
for (Py_ssize_t i = 0, l = asdl_seq_LEN(args->kwonlyargs); i < l; i++) {
arg_ty arg = asdl_seq_GET(args->kwonlyargs, i);
shift_arg(parent, arg, lineno, col_offset);
}
fstring_shift_seq_locations(parent, args->kw_defaults, lineno, col_offset);
if (args->kwarg != NULL) {
shift_arg(parent, args->kwarg, lineno, col_offset);
}
fstring_shift_seq_locations(parent, args->defaults, lineno, col_offset);
}
static void fstring_shift_children_locations(expr_ty node, int lineno, int col_offset) {
switch (node->kind) {
case BoolOp_kind:
fstring_shift_seq_locations(node, node->v.BoolOp.values, lineno, col_offset);
break;
case NamedExpr_kind:
shift_expr(node, node->v.NamedExpr.target, lineno, col_offset);
shift_expr(node, node->v.NamedExpr.value, lineno, col_offset);
break;
case BinOp_kind:
shift_expr(node, node->v.BinOp.left, lineno, col_offset);
shift_expr(node, node->v.BinOp.right, lineno, col_offset);
break;
case UnaryOp_kind:
shift_expr(node, node->v.UnaryOp.operand, lineno, col_offset);
break;
case Lambda_kind:
fstring_shift_arguments(node, node->v.Lambda.args, lineno, col_offset);
shift_expr(node, node->v.Lambda.body, lineno, col_offset);
break;
case IfExp_kind:
shift_expr(node, node->v.IfExp.test, lineno, col_offset);
shift_expr(node, node->v.IfExp.body, lineno, col_offset);
shift_expr(node, node->v.IfExp.orelse, lineno, col_offset);
break;
case Dict_kind:
fstring_shift_seq_locations(node, node->v.Dict.keys, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Dict.values, lineno, col_offset);
break;
case Set_kind:
fstring_shift_seq_locations(node, node->v.Set.elts, lineno, col_offset);
break;
case ListComp_kind:
shift_expr(node, node->v.ListComp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.ListComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.ListComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case SetComp_kind:
shift_expr(node, node->v.SetComp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.SetComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.SetComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case DictComp_kind:
shift_expr(node, node->v.DictComp.key, lineno, col_offset);
shift_expr(node, node->v.DictComp.value, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.DictComp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.DictComp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case GeneratorExp_kind:
shift_expr(node, node->v.GeneratorExp.elt, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.GeneratorExp.generators); i < l; i++) {
comprehension_ty comp = asdl_seq_GET(node->v.GeneratorExp.generators, i);
fstring_shift_comprehension(node, comp, lineno, col_offset);
}
break;
case Await_kind:
shift_expr(node, node->v.Await.value, lineno, col_offset);
break;
case Yield_kind:
shift_expr(node, node->v.Yield.value, lineno, col_offset);
break;
case YieldFrom_kind:
shift_expr(node, node->v.YieldFrom.value, lineno, col_offset);
break;
case Compare_kind:
shift_expr(node, node->v.Compare.left, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Compare.comparators, lineno, col_offset);
break;
case Call_kind:
shift_expr(node, node->v.Call.func, lineno, col_offset);
fstring_shift_seq_locations(node, node->v.Call.args, lineno, col_offset);
for (Py_ssize_t i = 0, l = asdl_seq_LEN(node->v.Call.keywords); i < l; i++) {
keyword_ty keyword = asdl_seq_GET(node->v.Call.keywords, i);
shift_expr(node, keyword->value, lineno, col_offset);
}
break;
case Attribute_kind:
shift_expr(node, node->v.Attribute.value, lineno, col_offset);
break;
case Subscript_kind:
shift_expr(node, node->v.Subscript.value, lineno, col_offset);
fstring_shift_slice_locations(node, node->v.Subscript.slice, lineno, col_offset);
shift_expr(node, node->v.Subscript.slice, lineno, col_offset);
break;
case Starred_kind:
shift_expr(node, node->v.Starred.value, lineno, col_offset);
break;
case List_kind:
fstring_shift_seq_locations(node, node->v.List.elts, lineno, col_offset);
break;
case Tuple_kind:
fstring_shift_seq_locations(node, node->v.Tuple.elts, lineno, col_offset);
break;
case JoinedStr_kind:
fstring_shift_seq_locations(node, node->v.JoinedStr.values, lineno, col_offset);
break;
case FormattedValue_kind:
shift_expr(node, node->v.FormattedValue.value, lineno, col_offset);
if (node->v.FormattedValue.format_spec) {
shift_expr(node, node->v.FormattedValue.format_spec, lineno, col_offset);
}
break;
default:
return;
}
}
/* Shift locations for the given node and all its children by adding `lineno`
and `col_offset` to existing locations. Note that n is the already parsed
expression. */
static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset)
{
n->col_offset = n->col_offset + col_offset;
// The following is needed, in order for nodes spanning across multiple lines
// to be shifted correctly. An example of such a node is a Call node, the closing
// parenthesis of which is not on the same line as its name.
if (n->lineno == n->end_lineno) {
n->end_col_offset = n->end_col_offset + col_offset;
}
fstring_shift_children_locations(n, lineno, col_offset);
n->lineno = n->lineno + lineno;
n->end_lineno = n->end_lineno + lineno;
}
/* Fix locations for the given node and its children.
`parent` is the enclosing node.
@ -507,7 +278,7 @@ static void fstring_shift_expr_locations(expr_ty n, int lineno, int col_offset)
`expr_str` is the child node's string representation, including braces.
*/
static void
fstring_fix_expr_location(Token *parent, expr_ty n, char *expr_str)
fstring_find_expr_location(Token *parent, char *expr_str, int *p_lines, int *p_cols)
{
char *substr = NULL;
char *start;
@ -552,7 +323,8 @@ fstring_fix_expr_location(Token *parent, expr_ty n, char *expr_str)
}
}
}
fstring_shift_expr_locations(n, lines, cols);
*p_lines = lines;
*p_cols = cols;
}
@ -598,11 +370,26 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
return NULL;
}
str[0] = '(';
// The call to fstring_find_expr_location is responsible for finding the column offset
// the generated AST nodes need to be shifted to the right, which is equal to the number
// of the f-string characters before the expression starts. In order to correctly compute
// this offset, strstr gets called in fstring_find_expr_location which only succeeds
// if curly braces appear before and after the f-string expression (exactly like they do
// in the f-string itself), hence the following lines.
str[0] = '{';
memcpy(str+1, expr_start, len);
str[len+1] = ')';
str[len+1] = '}';
str[len+2] = 0;
int lines, cols;
fstring_find_expr_location(t, str, &lines, &cols);
// The parentheses are needed in order to allow for leading whitespace withing
// the f-string expression. This consequently gets parsed as a group (see the
// group rule in python.gram).
str[0] = '(';
str[len+1] = ')';
struct tok_state* tok = PyTokenizer_FromString(str, 1);
if (tok == NULL) {
PyMem_Free(str);
@ -613,21 +400,14 @@ fstring_compile_expr(Parser *p, const char *expr_start, const char *expr_end,
Parser *p2 = _PyPegen_Parser_New(tok, Py_fstring_input, p->flags, p->feature_version,
NULL, p->arena);
p2->starting_lineno = p->starting_lineno + p->tok->first_lineno - 1;
p2->starting_col_offset = p->tok->first_lineno == p->tok->lineno
? p->starting_col_offset + t->col_offset : 0;
p2->starting_lineno = t->lineno + lines - 1;
p2->starting_col_offset = p->tok->first_lineno == p->tok->lineno ? t->col_offset + cols : cols;
expr = _PyPegen_run_parser(p2);
if (expr == NULL) {
goto exit;
}
/* Reuse str to find the correct column offset. */
str[0] = '{';
str[len+1] = '}';
fstring_fix_expr_location(t, expr, str);
result = expr;
exit:

428
Python/importlib.h generated
View File

@ -1594,219 +1594,219 @@ const unsigned char _Py_M__importlib_bootstrap[] = {
0,218,1,120,90,5,119,104,101,114,101,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,114,215,0,0,0,9,
4,0,0,115,52,0,0,0,0,10,8,1,10,1,4,1,
12,2,4,1,4,1,2,255,4,1,8,255,10,2,8,1,
14,1,10,1,2,255,8,2,10,1,14,1,2,1,14,1,
14,4,10,1,16,255,2,2,12,1,26,1,114,215,0,0,
0,99,1,0,0,0,0,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,117,1,114,82,124,2,100,3,117,
1,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,117,1,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,118,1,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,146,0,0,
0,114,106,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,142,0,0,0,114,129,0,0,0,114,
22,0,0,0,41,6,114,35,0,0,0,114,131,0,0,0,
114,193,0,0,0,114,194,0,0,0,114,195,0,0,0,114,
130,0,0,0,41,3,218,7,103,108,111,98,97,108,115,114,
187,0,0,0,114,96,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,46,4,0,0,115,
42,0,0,0,0,7,10,1,10,1,8,1,18,1,6,1,
2,255,4,1,4,255,6,2,4,254,6,3,4,1,8,1,
6,2,6,2,4,254,6,3,8,1,8,1,14,1,114,221,
0,0,0,114,10,0,0,0,99,5,0,0,0,0,0,0,
0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,0,
0,115,180,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,117,1,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,26,116,7,124,5,
100,4,131,2,114,172,116,8,124,5,124,3,116,0,131,3,
83,0,124,5,83,0,100,2,83,0,41,5,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,22,0,0,0,78,114,129,
0,0,0,114,142,0,0,0,41,9,114,210,0,0,0,114,
221,0,0,0,218,9,112,97,114,116,105,116,105,111,110,114,
186,0,0,0,114,15,0,0,0,114,93,0,0,0,114,1,
0,0,0,114,4,0,0,0,114,215,0,0,0,41,9,114,
17,0,0,0,114,220,0,0,0,218,6,108,111,99,97,108,
115,114,216,0,0,0,114,188,0,0,0,114,97,0,0,0,
90,8,103,108,111,98,97,108,115,95,114,187,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,73,4,0,0,115,30,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,1,10,1,12,2,114,224,0,0,0,99,
1,0,0,0,0,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,117,0,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,161,0,0,0,114,168,0,0,0,114,80,0,
0,0,114,160,0,0,0,41,2,114,17,0,0,0,114,96,
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,110,4,0,0,115,8,0,0,0,0,
1,10,1,8,1,12,1,114,225,0,0,0,99,2,0,0,
0,0,0,0,0,0,0,0,0,10,0,0,0,5,0,0,
0,67,0,0,0,115,166,0,0,0,124,1,97,0,124,0,
97,1,116,2,116,1,131,1,125,2,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,26,124,3,116,1,106,6,118,0,114,60,
116,7,125,5,110,18,116,0,160,8,124,3,161,1,114,26,
116,9,125,5,110,2,113,26,116,10,124,4,124,5,131,2,
125,6,116,11,124,6,124,4,131,2,1,0,113,26,116,1,
106,3,116,12,25,0,125,7,100,1,68,0,93,46,125,8,
124,8,116,1,106,3,118,1,114,138,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,114,100,2,83,0,
41,3,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,41,3,
114,23,0,0,0,114,193,0,0,0,114,65,0,0,0,78,
41,15,114,58,0,0,0,114,15,0,0,0,114,14,0,0,
0,114,93,0,0,0,218,5,105,116,101,109,115,114,197,0,
0,0,114,79,0,0,0,114,161,0,0,0,114,89,0,0,
0,114,175,0,0,0,114,143,0,0,0,114,149,0,0,0,
114,1,0,0,0,114,225,0,0,0,114,5,0,0,0,41,
10,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,17,0,0,0,114,97,0,0,
0,114,110,0,0,0,114,96,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,114,10,0,0,0,114,10,0,0,0,
114,11,0,0,0,218,6,95,115,101,116,117,112,117,4,0,
0,115,36,0,0,0,0,9,4,1,4,3,8,1,18,1,
10,1,10,1,6,1,10,1,6,2,2,1,10,1,12,3,
10,1,8,1,10,1,10,2,10,1,114,229,0,0,0,99,
2,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,
3,0,0,0,67,0,0,0,115,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,229,0,0,0,114,
15,0,0,0,114,192,0,0,0,114,120,0,0,0,114,161,
0,0,0,114,175,0,0,0,41,2,114,227,0,0,0,114,
228,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,152,4,0,
0,115,6,0,0,0,0,2,10,2,12,1,114,230,0,0,
0,99,0,0,0,0,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,22,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,127,0,0,0,114,230,0,0,0,114,15,0,0,0,114,
93,0,0,0,114,1,0,0,0,41,1,114,231,0,0,0,
4,0,0,115,48,0,0,0,0,10,8,1,10,1,4,1,
12,2,4,1,10,1,8,255,10,2,8,1,14,1,10,1,
2,255,8,2,10,1,14,1,2,1,14,1,14,4,10,1,
16,255,2,2,12,1,26,1,114,215,0,0,0,99,1,0,
0,0,0,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,117,1,114,82,124,2,100,3,117,1,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,117,1,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,118,1,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,146,0,0,0,114,106,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,142,0,0,0,114,129,0,0,0,114,22,0,0,0,
41,6,114,35,0,0,0,114,131,0,0,0,114,193,0,0,
0,114,194,0,0,0,114,195,0,0,0,114,130,0,0,0,
41,3,218,7,103,108,111,98,97,108,115,114,187,0,0,0,
114,96,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,46,4,0,0,115,42,0,0,0,
0,7,10,1,10,1,8,1,18,1,6,1,2,255,4,1,
4,255,6,2,4,254,6,3,4,1,8,1,6,2,6,2,
4,254,6,3,8,1,8,1,14,1,114,221,0,0,0,114,
10,0,0,0,99,5,0,0,0,0,0,0,0,0,0,0,
0,9,0,0,0,5,0,0,0,67,0,0,0,115,180,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,117,1,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,26,116,7,124,5,100,4,131,2,
114,172,116,8,124,5,124,3,116,0,131,3,83,0,124,5,
83,0,100,2,83,0,41,5,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,22,0,0,0,78,114,129,0,0,0,114,
142,0,0,0,41,9,114,210,0,0,0,114,221,0,0,0,
218,9,112,97,114,116,105,116,105,111,110,114,186,0,0,0,
114,15,0,0,0,114,93,0,0,0,114,1,0,0,0,114,
4,0,0,0,114,215,0,0,0,41,9,114,17,0,0,0,
114,220,0,0,0,218,6,108,111,99,97,108,115,114,216,0,
0,0,114,188,0,0,0,114,97,0,0,0,90,8,103,108,
111,98,97,108,115,95,114,187,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,73,
4,0,0,115,30,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,1,10,1,12,2,114,224,0,0,0,99,1,0,0,0,
0,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,117,0,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,
161,0,0,0,114,168,0,0,0,114,80,0,0,0,114,160,
0,0,0,41,2,114,17,0,0,0,114,96,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,110,4,0,0,115,8,0,0,0,0,1,10,1,8,
1,12,1,114,225,0,0,0,99,2,0,0,0,0,0,0,
0,0,0,0,0,10,0,0,0,5,0,0,0,67,0,0,
0,115,166,0,0,0,124,1,97,0,124,0,97,1,116,2,
116,1,131,1,125,2,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,26,124,3,116,1,106,6,118,0,114,60,116,7,125,5,
110,18,116,0,160,8,124,3,161,1,114,26,116,9,125,5,
110,2,113,26,116,10,124,4,124,5,131,2,125,6,116,11,
124,6,124,4,131,2,1,0,113,26,116,1,106,3,116,12,
25,0,125,7,100,1,68,0,93,46,125,8,124,8,116,1,
106,3,118,1,114,138,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,114,100,2,83,0,41,3,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,41,3,114,23,0,0,
0,114,193,0,0,0,114,65,0,0,0,78,41,15,114,58,
0,0,0,114,15,0,0,0,114,14,0,0,0,114,93,0,
0,0,218,5,105,116,101,109,115,114,197,0,0,0,114,79,
0,0,0,114,161,0,0,0,114,89,0,0,0,114,175,0,
0,0,114,143,0,0,0,114,149,0,0,0,114,1,0,0,
0,114,225,0,0,0,114,5,0,0,0,41,10,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,17,0,0,0,114,97,0,0,0,114,110,0,
0,0,114,96,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,114,10,0,0,0,114,10,0,0,0,114,11,0,0,
0,218,6,95,115,101,116,117,112,117,4,0,0,115,36,0,
0,0,0,9,4,1,4,3,8,1,18,1,10,1,10,1,
6,1,10,1,6,2,2,1,10,1,12,3,10,1,8,1,
10,1,10,2,10,1,114,229,0,0,0,99,2,0,0,0,
0,0,0,0,0,0,0,0,2,0,0,0,3,0,0,0,
67,0,0,0,115,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,229,0,0,0,114,15,0,0,0,
114,192,0,0,0,114,120,0,0,0,114,161,0,0,0,114,
175,0,0,0,41,2,114,227,0,0,0,114,228,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,160,4,0,0,
115,6,0,0,0,0,3,8,1,4,1,114,232,0,0,0,
41,2,78,78,41,1,78,41,2,78,114,22,0,0,0,41,
4,78,78,114,10,0,0,0,114,22,0,0,0,41,50,114,
3,0,0,0,114,127,0,0,0,114,12,0,0,0,114,18,
0,0,0,114,60,0,0,0,114,34,0,0,0,114,44,0,
0,0,114,19,0,0,0,114,20,0,0,0,114,50,0,0,
0,114,51,0,0,0,114,54,0,0,0,114,66,0,0,0,
114,68,0,0,0,114,77,0,0,0,114,87,0,0,0,114,
91,0,0,0,114,98,0,0,0,114,112,0,0,0,114,113,
0,0,0,114,92,0,0,0,114,143,0,0,0,114,149,0,
0,0,114,153,0,0,0,114,108,0,0,0,114,94,0,0,
0,114,159,0,0,0,114,160,0,0,0,114,95,0,0,0,
114,161,0,0,0,114,175,0,0,0,114,180,0,0,0,114,
189,0,0,0,114,191,0,0,0,114,196,0,0,0,114,202,
0,0,0,90,15,95,69,82,82,95,77,83,71,95,80,82,
69,70,73,88,114,204,0,0,0,114,207,0,0,0,218,6,
111,98,106,101,99,116,114,208,0,0,0,114,209,0,0,0,
114,210,0,0,0,114,215,0,0,0,114,221,0,0,0,114,
224,0,0,0,114,225,0,0,0,114,229,0,0,0,114,230,
0,0,0,114,232,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,1,0,0,0,115,94,0,0,0,4,
24,4,2,8,8,8,8,4,2,4,3,16,4,14,77,14,
21,14,16,8,37,8,17,8,11,14,8,8,11,8,12,8,
16,8,36,14,101,16,26,10,45,14,72,8,17,8,17,8,
30,8,37,8,42,8,15,14,75,14,79,14,13,8,9,8,
9,10,47,8,16,4,1,8,2,8,32,6,3,8,16,10,
15,14,37,8,27,10,37,8,7,8,35,8,8,
8,95,105,110,115,116,97,108,108,152,4,0,0,115,6,0,
0,0,0,2,10,2,12,1,114,230,0,0,0,99,0,0,
0,0,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,22,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,127,0,0,
0,114,230,0,0,0,114,15,0,0,0,114,93,0,0,0,
114,1,0,0,0,41,1,114,231,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,160,4,0,0,115,6,0,0,
0,0,3,8,1,4,1,114,232,0,0,0,41,2,78,78,
41,1,78,41,2,78,114,22,0,0,0,41,4,78,78,114,
10,0,0,0,114,22,0,0,0,41,50,114,3,0,0,0,
114,127,0,0,0,114,12,0,0,0,114,18,0,0,0,114,
60,0,0,0,114,34,0,0,0,114,44,0,0,0,114,19,
0,0,0,114,20,0,0,0,114,50,0,0,0,114,51,0,
0,0,114,54,0,0,0,114,66,0,0,0,114,68,0,0,
0,114,77,0,0,0,114,87,0,0,0,114,91,0,0,0,
114,98,0,0,0,114,112,0,0,0,114,113,0,0,0,114,
92,0,0,0,114,143,0,0,0,114,149,0,0,0,114,153,
0,0,0,114,108,0,0,0,114,94,0,0,0,114,159,0,
0,0,114,160,0,0,0,114,95,0,0,0,114,161,0,0,
0,114,175,0,0,0,114,180,0,0,0,114,189,0,0,0,
114,191,0,0,0,114,196,0,0,0,114,202,0,0,0,90,
15,95,69,82,82,95,77,83,71,95,80,82,69,70,73,88,
114,204,0,0,0,114,207,0,0,0,218,6,111,98,106,101,
99,116,114,208,0,0,0,114,209,0,0,0,114,210,0,0,
0,114,215,0,0,0,114,221,0,0,0,114,224,0,0,0,
114,225,0,0,0,114,229,0,0,0,114,230,0,0,0,114,
232,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,1,0,0,0,115,94,0,0,0,4,24,4,2,8,
8,8,8,4,2,4,3,16,4,14,77,14,21,14,16,8,
37,8,17,8,11,14,8,8,11,8,12,8,16,8,36,14,
101,16,26,10,45,14,72,8,17,8,17,8,30,8,37,8,
42,8,15,14,75,14,79,14,13,8,9,8,9,10,47,8,
16,4,1,8,2,8,32,6,3,8,16,10,15,14,37,8,
27,10,37,8,7,8,35,8,8,
};

File diff suppressed because it is too large Load Diff